21.11.2009, 13:01 | #11 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
По пункту 1 - я "пас". Дело в том, что тут предполагается использование т.н. внешних процедур. Такие процедуры обычно пишутся на Ассемблере, вызываются командой "Exec", и тогда функция DosExitCode (в модуле Dos) возвращает код, отображающий корректность выполнения вызываемой процедуры. Я ничем подобным, извините, не занимался, так что опыта - 0. По пункту 4 я уже отмечал - когда-то использовал динамические переменные, указатели и т.п., но это было давно и сейчас прочно забыто. В принципе, ничего сложного. Только уж лучше Вы сами... На всякий случай, дам одну ссылку, где про это вроде толково написано: http://klax.tula.ru/~zet/frames/thm_pointers.html По пунктам 2 и 3 - вроде как сделано. Структура внешнего файла: первая строка - количество строк таблицы (длина), вторая строка - количество столбцов (ширина), дальше (без пустых строк!) сама таблица. Навтыкал всюду, где можно, проверки правильности операций ввода. Вот: Код:
{$I-} program tablica; uses crt; const max_s= 50; max_d= 50; k=99; TYPE AR=array[1..max_d,1..max_s] of integer; var a:AR; MVcol:ARRAY[1..max_s] of integer; d, s, i, j, Min_Max,z: integer; IOR:WORD; f:TEXT; F_Name:STRING; PROCEDURE Table_Inp(Zti,Dti,Sti:INTEGER; VAR Ati:AR); {$I-} VAR i,j:INTEGER; IORti:WORD; BEGIN if Zti=1 then begin for i:=1 to Dti do begin for j:=1 to Sti do repeat write('Enter the value a[',i,',',j,'] '); readln (Ati[i,j]); IORti:=IOResult; IF IORti>0 THEN WriteLn('Wrong value!'); until IORti=0; end; end; if Zti=2 then begin randomize; for i:=1 to Dti do for j:=1 to Sti do Ati[i,j]:=random (k); end; clrscr; for i:=1 to Dti do begin for j:=1 to Sti do write(Ati[i,j]:3); writeln; end; readln; END; {Table_Inp} begin repeat clrscr; writeln ('Choose the method of table infilling'); writeln ('1- from keyboard'); writeln ('2- random values'); writeln ('3- from file'); readln (z); IOR:=IOResult; until (IOR=0) AND ((z=1) or (z=2) or (z=3)); IF z=3 THEN begin repeat WriteLn('Enter full path file name:'); ReadLn(F_Name); Assign(f,F_Name); ReSet(f); IOR:=IOResult; IF IOR>0 THEN WriteLn('File Name is wrong!'); until IOR=0; ReadLn(f,d); ReadLn(f,s); FOR i:=1 TO d DO begin FOR j:=1 TO s DO Read(f, A[i,j]); Readln(f); end; IOR:=IOResult; IF IOR>0 THEN begin WriteLn('Wrong data in the file! Press "Enter" to exit.'); ReadLn; Halt; end; Close(f); end ELSE begin d:=-1; s:=-1; repeat clrscr; write('Enter the table length. Maximum value is ' ,max_d,' '); readln(d); IOR:=IOResult; until (IOR=0) and (d>=1) and (d<= max_d); {clrscr; } repeat clrscr; write('Enter the table width. Maximum value is ' ,max_s,' '); readln(s); IOR:=IOResult; until (IOR=0) and (s>=1) and (s<= max_s); Table_Inp(z,d,s,a); end; FOR j:=1 TO s DO begin MVcol[j]:=a[1,j]; FOR i:=2 TO d DO IF a[i,j]>MVcol[j] THEN MVcol[j]:=a[i,j]; end; Min_Max:=MVcol[1]; FOR i:=2 TO s DO IF Min_Max>MVcol[i] THEN Min_Max:=MVcol[i]; Writeln('Minimum value is ',Min_Max); ReadLn; end. |
|
21.11.2009, 13:01 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Кто то уже создавал подобные темы на этом форуме Добавление таблицы на сайт с SMC Joomla Связать 2 Excel таблицы в Wordе Паскаль. Обработка натурального числа Обработка матриц. Паскаль |
21.11.2009, 21:58 | #14 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Черт, сейчас глянул в текст программы, обнаружил одну неряшливость. Переменную "z" из описания параметров ПРОЦЕДУРЫ нужно убрать (в сообщении поправлено). В принципе это ни на что не влияет, она там "пустышка", но так, для блезиру.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|