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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2010, 13:10   #1
kniazkinP
Пользователь
 
Регистрация: 10.04.2010
Сообщений: 11
По умолчанию Упорядочение чисел в файле

Здравствуйте! Помогите отловить до конца ошибку в задании - упорядочить сведения о багаже, записанные в файле багаж по возрастанию веса багажа. В файле 2 столбца - количество вещей (a[i].k) и вес в килограммах - (a[i].w).
Вот программа -
Код:
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
Const n=4;
Label m;
Var f1:text;
    a:array[1..n] of record
                     k:integer;
                     w:real;
                     end;
    i:byte;
    s:real;
    R:real;
    x:integer;
Begin
 s:=0;
 Assign(f1,'bagazh.txt');
 Reset(f1);
 For i:=1 to n do
 begin
 read(f1,a[i].k);readln(f1,a[i].w);
 end;
 for i:=1 to n do
 s:=s+a[i].k;
 s:=s/n;
 
 
 Writeln('Passanger with 1 things vesom <30');{вывод багажа c 1 вещю, весом менее 30кг}
 For i:=1 to n do
 If a[i].k=1 then writeln('Bagazh number ',i);
 Writeln;
 Writeln;
 
 
 Writeln('Passangers with 2 or more things');{вывод багажа с больше, чем 2 вещами}
 For i:=1 to n do
 If a[i].k>2 then writeln('Bagazh number ',i);
 Writeln;
 
 
 
 Writeln;
 Writeln('Things in bagazh more than average');{вывод багажа, с кол-вом вещей больше среднего арифметического}
 For i:=1 to n do
 If a[i].k>s then writeln('Bagazh number ',i);
 Close(f1);
 readln;
я сортирую вот так по весу, но не выходит
Код:
m:  For i:=1 to n do
      Begin
         if a[i].w<a[i+1].w then  Begin
                                i:=a[i];
                                x[i]:=x[i+1];
                                x[i+1]:=R;
                                goto m;
                                end;
      End;
 
      Writeln ('Отсортированный массив:');
      for i:=1 to n do
      Writeln (a[i],'  ');
      Writeln;
      Readln;
kniazkinP вне форума Ответить с цитированием
Старый 04.12.2010, 14:49   #2
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

Цитата:
Сообщение от kniazkinP Посмотреть сообщение
я сортирую вот так по весу, но не выходит
Код:
m:  For i:=1 to n do
      Begin
         if a[i].w<a[i+1].w then  Begin
                                i:=a[i];
                                x[i]:=x[i+1];
                                x[i+1]:=R;
                                goto m;
                                end;
      End;
 
      Writeln ('Отсортированный массив:');
      for i:=1 to n do
      Writeln (a[i],'  ');
      Writeln;
      Readln;
1. Происходит выход за рамки массива(данных), идет обращение к n+1 элементу (а там не понятно что). Надо в цикле вместо n написать до n-1.
2. Тут видимо описались
Код:
i:=a[i]; x[i]...
так как должно
Код:
R:=a[i];
a[i]:=a[i+1];
a[i+1]:=R;
причем R должна быть типа-запись
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 04.12.2010, 14:54   #3
kniazkinP
Пользователь
 
Регистрация: 10.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от rubius2008 Посмотреть сообщение
причем R должна быть типа-запись
Прописать ещё в var?
Код:
R:array[1..n] of record

Последний раз редактировалось kniazkinP; 04.12.2010 в 15:56.
kniazkinP вне форума Ответить с цитированием
Старый 04.12.2010, 14:55   #4
kniazkinP
Пользователь
 
Регистрация: 10.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от rubius2008 Посмотреть сообщение
Код:
i:=a[i]; x[i]...
Да здесь я немного не о том задумался..
Сделал вот так:
Код:
 R:array[1..n] of record
    x:integer;
    end;
....
 m:  For i:=1 to n-1 do
      Begin
         if a[i].w<a[i+1].w then  Begin
                                R:=a[i];
                                a[i]:=a[i+1];
                                a[i+1]:=R;
                                goto m;
                                end;
      End;

      Writeln ('Отсортированный массив:');
      for i:=1 to n do
      Writeln (a[i],'  ');
      Writeln;
      Readln;
Вот тут ошибка типов Array и record

Последний раз редактировалось kniazkinP; 04.12.2010 в 15:58.
kniazkinP вне форума Ответить с цитированием
Старый 04.12.2010, 17:00   #5
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

Цитата:
Сообщение от kniazkinP Посмотреть сообщение
Да здесь я немного не о том задумался..
Сделал вот так:
Код:
 R:array[1..n] of record
    x:integer;
    end;
....
 m:  For i:=1 to n-1 do
      Begin
         if a[i].w<a[i+1].w then  Begin
                                R:=a[i];
                                a[i]:=a[i+1];
                                a[i+1]:=R;
                                goto m;
                                end;
      End;

      Writeln ('Отсортированный массив:');
      for i:=1 to n do
      Writeln (a[i],'  ');
      Writeln;
      Readln;
Вот тут ошибка типов Array и record
R - должно быть того же типа что и элемент массива. Сделай так
Код:
Type Myrec = record
           k:integer;
           w:real;
     end;
Var a:array[1..n] of Myrec;
    R:Myrec;
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 04.12.2010, 17:11   #6
kniazkinP
Пользователь
 
Регистрация: 10.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от rubius2008 Посмотреть сообщение
Сделай так
Код:
Type Myrec = record
           k:integer;
           w:real;
     end;
Var a:array[1..n] of Myrec;
    R:Myrec;
Да, спасибо! но теперь вообще не понимаю ошибку
Код:
Writeln ('Отсортированный массив:');
      for i:=1 to n do
      Writeln(a[i],'  ');
      Writeln;
      Readln;
Цитата:
[DCC Error] Project1.dpr(70): E2054 Illegal type in Write/Writeln statement
Вот такой код стал до begin
Код:
Const n=4;
Label m;
Type Myrec = record
           k:integer;
           w:real;
     end;
Var a:array[1..n] of Myrec;
    R:Myrec;
    f1:text;
    i:byte;
    s:real;
    x:integer;
kniazkinP вне форума Ответить с цитированием
Старый 04.12.2010, 18:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты же с массивом записей работаешь.
Код:
 Writeln(a[i].i,'  ',a[i].w);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.12.2010, 18:30   #8
kniazkinP
Пользователь
 
Регистрация: 10.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты же с массивом записей работаешь.
Да! Тогда получается тут тоже не a[i] ?
Код:
 m:  For i:=1 to n-1 do
      Begin
         if a[i].w<a[i+1].w then  Begin
                                R:=a[i];
                                a[i]:=a[i+1];
                                a[i+1]:=R;
                                goto m;
                                end;
      End;
Хотя я уже понял Всё решено, спасибо!

Последний раз редактировалось kniazkinP; 04.12.2010 в 18:32. Причина: Все понял)
kniazkinP вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
упорядочение PashaNastya Microsoft Office Excel 1 26.03.2010 07:59
Упорядочение массива STALKER888 Общие вопросы C/C++ 7 05.12.2009 21:29
Не правильно считает сумму чисел, которые находятся в файле. TheWanderer Общие вопросы C/C++ 6 17.04.2009 18:43
Поиск чисел в текстовом файле Homka Паскаль, Turbo Pascal, PascalABC.NET 4 25.06.2007 19:15