Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2015, 13:49   #1
Vittoryny
Новичок
Джуниор
 
Регистрация: 20.03.2015
Сообщений: 3
Восклицание Создание списка

Нужно создать списк студентов,в который можно добавить элемент, удалить элемент списка, отобразить список на экран. кривой код есть. не могу понять, в чем ошибка. помогите пожалуйста)))

ошибки на данном этапе:
1 не выводит список полностью!
не могу добавить и удалить элементы.
кто поможет??? ЗЫ могу не за бесплатно)))
Vittoryny вне форума Ответить с цитированием
Старый 20.03.2015, 13:49   #2
Vittoryny
Новичок
Джуниор
 
Регистрация: 20.03.2015
Сообщений: 3
По умолчанию

Код:
uses crt;
 
 type
   pList = ^stud;
   Stud = record
      Familiya, Name, Otches, Pol : string[15];
      nomZach, nomGrup, godPos    : integer;
                          next    : pList;
   end;
 
 var
 list, start, l : plist;
  a,g,m,k,o,n,i,x,j:integer;

 
 label 1,2,3,4,5,6,7,8;
 begin
 
 Write('Количество студентов: '); readln(n);
 For i:=1 to n do
 begin
    New(l); { выделяем память под структуру }
    
    Write(i,'. Фамилия: ');readln(l^.Familiya);
    Write('Имя: '); readln(l^.Name);
    Write('Отчество: '); readln(l^.Otches);
    Write('Пол: '); readln(l^.Pol);
    Write('№ зачетной книжки: '); readln(l^.nomZach);
    Write('№ группы: '); readln(l^.nomGrup);
    Write('Год поступления: '); readln(l^.godPos);
 
    l^.next := nil;
    
 { если start не равен nil, значит список не пуст }
    If start <> nil then
    begin
       list := start;
       
        { "перематываем" список, что бы list стал последним элементом }
        while list^.next <> nil do
         list := list^.next;
 
      list^.next := l { устанавливаем указатель на следующий элемент, а это у нас l }
    end
    else
       start := l; { если список был пуст, тогда делаем l первым элементом}
    list := l; { теперь меняем текущий элемент, присваивая ему значение l }
 
     If start = nil then
    begin
       writeln('Список пуст.');
       exit;
    end;
    
    list := start;
    
    while list <> nil do
    begin
    
     writeln( list^.Familiya,' ', list^.Name,' ', list^.Otches,' ', list^.Pol,' ', list^.nomZach,' ', list^.nomGrup,' ', list^.godPos);
     list := list^.next;
    end;
    
    if start = nil then exit; { список пуст, удалять нечего }
     list := start; { переходим на начала списка }
    end;
 
    begin
    
    1:for i:=1 to n do begin
    writeln( list^.Familiya,' ', list^.Name,' ', list^.Otches,' ', list^.Pol,' ', list^.nomZach,' ', list^.nomGrup,' ', list^.godPos);end;
    for i:=1 to n do begin
    writeln ('введите параметр: 0 - выход, 1 - редактировать элемент списка, 2 - удалить элемент списка, 3 - добавить новый элемент в список');
    readln(g);
    if g>3  then writeln('введите корректное значение! 0 - выход, 1 - редактировать элемент списка, 2 - удалить элемент списка, 3 - добавить новый элемент в список');
    if g=0 then exit;
    if g=1 then
      begin
        writeln ('какой элемент будем редактировать? введите номер от 1 до ',n);
       2: readln (k);
        if k=i then
          begin
        writeln ('что будем редактировать? 0 - ничего, 1 - фамилию, 2 - имя, 3- отчество, 4 - пол, 5 - № зачетной книжки, 6 - № группы, 7 - год поступления');
        readln (m);
        if m>7  then writeln ('введите корректное значение! 0 - ничего, 1 - фамилию, 2 - имя, 3- отчество, 4 - пол, 5 - № зачетной книжки, 6 - № группы, 7 - год поступления');
        if m=0 then goto 1;
        if m=1 then 
          begin
          Write(i,' Фамилия: '); readln(l^.Familiya);
          goto 1;
          end;
        if m=2 then 
          begin
          Write(i,' Имя: '); readln(l^.Name);
          goto 1;
          end;
        if m=3 then
          begin
          Write('Отчество: '); readln(l^.Otches);
          goto 1;
          end;
        if m=4 then
        begin
        Write('Пол: '); readln(l^.Pol);
        goto 1;
        end;
        if m=5 then 
          begin
          Write('№ зачетной книжки: '); readln(l^.nomZach);
          goto 1;
          end;
        if m=6 then
          begin
          Write('№ группы: '); readln(l^.nomGrup);
          goto 1;
          end;
        if m=7 then 
          begin
          Write('Год поступления: '); readln(l^.godPos);
          goto 1;
          end;
          end
          else
            begin 
            writeln ('введите корректное значение элемента от 1 до ',n,'!');
            goto 2;
            end;
         goto 1; 
        end;
        if g=2 then
        begin
        writeln ('какой элемент будем удалять? введите значение от 1 до ',n);
        4:read (x);
        if x=i then
          begin
          writeln ('вы действительно хотите удалить элемент ',x,'? 0 - нет, 1 - да'); 
          3:read (o);
          if o>1 then
          begin
          writeln ('ввeдите корректное значение! 0 - нет, 1 - да');
          goto 3;
          end;
          if o=0 then goto 1;
          if o=1 then begin
            for j:=x to n do
            o:=i;
          end; end
             else      
            writeln ('введите корректный номер элемента списка от 1 до ',n,'!');
            goto 4;
            end;
          end;
          writeln ('добавить новый элемент? 0 - нет, 1 - да'); 5:readln (a);
          if a>1 then begin writeln (''); goto 5; end;
          
          
         
           end;
          
        end.
