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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2014, 00:31   #1
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию таблица - записи с данным о холодильниках (Паскаль)

Всех с Наступающим Рождеством! Решил на каникулах заняться лабой, само задание было такое нужно сложить программу создание текстового файла с инфориацией о холодильниках( + данные можно дополнять). ну вообщем я пока просто программу пишу без файла. Нужно вывести в таблицу холодильники 1993 года:
Вот нашкрябал кое что:
Код:
const 
      n=5;
 type
      xolod = record
      virobn:string;
      nazvanie:string;
      kamera:real;
      rik:real;
      misce:string;
      cina:real;
      kilkist:real;
      end;
   var
      i:integer;
      tabl:array[1..n] of xolod;
      procedure lin(m:integer);
      var
         i:integer;
  begin
  for i:=1 to m do
  write('-');
  writeln;
  end;
  
  begin
  Writeln('Vvedi danni');
  For i:=1 to n do
  begin
  readln(tabl[i].virobn ,tabl[i].nazvanie , tabl[i].kamera , tabl[i].rik , tabl[i].misce , tabl[i].cina , tabl[i].kilkist);
  end;
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  For i:=1 to n do
  begin
   write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
writeln;
Lin(69);
end;
  writeln;
  writeln('vidsortovano');
  Lin(69);
  For i:=1 to  n do
  begin
  If  (tabl[i].rik = 1993) then
write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
  end;
  End.
в таблицу вводяться значение производство, название и т.д. Так вот если ввести например производство - Москва, а название холодильника - пусть будет Lg то выбивает ошибку на строке readln : Ошибка времени выполнения: Входная строка имела неверный формат. Помогите исправитть
mishammm вне форума Ответить с цитированием
Старый 06.01.2014, 01:03   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, Вы абсолютно зря отказываетесь от файла! Вам не будет лень КАЖДЫЙ раз вбивать всё то же самое про ваши холодильники?!

во-вторых, измените структуру на такую:
Код:
type
    xolod = record
      virobn:string[50];
      nazvanie:string[45];
      kamera:real;
      rik:integer;
      misce:string[45];
      cina:real;
      kilkist:real;
    end;
....
цифры после String могут быть любые, но, главное, чтобы строка была задана с длиной!
НУ и год выпуска rik я сделал целым числом. Что это Вы его в дробные числа отнесли?!

в третьих, ввод напишите так:
Код:
Writeln('Vvedi danni');
  For i:=1 to n do
  begin
     Write('virobn:'); readln(tabl[i].virobn);
     Write('nazvanie:'); readln(tabl[i].nazvanie);
     Write('kamera:');  readln(tabl[i].kamera);
     Write('rik:'); readln(tabl[i].rik);
     Write('misce:'); readln(tabl[i].misce);
     Write('cina:); readln(tabl[i].cina);
     Write('kilkist:'); readln(tabl[i].kilkist);
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.01.2014, 01:21   #3
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

вооо )) спасибо я извиняюсь можете подровнять табличку плиз, вот как выходит (на рис.) а насчёт файла мне по заданию надо будет сделать текстовый файл. я просто хотел сначала саму программу сделать а потом уже запись сделать в текст файл + нада расчитать так чтобы данные могли дополняться. я знаю вроде использовать надо append(имя файла), заметил что у меня неправильно сортировка работает, я что то в writeln недописал?? нужно только 1993

P.S. спасибо вам за string [50] думал это необязательно.
Изображения
Тип файла: jpg Безымянный.jpg (42.5 Кб, 122 просмотров)

Последний раз редактировалось mishammm; 06.01.2014 в 01:32.
mishammm вне форума Ответить с цитированием
Старый 06.01.2014, 02:04   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Serge_Bliznykov, это типизированные файлы (file of xolod) не терпят безразмерных стрингов. А у него - текстовый файл.
Я не помню, но им вроде по фигу.
type_Oleg вне форума Ответить с цитированием
Старый 06.01.2014, 02:21   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Serge_Bliznykov, это типизированные файлы (file of xolod) не терпят безразмерных стрингов. А у него - текстовый файл.
Я не помню, но им вроде по фигу.
Вы абсолютно правы.
Для текстовых файлов - размеры строк в записи в типе String действительно "по барабану"!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.01.2014, 02:42   #6
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

подскажите плиз где у меня ошибка в сортировке, выводит все холодильники а надо только 1993 года ( в write что то недописано?
mishammm вне форума Ответить с цитированием
Старый 06.01.2014, 18:18   #7
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

Цитата:
Сообщение от mishammm Посмотреть сообщение
подскажите плиз где у меня ошибка в сортировке, выводит все холодильники а надо только 1993 года ( в write что то недописано?
проблема решилась дописанием begin после then ... всем спасибо )
mishammm вне форума Ответить с цитированием
Старый 06.01.2014, 18:25   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mishammm Посмотреть сообщение
подскажите плиз где у меня ошибка в сортировке, выводит все холодильники а надо только 1993 года ( в write что то недописано?
во-первых, то, что Вы пытаетесь сделать, это не является сортировкой (сортировка - это изменение позиций элементов, чтобы они были расположениы в заданном порядке), то, что Вы пытаетесь сделать, это, скорее, отбор или фильтрация данных.

во-вторых, вы явно забыли операторные скобки:
код
Код:
Lin(69);
  For i:=1 to n do
  begin
   write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
writeln;
Lin(69);
выведет ВСЕ записи.

а код:
Код:
For i:=1 to  n do
  begin
  If  (tabl[i].rik = 1993) then begin
write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
  end;
end;
выведет только записи, у которых rik = 1993.

я надеюсь, что Вы не забыли изменить тип поля rik на Integer, как я Вам советовал выше... И что не забыли внести холодильники с годом выпуска 1993 год.

Последний раз редактировалось Serge_Bliznykov; 06.01.2014 в 18:33.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По данным значениям аргументов a и b вычислить значение функции f(a,b). Паскаль shokoladka5013 Помощь студентам 1 02.03.2011 09:07
По данным значениям аргументов a и b вычислить значение функции f(a,b). Паскаль shokoladka5013 Помощь студентам 1 24.02.2011 06:54
переход к данным по записи kuzjaca Microsoft Office Access 1 27.12.2010 11:05
Таблица INTERBASE и добавление записи Yuran БД в Delphi 9 29.08.2010 10:18
таблица на записи.. darika Паскаль, Turbo Pascal, PascalABC.NET 0 17.04.2010 13:59