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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2014, 10:58   #1
hojidor
 
Регистрация: 28.05.2014
Сообщений: 3
По умолчанию Разделить программу на 2 части

Первая программа для создания файла, вторая для считывания.
Задание: Создать файл, содержащий сведения о почтовой сортировке (город, улица, дом, квартира, кому, ценность). Определить сколько посылок отправлено в город S ценностью выше X рублей (вывести фамилии).
Код:
program mail;
uses crt;
type
  post = record
    city: string[50];
    street: string[50];
    block: string[10];
    apt: integer;
    recipient: string[255];
    cost: integer;
  end;
var
  i, num, x: integer; 
  f: file of post;
  delivery: post;
  buffer, s: string;
begin
  while num <= 0 do 
  begin
    write('Введите количество посылок: ');
    readln(num);
  end;
  assign(f, 'mail.txt');
  rewrite(f);
  for i := 1 to num do 
  begin
    with delivery do 
    begin
      write('Введите город для ', i, ' посылки: ');
      readln(city);
      write('Введите улицу для ', i, ' посылки: ');
      readln(street);
      write('Введите номер дома для ', i, ' посылки: ');
      readln(block);
      write('Введите номер квартиры для ', i, ' посылки: ');
      readln(apt);
      write('Введите получателя для ', i, ' посылки: ');
      readln(recipient);
      write('Введите ценность (руб.) для ', i, ' посылки: ');
      readln(cost);
    end;
    write(f, delivery);
  end;
  close(f);
  write('Введите город: ');
  readln(s);
  write('Введите ценность (руб.): ');
  writeln;
  readln(x);
  reset(f);
  i := 1;
  num := 0;
while not eof(f) do
  begin
    read(f, delivery);
    with delivery do 
    begin
      if (city = s) and (cost > x) then
        inc(num);
      writeln;
      writeln(i, ' посылка: ');
      writeln('Город: ', city);
      writeln('Улица: ', street);
      writeln('Номер дома: ', buffer);
      writeln('Номер квартиры: ', buffer);
      writeln('Получатель: ', recipient);
      writeln('Ценность: ', buffer);
    end;
    inc(i);
  end;
  writeln;
  writeln(num, ' посылок стоимостью выше ', x, ' руб. было отправлено в город ', s);
  readln;
end.
hojidor вне форума Ответить с цитированием
Старый 28.05.2014, 11:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
program mail1;
uses crt;
type
  post = record
    city: string[50];
    street: string[50];
    block: string[10];
    apt: integer;
    recipient: string[255];
    cost: integer;
  end;
var
  i, num, x: integer; 
  f: file of post;
  delivery: post;
  buffer, s: string;
begin
  while num <= 0 do 
  begin
    write('Введите количество посылок: ');
    readln(num);
  end;
  assign(f, 'mail.txt');
  rewrite(f);
  for i := 1 to num do 
  begin
    with delivery do 
    begin
      write('Введите город для ', i, ' посылки: ');
      readln(city);
      write('Введите улицу для ', i, ' посылки: ');
      readln(street);
      write('Введите номер дома для ', i, ' посылки: ');
      readln(block);
      write('Введите номер квартиры для ', i, ' посылки: ');
      readln(apt);
      write('Введите получателя для ', i, ' посылки: ');
      readln(recipient);
      write('Введите ценность (руб.) для ', i, ' посылки: ');
      readln(cost);
    end;
    write(f, delivery);
  end;
  close(f);
end.
Код:
program mail2;
uses crt;
type
  post = record
    city: string[50];
    street: string[50];
    block: string[10];
    apt: integer;
    recipient: string[255];
    cost: integer;
  end;
var
  i, num, x: integer; 
  f: file of post;
  delivery: post;
  buffer, s: string;
begin

  assign(f, 'mail.txt');
  reset(f);

  write('Введите город: ');
  readln(s);
  write('Введите ценность (руб.): ');
  writeln;
  readln(x);
  reset(f);
  i := 1;
  num := 0;
while not eof(f) do
  begin
    read(f, delivery);
    with delivery do 
    begin
      if (city = s) and (cost > x) then
        inc(num);
      writeln;
      writeln(i, ' посылка: ');
      writeln('Город: ', city);
      writeln('Улица: ', street);
      writeln('Номер дома: ', buffer);
      writeln('Номер квартиры: ', buffer);
      writeln('Получатель: ', recipient);
      writeln('Ценность: ', buffer);
    end;
    inc(i);
  end;
  writeln;
  writeln(num, ' посылок стоимостью выше ', x, ' руб. было отправлено в город ', s);
  close(f);
  readln;
end.
Гут?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2014, 13:54   #3
hojidor
 
Регистрация: 28.05.2014
Сообщений: 3
По умолчанию

Да, все хорошо. Спасибо.
Понял свою ошибку.

Последний раз редактировалось hojidor; 28.05.2014 в 13:57.
hojidor вне форума Ответить с цитированием
Старый 28.05.2014, 14:00   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от hojidor Посмотреть сообщение
Но хотелось бы, чтобы в первой программе, еще файл сохранялся. Программа работает, но не понятно куда сохраняется.
файл сохраняется с именем 'mail.txt', который лежит там же, где Ваш исполняемый код (exe-шник).
Если у Вас какой-то Паскаль, которые не генерит exe-шники (Pascal ABC, например), то тогда лучше имя файла задать полное, с путём.
например,
Код:
  assign(f, 'C:\PASCAL\mail.txt');
  rewrite(f);
  for i := 1 to num do ....

p.s. да, кстати, я бы ОЧЕНЬ рекомендовал заменить расширение у данного файла, написать вместо .TXT что-то другое, более подходящее. Например, .DAT или .BIN или .REC или .PPP ... да всё, что угодно, только чтобы было понятно, что файлик НЕ ТЕКСТОВЫЙ, а двоичный!

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QBasic. Указать Х в левой части, а соответствующий ему У в правой части Август Ган Помощь студентам 11 28.11.2013 11:52
Разделить видеоизображение на части nikmay Мультимедиа в Delphi 1 18.05.2012 15:14
задача - найти произведение первой цифры целой части и третей цифры дробной части вещественного числа. LAZARUS maks22 Lazarus, Free Pascal, CodeTyphon 2 30.01.2012 19:53
Как разделить *.Width/*.Height с сохранением дробной части pavellyba Общие вопросы Delphi 1 09.04.2011 15:27
Слово/цифру разделить на части 0mega Microsoft Office Excel 5 31.01.2010 22:46