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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2011, 22:11   #1
<Maria>
Пользователь
 
Аватар для <Maria>
 
Регистрация: 12.10.2010
Сообщений: 11
Вопрос Обработка списка студентов (record) [Delphi]

Здравствуйте, товарищи программисты!
Взгляните на мою скромную прогу, она работает со списком студентов (сортирует, обновляет, добавляет и удаляет элементы списка) в консольном режиме.
Работает отменно, но куда-то постоянно пропадает элемент М1[n]. Я уже крутила ее и так и сяк, но не могу понять, в чем дело... ничего кроме строк
Stud:=M1[n];
------------
М1[n]:=Stud;
в мою голову не пришло...

В общем, жду Вашей критики и замечаний


______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
я исправил.
Попрошу учесть это на будущее.

Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.09.2011 в 10:28.
<Maria> вне форума Ответить с цитированием
Старый 24.09.2011, 22:12   #2
<Maria>
Пользователь
 
Аватар для <Maria>
 
Регистрация: 12.10.2010
Сообщений: 11
По умолчанию

Код:
program proga1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const n = 7;

type
 TStudent = record         //описание одномерного массива
       IDStud: string[7];
     NameStud: string[29];
        Grupa: integer;
      Reiting: real;
   DerzZamovl: boolean;
 end;


 Students = array[0..n] of TStudent;   //описание статического массива типа TStudent
 Mas = array of TStudent;              //описание динамического массива типа TStudent

const S: Students = ((IDStud: '2410108'; NameStud: 'Botsuk Oksana Mukolaivna     '; Grupa: 401; Reiting: 87.4; DerzZamovl: true ),
                     (IDStud: '2410205'; NameStud: 'Gyba Ylia Grigorovna         '; Grupa: 402; Reiting: 91.3; DerzZamovl: true ),
                     (IDStud: '2510219'; NameStud: 'Suvolap Ylia Sergiivna       '; Grupa: 302; Reiting: 94.0; DerzZamovl: true ),
                     (IDStud: '2510304'; NameStud: 'Vivchar Victor Volodumurovuch'; Grupa: 303; Reiting: 88.1; DerzZamovl: true ),
                     (IDStud: '2510324'; NameStud: 'Khyhro Andriy Volodumurovuch '; Grupa: 303; Reiting: 78.2; DerzZamovl: false),
                     (IDStud: '2410103'; NameStud: 'Krotovich Roman Leonidivuch  '; Grupa: 401; Reiting: 79.8; DerzZamovl: false),
                     (IDStud: '2510102'; NameStud: 'Bukov Ivan Dmutrovuch        '; Grupa: 301; Reiting: 98.6; DerzZamovl: true ),
                     (IDStud: '2410213'; NameStud: 'Myha Oleksandr Oleksandrovuch'; Grupa: 402; Reiting: 68.9; DerzZamovl: false));

procedure Output(M: mas; N1:integer);
var   i: integer;
begin
 for i:=0 to N1 do
  writeln(' ',M[i].IDStud,' | ',M[i].NameStud,' |  ',M[i].Grupa,'  |  ',M[i].Reiting:2:2,'  |   ',M[i].DerzZamovl,' ');
end;  //procedure Output

Procedure Select(B: boolean; M1: mas);
var   i: integer;
begin
 writeln;
 writeln('By Select:');
 for i:=1 to n do
  if (M1[i].DerzZamovl = B) then
   writeln(' ',M1[i].IDStud,' | ',M1[i].NameStud,' |  ',M1[i].Grupa,'  |  ',M1[i].Reiting:2:2,'  |   ',M1[i].DerzZamovl,' ');
end;  // Procedure Select

Procedure Update(num: string; M1: mas);
var  i: integer;
     Stud: TStudent;
begin
 Stud:=M1[n];
 writeln;
 writeln('By Update:');
 for i:=0 to n do
  if (M1[i].IDStud = num) then
   M1[i].Reiting:=90.5;
 M1[n]:=Stud;
 Output(M1,n);
 Select(True,M1);       // запуск процедуры Select
