| 
        
    
		
			| 
			
        		| kub 
 
   Новичок
 |             ВОК КОЕ-ЧТО НАВОЯЛ. Может посмотрите, проверите.Мне кажется не совсем соответствует заданию.
 
 program q;
 type cat=record
 avtor:string[40];
 nazv:string[80];
 god:string[4];
 spec:string[40];
 end;
 var s1,s2:string;
 i,n:integer;
 f1,f2:text;
 d:array [1..100] of cat;
 begin writeln('vvedite n');
 readln(n);
 writeln('vvedite put k 1-my faily');
 readln(s1);
 assign(f1,s1);
 writeln('vvedite put k 2-my faily');
 readln(s2);
 assign(f2,s2);
 rewrite(f1);
 writeln('вводите авторов в алфавитном порядке');
 for I:=1 to n do
 with d do
 begin writeln('vvesti avtora');
 readln(avtor);
 writeln(f1,avtor);
 writeln('vvesti nazvanie');
 readln(nazv);
 writeln(f1,nazv);
 writeln('vvesti god');
 readln(god);
 writeln(f1,god);
 writeln('vvesti special');
 readln(spec);
 writeln(f1,spec);
 end;
 close(f1);
 reset(f1);
 rewrite(f2);
 writeln('введите автора для поиска');
 readln(s1);
 while not(eof(f1)) do
 for i:=1 to n do
 begin readln(f1,s2);
 if s1=s2 then writeln(f2,d.nazv);
 end;
 close(f1);
 close(f2);
 end.
 
 |  
				| Всего сообщений: 10 | Присоединился: апрель 2007 | Отправлено: 26 апр. 2007 23:07 | IP
 |  |  
			| 
			
        		| ditar 
 
   Новичок
 |                KMA, пмоги пожалуйста с задачей, что-то я совсем запутался.
 Есть основная программа и два модуля mod_my и Obj_mod, когда не использую Obj_mod все работает нормально, стоит мне его подключить - основная программа обращается только к нему,   хотя ниде даже нет вызова его процедур, а первый модуль игнорирует.
 вот основная программа, если нужны модули-выложу, не хотел места много занимать.
 
 program kursovaya;
 Uses winCRT,  mod_my, Obj_mod;
 var c2:word;
 begin
 repeat
 menu;
 readln(c2);
 case c2 of
 1:Spisok_sotr;
 2:zapis(C);
 3:obrabotka_zaprosov;
 4:exit;
 else neverno;
 end;
 until c2=4;
 end.
 все процедуры относятся к mod_my, а выполняется Obj_mod.
 |  
				| Всего сообщений: 6 | Присоединился: октябрь 2006 | Отправлено: 26 апр. 2007 23:37 | IP
 |  |  
			| 
			
        		| KMA   
 
   
   Долгожитель
 |              Код оформлен ужасно =( Постарайся писать более что-ли правильнее, я не наставиваю на больших отступах, но хотя бы чтобы begin а под ним соответствующий ему end.
 
 Далее пиши [ i ] вот так, или {} скобках, т. к. здесь это читается, как ВВК Сode, и выделяет курсивом.
 Год, кстати, можно занести и как целое число, а не как строка.
 
 Еще вопрос тебе обязательно вводить в алфавитном порядке?
 
 
 Ладно суть не в этом.  Во-первых не зачем работать с массивом, из 100 значений, ты не обижайся, но реально, такое количество памяти заест любого.
 
 Создай переменную,
 VAR buf: cat;
 и производи все действия через нее, честное слово не убудет (вместо with d[ i ] do, ставишь with buf do ) Кстати записывать все же лучше одну переменную. С нее же потом и читать будешь.  Хотя дело твое, в общем меняю только последнее, запись всех произведений заданного автора.
 
 У тебя ошибка в следующем, когда читаешь все из файла, и запускаешь цикл по i, и если находит нужную фамилию, то выводит i запись. Но ведь у тебя не i же автор??? У тебя на 1 запись попадает 4 строки в файле.
 
 Решений куча, мое может и не самое оптимальное, но хотя бы логичное.
 
 reset (f1);
 reWrite (f2);
 write ('Введите атора для поиска ->');
 readLn (s1);
 while not eof(f1) do
 begin
 readLn (f1, s2)
 if s2=s1
 then
 begin
 readLn (f1, s2); {следующая после автора запись по списку это произведение, поэтому его-то и считываем, а затем записываем}
 writeLn (f2, s2)
 end
 end;
 
 
 
 (Сообщение отредактировал KMA 26 апр. 2007 23:48)
 |  
				| Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 26 апр. 2007 23:45 | IP
 |  |  
			| 
			
        		| KMA   
 
   
   Долгожитель
 |              ditar, подключили вы его правильно =) Больше ничего сказать не могу.
 
 Вы его компилировали? У вам был создан файл Obj_mod.tpu и cоответствует ли заголовок этому названию (obj_mod)? Да, и еще, пожалуйста, напишите что вам говорит компилятор?
 |  
				| Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 26 апр. 2007 23:53 | IP
 |  |  
			| 
			
        		| ditar 
 
   Новичок
 |                KMA, все скомпилировано, названия файлов соответствуют, лежит в одной папке. Компилятор говорит ОК. По отдельности (Uses winCRT,  mod_my;) или (Uses winCRT,   Obj_mod;) выполняются и первый и второй модули, а в кучу слепить не могу. Мне еще интересно то, что я к этому Obj_mod в программе не обращаюсь, а он выполняется. А не мог я в модуле что-то такое сотворить, чтобы он "тянул на себя одеяло" ? Он раньше был автономной программой, а я из него модуль сделал....
 
 Unit Obj_mod;
 interface
 uses wincrt;
 Type Tsymb=object
 x,y:integer;
 c:char;
 constructor Init(ax,ay:integer; ac:char);
 Procedure Draw(ac:char);  virtual;
 Procedure Show;
 Procedure Hide;
 Procedure MoveTo(dx,dy:integer);
 end;
 implementation
 Type Tstr=object(Tsymb)
 n:byte;
 constructor Init(ax,ay:integer; an:byte; ac:char);
 Procedure Draw(ac:char); virtual;
 end;
 
 Constructor TSymb.Init;
 begin
 x:=ax;
 y:=ay;
 c:=ac;
 end;
 Constructor TStr.Init;
 begin
 inherited init(ax,ay,ac) ;
 n:=an;
 end;
 
 Procedure TSymb.Draw;
 begin
 gotoxy(x,y);
 write(ac);
 end;
 
 Procedure Tstr.Draw;
 var {i}:byte;
 begin
 gotoxy(x,y);
 for {i}:=1 to n do
 write(ac);
 end;
 Procedure TSymb.Show;
 begin
 Draw(c);
 end;
 Procedure TSymb.Hide;
 begin
 Draw(' ');
 end;
 Procedure TSymb.MoveTo;
 begin
 Hide;
 x:=x+dx;
 y:=y+dy;
 Show;
 end;
 
 Var p:Tstr;
 c:char;
 Begin
 cursorto(0,0);
 writeln('Используйте стрелки Num pad для дви-жения строки.');
 writeln('Для выхода нажмите Esc...');
 p.Init(10,5,3,'%');
 p.Show;
 while true do
 begin
 c:=readkey;
 case c of
 #49:p.Moveto(-1,1);
 #50:p.Moveto(0,1);
 #51:p.Moveto(1,1);
 #52:p.Moveto(-1,0);
 #54:p.Moveto(1,0);
 #55:p.Moveto(-1,-1);
 #56:p.Moveto(0,-1);
 #57:p.Moveto(1,-1);
 #27:donewincrt;
 end;
 end;
 readkey;
 donewincrt;
 End.
 
 |  
				| Всего сообщений: 6 | Присоединился: октябрь 2006 | Отправлено: 27 апр. 2007 0:07 | IP
 |  |  
			| 
			
        		| KMA   
 
   
   Долгожитель
 |              У тебя текст в модуле, как правило, его бы нужно избегать, лучше выполни его в программе. Почему и ошибка, у тебя "зацикливание" в тексте модуля. Может поэтому. Попробуй в прогу перенести.
 
 При подключении по отдельности может они и выполняются. Попробуй поменять местами их инициализацию, вначале Obj_mod, затем mod_my. Не поможет, тогда надо что-то с текстом делать... ч
 |  
				| Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 27 апр. 2007 0:17 | IP
 |  |  
			| 
			
        		| KMA   
 
   
   Долгожитель
 |              Почитал, свой пост и понял, что сказал не по русски.
 
 В общем вот это
 
 Begin
 cursorto(0,0);
 writeln('Используйте стрелки Num pad для дви-жения строки.');
 writeln('Для выхода нажмите Esc...');
 p.Init(10,5,3,'%');
 p.Show;
 while true do
 begin
 c:=readkey;
 case c of
 #49:p.Moveto(-1,1);
 #50:p.Moveto(0,1);
 #51:p.Moveto(1,1);
 #52:p.Moveto(-1,0);
 #54:p.Moveto(1,0);
 #55:p.Moveto(-1,-1);
 #56:p.Moveto(0,-1);
 #57:p.Moveto(1,-1);
 #27:donewincrt;
 end;
 end;
 readkey;
 donewincrt;
 End.
 
 У тебя выполняется при подключении модуля, это есть текст модуля, точнее команды, которые должны выполниться, при компиляции программы. Их бы следовало избегать.
 |  
				| Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 27 апр. 2007 0:22 | IP
 |  |  
			| 
			
        		| anuta 
 
   
   Новичок
 |                Пожалуйсто помогите написать программу сумму от 0 до 100 с операторами цикла while,repeat,for,естественно на паскале,очень прошу....
 |  
				| Всего сообщений: 7 | Присоединился: апрель 2007 | Отправлено: 29 апр. 2007 14:35 | IP
 |  |  
			| 
			
        		| Siriusss 
 
   
   Новичок
 |              Пожалуйста, помогите, забылось все...
   прога по Паскалю.
 Сформировать двумерный массив B размером 2 x 4 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл - это сделано. Вычислить и вывести на экран и в файл строку матрицы B, содержащую максимальное количество отрицательных элементов (оформить вычисление количества отрицательных элементов в виде функции).
 
 Сделано только это:
 
 uses crt;
 type mas=array[1..2,1..4] of integer;
 var B:mas;D:mas;
 i,j,k:integer;
 Function Otr(D:mas):integer;
 begin
 k:=0;
 for i:=1 to 2 do
 for j:=1 to 4 do begin
 if D[i,j]<0 then
 k:=k+1;
 otr:=k;
 end;
 end;
 begin
 clrscr;
 Randomize;
 writeln('Dannyi massiv');
 for i:=1 to 2 do
 for j:=1 to 4 do B[i,j]:=random(1001)-500;
 for i:=1 to 2 do
 begin
 for j:=1 to 4 do write(B[i,j]:5);
 writeln;
 end;
 writeln('Kolichestvo otricatelnyh elementov matricy=',Otr(B));
 readln;
 end.
 
 |  
				| Всего сообщений: 28 | Присоединился: апрель 2007 | Отправлено: 29 апр. 2007 17:10 | IP
 |  |  
			| 
			
        		| KMA   
 
   
   Долгожитель
 |              
 Сформировать двумерный массив B размером 2 x 4 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл - это сделано. Вычислить и вывести на экран и в файл строку матрицы B, содержащую максимальное количество отрицательных элементов (оформить вычисление количества отрицательных элементов в виде функции).
 
 
 Воо, молодец.
 
 Функция, которая определяет количество отрицательных элементов в строке будет выглядить так:
 
 function otrInRow (m: mas; i: byte): byte;
 Var j, k: byte;
 Begin
 k:=0;
 for j:=1 to 4 do
 if m[i, j]<0 then inc (k);
 otrInRow:=k
 End;
 здесь i это номер строки.
 
 В основной программе, это будет выглядеть так.
 (nRow строки, в которой максимальное значение отрицательных элементов)
 
 nOtr:=0;
 for i:=1 to 2 do
 begin
 nNow:=otrInRow (B, i); {текущее знач. отриц. элементов}
 if nNow>nOtr  {ищем отриц. максим. количество отриц. элем.}
 then
 begin
 nOtr:=nNow;
 nRow:=i;
 end;
 end;
 
 {Выведем строки с наибольшим количеством отриц. элементов}
 
 for j:=1 to 4 do
 write (B[nRow, j], ' ');
 
 Вот и вся задача =)
 |  
				| Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 29 апр. 2007 23:10 | IP
 |  |  |