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
|
|
|