end;

Procedure Delete(num: string; M1: mas);
var  i,j: integer;
     Stud: TStudent;
begin
  writeln;
  Stud:=M1[n+1];
  writeln('By Delete: ');
  for i:=0 to n+1 do
    if (M1[i].IDStud = num) then j:=i;     //поиск номера необходимого элемента
  for i := j to n do
   begin
      M1[i]:=M1[i+1];
   end; // for i := 1 to n do
  SetLength(M1,n);
  M1[n]:=Stud;
  Output(M1,n);
  Update('2510219',M1);  // запуск процедуры Update
end; //Procedure Delete

procedure Sort(var M1:Mas);
var
  Min:TStudent;
  Flag:boolean;
  i,j: integer;
begin
 writeln;
 writeln('By sort:');
  for I:=0 to N do
    begin
      Flag:=true;
      for J:=N+1 downto 2 do
        begin
          if M1[J].IDStud < M1[J-1].IDStud then
            begin
              Min:=M1[J-1];
              M1[J-1]:=M1[J];
              M1[J]:=Min;
              Flag:=false;
            end;  // if M1[J] < M1[J-1] then
        end; // for J:=N downto 2 do
      if Flag then break;
    end;  // for I:=1 to N do
 Output(M1,n+1);
 Delete('2410103',M1);  // запуск процедуры Delete
end;  // procedure BubleSort

procedure Insert(M1: mas);
var Stud: TStudent;
begin
  writeln;
  writeln('By insert:');
  Stud:=M1[n];
  SetLength(M1,n+1);
  M1[n+1].IDStud:='2410404';
  M1[n+1].NameStud:='Dudar Anatoliy Yriyovich     ';
  M1[n+1].Grupa:=403;
  M1[n+1].Reiting:=95.7;
  M1[n+1].DerzZamovl:=true;
  M1[n]:=Stud;
  Output(M1,n+1);
  Sort(M1);
end;  // procedure Insert

var M1:mas;
    i,j:integer;
    Stud:TStudent;
begin
  SetLength(M1,n);    // выделение памяти для массива М1
  writeln('---------|-------------------------------|-------|---------|------------');
  writeln(' IDStud  | ','       NameStud            ','   | Grupa | ','Reiting |',' DerzZamovl ');
  writeln('---------|-------------------------------|-------|---------|------------');
   for i:=0 to n do
    begin
     Stud:=S[i];
      M1[i]:=Stud;  //заполнение массива значениями
    end;  // for i:=1 to n do
  Output(M1,n);       // запуск процедуры Output
  Insert(M1);         // запуск процедуры Insert
  writeln('---------|-------------------------------|-------|---------|------------');
  readln;
end.
<Maria> вне форума Ответить с цитированием
Старый 24.09.2011, 22:18   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Я не вчитывался в ваш код но вот эти строки меня уже пугают (в процедуре Insert):
Код:
  SetLength(M1,n+1);
  M1[n+1].IDStud:='2410404';
  M1[n+1].NameStud:='Dudar Anatoliy Yriyovich     ';
  M1[n+1].Grupa:=403;
  M1[n+1].Reiting:=95.7;
  M1[n+1].DerzZamovl:=true;
PS что бы в впредь не возникало подобных вопрос советую пользоваться дебагером.

PPS
И еще вот это меня пугает:
Код:
 SetLength(M1,n);
 ...
 for i:=0 to n do
    begin
     Stud:=S[i];
      M1[i]:=Stud;  //заполнение массива значениями
    end;
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 24.09.2011 в 22:21.
SNUPY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка выпадающего списка Небесный PHP 3 12.08.2011 14:31
Обработка линейного списка с последовательным хранением, элементами которого являются окружности (C++) rutatarin Помощь студентам 1 20.05.2011 16:50
Delphi. Работа со строками в Record marat-link Помощь студентам 2 07.12.2010 18:33
«Обработка текстовых файлов. Исследование линейного списка» Serparns Помощь студентам 1 10.06.2010 19:22
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14