Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Сделать программу работоспособной (http://www.tehnari.ru/f41/t88801/)

Sandra 2000 06.06.2013 09:26

Сделать программу работоспособной
 
Вложений: 2
У меня возникла проблема с модулем и с основной программой.(Turbo Pascal)
1-я ошибка, когда компоную модуль(Error 22:Structure too large) в массиве (см.1 картинка). Исправляю до 1..50 элементов модуль компонуется. Всё нормально.
Потом перехожу в программу.(Error 3:Unknown identifier)там где я использую AddStud (см.2 картинка)
В чём проблема? Помогите, пожалуйста разобраться.
Да,ещё самое интерсное когда запускаю в Turbo Pascal(ДосБокс)всё нормально после исправления в модуле. А когда в Turbo Pascal обычном так вот получается. Но мне нужно именно на последнем чтобы работало.

Модуль
Код:

unit module;
interface
uses crt;
type TRec=record
      numGroup:string[50];
      lastName:string;
      name:string;
      otchestvo:string;
      grunt:string;
    end;
procedure okno;
procedure clr;
procedure createFile(filename:string);
function filefound(filename: string): boolean;
procedure AddStud(filename:string);
procedure printStud(filename:string);

implementation
procedure okno;
begin
  window (12,7,65,20);
  TEXTBACKGROUND(11);
  CLRSCR;
  textcolor(0);
  window (13,7,65,20);
  clrscr;
end;
procedure clr;
begin
  clrscr;
  window(0,0,80,40);
  TEXTBACKGROUND(0);
  clrscr;
  TEXTCOLOR(15);
  window(0,0,80,40);
  clrscr;
end;

function filefound(filename: string): boolean;
var
  f:file of TRec;
begin
  {$i-}
    assign(f,filename);
    reset(f);
    close (f);
  {$i+}
  filefound:=(ioresult=0);
end;

procedure createFile(filename:string);
var
  f: file of TRec;
begin
  assign(f, filename);
  rewrite(f);
  close(f);
end;

procedure AddStud(filename:string);
var f:file of TRec;
    stud: TRec;
    Astud:array[1..100] of Trec;
    key:char;
    k,i:integer;
begin

  assign(f,filename);
  Reset(f);
  i:=1;
  while(not eof(f)) do
  begin
    read(f, stud);
    inc(i);
    Astud[i].numGroup:= stud.numGroup;
    Astud[i].lastName:= stud.lastName;
    Astud[i].name:= stud.name;
    Astud[i].otchestvo:= stud.otchestvo;
    Astud[i].grunt:= stud.grunt;
  end;
  close(f);
  k:=i;

  repeat

    clrscr;
    okno;
    inc(i);
    writeln('Введите группу:');
    readln(Astud[i].numGroup);
    writeln('Введите фамилию:');
    readln(Astud[i].lastName);
    writeln('Введите имя:');
    readln(Astud[i].name);
    writeln('Введите отчество:');
    readln(Astud[i].otchestvo);
    writeln('Введите сумму стипендии (в гривнах) или 0 если студент без стипендии');
    readln(Astud[i].grunt);

    writeln('Для выхода нажмите <ESC>  и любую клавишу для продолжения');
    key:=readkey;

  until ord(key)=27;

  rewrite(f);
  seek(f,filesize(f));
  k:=i;
  for i := 1 to k do
      begin
        write(f,Astud[i]);
      end;
  close(f);
  clr;

end;

procedure printStud(filename:string);
var
  f: file of TRec;
  stud: TRec;
  j:byte;
begin
  j:=0;
  okno;
  assign(f, filename);
  reset(f);
  while(not eof(f)) do
  begin

  begin
    read(f, stud);
    if (stud.numGroup<>'')then
    begin
    writeln('Группа  - ', stud.numGroup);
    writeln('Фамилия - ', stud.lastName);
    writeln('Имя - ', stud.name);
    writeln('Отчество - ', stud.otchestvo);
    writeln('Стипендия - ', stud.grunt);
    inc(j);
    end;
    if (j = 3) then
      begin
        writeln('Для вывода следующей страницы нажмите любую клавишу');
        j:=0;
        readkey;
        clrscr;
      end;
  end;
  end;
  close(f);

end;
end.

Программа
Код:

Program Pract;
uses crt, module;

var
  f:file of TRec;
  filename:string;
  r:integer;
  key:char;
  ch:char;
  k:integer;
begin


  repeat
  clrscr;
  okno;
  writeln('1. Создать файл');
  writeln('2. Добавить в файл информацию о студентах');
  writeln('3. Вывести информацию из файла на экран');
  writeln('ESC - выход');
  ch:=readkey;
  case ch of
      '1': begin
            clrscr;
            okno;
            writeln('Укажите полное имя файла');
            readln(filename);
            createFile(filename);
            writeln('Файл ',filename,' успешно создан');
            writeln('Для продолжения нажмите любую клавишу...');
          end;
      '2': begin
            clrscr;
            okno;
            writeln('Укажите полное имя файла');
            readln(filename);
            if(not (filefound(filename))) then
              begin
                textcolor(12);
                writeln('Ошибка! Файл ',filename, 'Не найден');
                textcolor(15);
                writeln('Создать файл с текущим именем? y - да, N - нет');
                ch:=readkey;
                case ch of
                  'Y','y','Н','н':begin
                                    createFile(filename);
                                    writeln('Файл ',filename,' успешно создан');
                                    writeln('Для продолжения нажмите любую клавишу...');
                                  end;
                  'N','n','Т','т':begin

                                  end;
                end;
              end
            else
              begin
                AddStud(filename);
              end;
          end;
      '3': begin
              clrscr;
              okno;
              writeln('Укажите полное имя файла');
              readln(filename);
              if(not (filefound(filename))) then
              begin
                textcolor(12);
                writeln('Ошибка! Файл ',filename, 'Не найден');
                textcolor(15);
                writeln('Для продолжения нажмите любую клавишу...');
                readkey;
              end
              else
                printStud(filename);
                writeln('Для продолжения нажмите любую клавишу...');
                readkey;
          end;
  end;
  until(ord(ch) = 27);
end.


Vladimir_S 06.06.2013 10:35

Цитата:

Сообщение от Sandra 2000 (Сообщение 914999)
У меня возникла проблема с модулем и с основной программой.(Turbo Pascal)

Сандра, отлаживать Вашу программу я не возьмусь, ибо нет таких возможностей просто по времени, но один совет дам. Сталкивался с тем, что некоторые реализации Паскаля не переносят формата полей записи в виде свободных строк. Поэтому попробуйте добавить всюду длины, т.е. не string; а string[20]; и т.п.

Sandra 2000 07.06.2013 09:27

Последовала вашему совету, но к сожалению в модуле всё нормально, а в программе ругается.

Vladimir_S 07.06.2013 11:22

Вложений: 2
Цитата:

Сообщение от Sandra 2000 (Сообщение 915288)
Последовала вашему совету, но к сожалению в модуле всё нормально, а в программе ругается.

Боюсь, ничем помочь не могу. Оттранслировал и модуль, и программу в своем DOS Free Pascal прямо как есть в #1 (только чертову кириллицу перекодировал) - у меня всё работает почти безупречно. Кроме того, запускал программу в DOS Turbo Pascal 7.0. Тут пришлось, как указано выше, задать длины строковых полей записи, иначе плюётся (Free Паскалю это дело до фонаря). Тоже работает. Правда, и там, и там выдает странности при выводе содержимого файла на экран. Пример: были введены данные трех студентов:
Код:

    Группа      Фамилия    Имя  Отчество    Стипендия
      66          Iv        Iv      Iv            50
      44          Pet      Pet    Pet          75
      11          Sid      Sid    Sid            0

Free Pascal выдал это:
Вложение 138441
то есть прокрутил список до конца и не остановился, а Turbo Pascal - это:
Вложение 138442
остановился, но накидал сверху какую-то хрень.
Поскольку это всё CRT-шные рюшечки, которые я лично никогда не использую, заниматься ими не буду.
Но в любом случае программа транслируется и работает. Так что Ваши проблемы - это какие-то задвиги реализаций трансляторов. Сочувствую.

Sandra 2000 07.06.2013 16:25

Так у меня на таком TurboPascal DOS box тоже всё нормально работает, а на обычном уже как только непробовала всё время ругается.

Sandra 2000 07.06.2013 18:25

Цитата:

Сообщение от Vladimir_S (Сообщение 915293)
то есть прокрутил список до конца и не остановился, а Turbo Pascal - это:
Вложение 138442
остановился, но накидал сверху какую-то хрень.
Поскольку это всё CRT-шные рюшечки, которые я лично никогда не использую, заниматься ими не буду.
Но в любом случае программа транслируется и работает. Так что Ваши проблемы - это какие-то задвиги реализаций трансляторов. Сочувствую.

Так это дело в моей программе установленной, а если на другом компьютере будет нормально?

Sandra 2000 07.06.2013 18:44

Вложений: 1
Я думаю ошибка где-то в этом куске, потому что я попробовала убрать программа заработала, но конечно не правильно. Подскажите кто-нибудь.


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.