Vittoryny вне форума Ответить с цитированием
Старый 20.03.2015, 18:00   #3
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Давай переделаем структуру программы. Очень уж тяжело воспринимать смешение интерфейса (меню) и реализации структуры.
1. Создай новый файл.
2. В нем реализуй меню по образцу
Код:
  repeat
    ClrScr;
    writeln('Выберите действие:');
    writeln('1. Отобразить список на экране.');
    writeln('2. Добавить элемент.');
    writeln('3. Удалить элемент.');
    writeln('9. Завершить работу.');
    readln(Menu);
    case Menu of
      1: ListShow(start);
      2:
      begin
        InputInfo(Info);
        ListAdd(start, Info);
      end;
      3:
      begin
        InputElement(start, N);
        ListRemove(start, N);
      end;
      9: Break;
      else
        writeln;
    end;
  until False;
  ListFree(start)
3. Реализуй все процедуры, которые упоминаются в меню. Если какие-то вызывают временное затруднение, то сделай заглушки (только опиши заголовки процедур и их begin-end).
Так тебе будет легче работать и отлаживать.
Кроме того, для облегчения жизни, можно сделать ещё один трюк. Опиши типы своего списка следующим образом:
Код:
  TInfo = record
      Familiya, Name, Otches, Pol : string[15];
      nomZach, nomGrup, godPos    : integer;
  end;
  TList = record
    Info: TInfo;
    Next: PList;
  end;
  PList = ^TList;
Для чего? Так можно на время отладки списка заменить TInfo на integer и отладить без ввода множества символов (в Stud). А после отладки на "кошках" перейти к сложным типам.
-------------
И ещё. Постарайся избежать глобальных переменных в процедурах. Это с первого взгляда они упрощают жизнь (не нужно объявлять переменные) - потом не сможешь понять, где изменилась нужная переменная и откуда ошибки.
--------------
Только так. Искать ошибку в коде из поста №1 слишком тяжело.
FPaul вне форума Ответить с цитированием
Старый 20.03.2015, 22:11   #4
Vittoryny
Новичок
Джуниор
 
Регистрация: 20.03.2015
Сообщений: 3
По умолчанию

Цитата:
Искать ошибку в коде из поста №1 слишком тяжело
я знаю. просто за 3 дня упорного сидения уже голова не варит. Не могли бы вы написать мне код, пожалуйста. Программирование - не моя специальность, а сделать нужно. Я в паскале только азы и знаю.
Vittoryny вне форума Ответить с цитированием
Старый 21.03.2015, 00:28   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

За 3+2=5 дней можно всё освоить.
Что сложного?
Начинай
Код:
program test;

type
  TInfo = integer;
  PList = ^TList;

  TList = record
    Info: TInfo;
    Next: PList;
  end;

  procedure ListAdd(var root: PList; Info: TInfo);
  begin
  end;

  procedure ListShow(root: PList);
  begin
  end;

  procedure ListRemove(var root: PList; Info: TInfo);
  begin
  end;

  procedure ListFree(var root: PList);
  begin
  end;

  procedure InputInfo(Info: TInfo);
  begin
  end;

  procedure InputElement(Info: TInfo);
  begin
  end;

var
  Menu: integer;
  Info: TInfo;
  N: integer;
  start: PList;
begin
  start := nil;
  repeat
    writeln('Выберите действие:');
    writeln('1. Отобразить список на экране.');
    writeln('2. Добавить элемент.');
    writeln('3. Удалить элемент.');
    writeln('9. Завершить работу.');
    readln(Menu);
    case Menu of
      1:
      begin
        ListShow(start);
      end;
      2:
      begin
        InputInfo(Info);
        ListAdd(start, Info);
      end;
      3:
      begin
        InputElement(N);
        ListRemove(start, N);
      end;
      9: Break;
      else
        writeln;
    end;
  until False;
  ListFree(start);
end.
Смотри, как стройно выглядит код. Можно добавить пунктов в меню. Далее заполняй процедуры. Здесь сложная структура заменена на integer для отладки. После отладки, замени описание TInfo и процедур ввода и вывода этого типа. Всё.

PS Мне безразлична твоя специальность. Моя тоже - не программист. Но на хлеб в разные годы я зарабатывал знаниями от "побочных" предметов. Ты уверен в том, что сразу и на всю жизнь сможешь работать по специальности? Что не придётся писать программы в Exel?
PPS Да и жалко бросать на полпути.
FPaul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание списка в форме Olper Microsoft Office Excel 2 17.04.2013 07:40
Создание списка в Excel benefis Microsoft Office Excel 1 15.04.2013 14:10
Создание списка судей Jrcfyf Общие вопросы по программированию, компьютерный форум 1 20.03.2012 20:04
VBA создание списка julius Microsoft Office Excel 7 05.01.2010 16:02
создание списка zetrix Microsoft Office Excel 0 31.10.2006 08:05