Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 21.11.2009, 13:01   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Montespan Посмотреть сообщение
Разобралась, спасибо большое. Не могли бы вы помочь выполнить еще несколько требований к этой же программе?
1. В подпрограмме выполняется проверка входных параметров на допустимость. Подпрограмма возвращает код завер-шения по ссылке или в качестве значения функции, который показывает, правильно ли выполнилась подпрограмма.
2. Возможность заполнения таблицы из типизированного (или нетипизированного) файла с проверкой корректности имени файла и его содержимого. При этом размеры таблицы хранятся в начале того же файла.
3. Делается проверка корректности ввода чисел, т.е. защита от ввода вместо чисел посторонних символов.
4. Таблица реализована как двумерный динамический массив с использованием механизма указателей.
Так, ну сделал кое-что. Но, увы, далеко не всё.
По пункту 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.
Vladimir_S вне форума   Ответить с цитированием

Старый 21.11.2009, 13:01
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Кто то уже создавал подобные темы на этом форуме

Добавление таблицы на сайт с SMC Joomla
Связать 2 Excel таблицы в Wordе
Паскаль. Обработка натурального числа
Обработка матриц. Паскаль

Старый 21.11.2009, 13:24   #12 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Я могу дать разъяснения по работе с динамической памятью(указателями), если потребуется.
Long Cat вне форума   Ответить с цитированием
Старый 21.11.2009, 20:55   #13 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, огромное Вам спасибо! Это же такой труд...
Long Cat, спасибо! Завтра буду с этим разбираться.
Montespan вне форума   Ответить с цитированием
Старый 21.11.2009, 21:58   #14 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Montespan Посмотреть сообщение
Vladimir_S, огромное Вам спасибо! Это же такой труд...
Long Cat, спасибо! Завтра буду с этим разбираться.
Черт, сейчас глянул в текст программы, обнаружил одну неряшливость. Переменную "z" из описания параметров ПРОЦЕДУРЫ нужно убрать (в сообщении поправлено). В принципе это ни на что не влияет, она там "пустышка", но так, для блезиру.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:11.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.