Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 25.09.2016, 01:51   #1 (permalink)
gaben134
Member
 
Регистрация: 07.04.2016
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию "Файлы", доработка программы с темой "Записи"

Есть программа по такому заданию:
Описать запись с именем PRICE, содержащую следующие
поля:
-название товара;
-название магазина, в котором продается товар;
-стоимость товара в руб.
Написать программу, выполняющую следующие действия:
-ввод с клавиатуры данных в массив, состоящий из восьми элементов типа PRICE;
-вывод таблицы на экран;
-записи разместить в алфавитном порядке по названиям магазинов;
-вывод отсортированной таблицы на экран;
-вывод на экран информации о товарах, продающихся в магазине, название которого введено с клавиатуры;
-если такого магазина нет, выдать на дисплей соответствующее
сообщение.


Помогите пожалуйста основываясь на этой программе сдать следующее задание:
1. вызов запросов оформить в виде меню;
2. добавить пункты: сохранить таблицу в файле и прочитать
таблицу из файла. Типы файлов:
– типизированный файл из записей;
– типизированный файл из символов;
– текстовый файл;
3. запросы оформить в виде подпрограмм. Все объявления и
подпрограммы должны быть оформлены в виде модуля (модулей)
Код:
uses crt;
const n=8;
type price=record
           tov,mgz:string[20];
           stm:word;
           end;
var z:array[1..n] of price;
    x:price;
    i,j,k:byte;
    m:string[20];
begin
clrscr;
writeln('Введите данные о ',n,' товарах:');
for i:=1 to n do
with z[i] do
 begin
  writeln('Товар ',i);
  write(' Название товара: ');readln(tov);
  write(' Название магазина: ');readln(mgz);
  write(' Стоимость: ');readln(stm);
 end;
clrscr;
writeln('Исходный список товаров');
writeln('----------------------------------------------------------------');
writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
writeln('----------------------------------------------------------------');
for i:=1 to n do
writeln('|',z[i].tov:20,'|',z[i].mgz:20,'|',z[i].stm:20,'|');
writeln('----------------------------------------------------------------');
for i:=1 to n-1 do
for j:=i+1 to n do
if z[i].mgz>z[j].mgz then
 begin
  x:=z[i];
  z[i]:=z[j];
  z[j]:=x;
 end;
writeln('Список товаров по алфавиту названий магазинов');
writeln('----------------------------------------------------------------');
writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
writeln('----------------------------------------------------------------');
for i:=1 to n do
writeln('|',z[i].tov:20,'|',z[i].mgz:20,'|',z[i].stm:20,'|');
writeln('----------------------------------------------------------------');
{если высота экрана 25 символов, нужно 3 следующих строки, если 40, не нужно}
write('Нажмите любую клавишу для продолжения');
readkey;
clrscr;
write('Введите название магазина для поиска:');
readln(m);
writeln('Список товаров продающихся в магазине ',m);
writeln('----------------------------------------------------------------');
writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
writeln('----------------------------------------------------------------');
k:=0;
for i:=1 to n do
if z[i].mgz=m then
 begin
  k:=1;
  writeln('|',z[i].tov:20,'|',z[i].mgz:20,'|',z[i].stm:20,'|');
 end;
writeln('----------------------------------------------------------------');
if k=0 then writeln('Такого магазина нет!');
write('Нажмите любую клавишу для выхода');
readkey
end.
gaben134 вне форума   Ответить с цитированием

Старый 25.09.2016, 01:51
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На нашем форуме встречались аналогичные темы, вот их список

Для класса "Футболист" создать производный класс "Нападающий" и "Защитник" ООП С++
Вражеский водолаз "Роял Нейви" и 7 его друзей. Проект"Русский стимпанк". Серия"Враги"
Ссылки утилитна тему-Забанили на сайтах "ВКОНТАКТЕ","Mail.ru","Google" и т.д
НЕ работает кнопка "Перезагрузка", остальные "Ждущий режим"\"Выкл." в норме.

Старый 25.09.2016, 08:44   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gaben134 Посмотреть сообщение
Помогите пожалуйста основываясь на этой программе сдать следующее задание:
1. вызов запросов оформить в виде меню;
2. добавить пункты: сохранить таблицу в файле и прочитать таблицу из файла. Типы файлов:
– типизированный файл из записей;
– типизированный файл из символов;
– текстовый файл;
3. запросы оформить в виде подпрограмм. Все объявления и подпрограммы должны быть оформлены в виде модуля (модулей)
М-да... круто. И, как говорится, "маразм крепчал"...
1. "В виде меню" - это как? Чтобы программа обрабатывала мышиные клики? Нет, не возьмусь.
2. Всю дорогу считал, что тип File of Char ("типизированный файл из символов") и Text ("текстовый файл") - это полные синонимы. Ан вот поди ж ты...
3. Модули? Можно, конечно, и модули. Правда, это "из пушек по воробьям", но если надо...

Ладно, подумаю, что тут можно сделать...
Vladimir_S вне форума   Ответить с цитированием
Старый 25.09.2016, 10:43   #3 (permalink)
gaben134
Member
 
Регистрация: 07.04.2016
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Понимаете, что это задание придумал не я, а препод в универе, и ему глубоко пофиг на нюансы...
gaben134 вне форума   Ответить с цитированием
Старый 25.09.2016, 21:15   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

В общем, так, сударь.
Сотворил я из изящной и красивой программки какого-то чудовищного монстра, и при том не знаю, то ли это, что Вам надо. Но, поскольку убил на это почти целый день, переделывать уже не буду. Уж не взыщите: чем богаты.
Модуль:
Код:
Unit My_Unit;

Interface

Const
 N=8;

Type
 Price=record
        tov,mgz:string[20];
        stm:word;
       end;
 Ar_Pr=Array[1..N] of Price;
 Ar_St=Array[1..N] of String[20];
 Ar_Wd=Array[1..N] of Word;

Procedure Wrt_F_Rec(Nm_Rec:string; WFR:Ar_Pr);
Procedure Wrt_F_Txt(Nm_Txt:string; WFT1,WFT2:Ar_St; WFT3:Ar_Wd);
Procedure Out_F_Rec(Nm_Rec:string; var OFR:Ar_Pr);
Procedure Out_F_Txt(Nm_Txt:string; var OFT1:Ar_St; var OFT2:Ar_St; var OFT3:Ar_Wd);
Procedure Order_Rec(Nm_Rec:string);
Procedure Order_Txt(Nm_Txt:string);
Procedure Search_Mag_Rec(Nm_Rec:string; Mg:string[20]; var SMR:Ar_Pr; var SN:Byte);
Procedure Search_Mag_Txt(Nm_Txt:string; Mg:string[20]; var SMT1:Ar_St; var SMT2:Ar_St; var SMT3:Ar_Wd; var SN:byte);

Implementation

Procedure Wrt_F_Rec(Nm_Rec:string; WFR:Ar_Pr);
var
 F:File of Price;
 i:Byte;
begin
 Assign(F, Nm_Rec);
 Rewrite(F);
 for i:=1 to N do write(F,WFR[i]);
 Close(F);
end;

Procedure Wrt_F_Txt(Nm_Txt:string; WFT1,WFT2:Ar_St; WFT3:Ar_Wd);
var
 F:Text;
 i:Byte;
begin
 Assign(F, Nm_Txt);
 Rewrite(F);
 for i:=1 to N do
  writeln(F,'|',WFT1[i]:20,'|',WFT2[i]:20,'|',WFT3[i]:20,'|');
 Close(F);
end;

Procedure Out_F_Rec(Nm_Rec:string; var OFR:Ar_Pr);
var
 F:File of Price;
 i:Byte;
begin
 Assign(F, Nm_Rec);
 Reset(F);
 for i:=1 to N do read(F,OFR[i]);
 Close(F);
end;

Procedure Out_F_Txt(Nm_Txt:string; var OFT1:Ar_St; var OFT2:Ar_St; var OFT3:Ar_Wd);
var
 F:Text;
 i:Byte;
 C:Char;
 S:String[20];
 Code:Word;
begin
 Assign(F, Nm_Txt);
 Reset(F);
 for i:=1 to N do
  begin
   Read(F,C);
   Read(F,OFT1[i]);
   Read(F,C);
   Read(F,OFT2[i]);
   Read(F,C);
   Readln(F,S);
   Val(S,OFT3[i],Code);
  end;
 Close(F);
end;

Procedure Order_Rec(Nm_Rec:string);
var
 F:File of Price;
 G:Ar_Pr;
 i,j:Byte;
 D:Price;
begin
 Assign(F,Nm_Rec);
 Reset(F);
 for i:=1 to N do read(F,G[i]);
 Close(F);
 for i:=1 to N-1 do
  for j:=1 to N-i do
   if G[j].mgz>G[j+1].mgz then
    begin
     D:=G[j];
     G[j]:=G[j+1];
     G[j+1]:=D;
    end;
 Rewrite(F);
 for i:=1 to N do write(F,G[i]);
 Close(F);
end;

Procedure Order_Txt(Nm_Txt:string);
var
 G1,G2:Ar_St;
 G3:Ar_Wd;
 i,j:Byte;
 D1,D2:String[20];
 D3:Word;
begin
 Out_F_Txt(Nm_Txt,G1,G2,G3);
 for i:=1 to N-1 do
  for j:=1 to N-i do
   if G2[j]>G2[j+1] then
    begin
     D1:=G1[j];
     G1[j]:=G1[j+1];
     G1[j+1]:=D1;
     D2:=G2[j];
     G2[j]:=G2[j+1];
     G2[j+1]:=D2;
     D3:=G3[j];
     G3[j]:=G3[j+1];
     G3[j+1]:=D3;
    end;
 Wrt_F_Txt(Nm_Txt,G1,G2,G3);
end;

Procedure Search_Mag_Rec(Nm_Rec:string; Mg:string[20]; var SMR:Ar_Pr; var SN:Byte);
var
 i:byte;
 SR:Ar_Pr;
begin
 SN:=0;
 Out_F_Rec(Nm_Rec,SR);
 for i:=1 to N do
  if SR[i].mgz=Mg then
   begin
    Inc(SN);
    SMR[SN]:=SR[i];
   end;
 end;

Procedure Search_Mag_Txt(Nm_Txt:string; Mg:string[20]; var SMT1:Ar_St; var SMT2:Ar_St; var SMT3:Ar_Wd; var SN:byte);
var
 i:byte;
 ST1,ST2:Ar_St;
 ST3:Ar_Wd;
 MgT:String[20];
begin
 SN:=0;
 MgT:='';
 for i:=1 to (20-Length(Mg)) do MgT:=MgT+' ';
 MgT:=MgT+Mg;
 Out_F_Txt(Nm_Txt,ST1,ST2,ST3);
 for i:=1 to N do
  if ST2[i]=MgT then
   begin
    INC(Sn);
    SMT1[Sn]:=St1[i];
    SMT2[Sn]:=St2[i];
    SMT3[Sn]:=St3[i];
   end;
end;

End.
Программа:
Код:
Uses CRT,My_Unit;

Var
 z:Ar_Pr;
 tv,mz:Ar_St;
 sm:Ar_Wd;
 q,i,K:byte;
 m:string[20];
 File_Name_Rec,File_Name_Txt:String;

Begin
 File_Name_Rec:='D:\Goods.rec';
 File_Name_Txt:='D:\Goods.txt';
 clrscr;
 writeln('Введите данные о ',N,' товарах:');
  for i:=1 to n do
   with z[i] do
    begin
     writeln('Товар ',i);
     write(' Название товара: ');readln(tov);
     tv[i]:=tov;
     write(' Название магазина: ');readln(mgz);
     mz[i]:=mgz;
     write(' Стоимость: ');readln(stm);
     sm[i]:=stm;
    end;
 Wrt_F_Rec(File_Name_Rec,z);
 Wrt_F_Txt(File_Name_Txt,tv,mz,sm);
 clrscr;
 writeln('Исходный список товаров по данным из файла записей:');
 writeln('----------------------------------------------------------------');
 writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
 writeln('----------------------------------------------------------------');
 Out_F_Rec(File_Name_Rec,z);
 for i:=1 to n do
  writeln('|',z[i].tov:20,'|',z[i].mgz:20,'|',z[i].stm:20,'|');
 writeln('----------------------------------------------------------------');
 writeln('Для продолжения нажмите любую клавишу');
 ReadKey;
 clrscr;
 writeln('Исходный список товаров по данным из текстового файла:');
 writeln('----------------------------------------------------------------');
 writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
 writeln('----------------------------------------------------------------');
 Out_F_Txt(File_Name_Txt,tv,mz,sm);
 for i:=1 to n do
  writeln('|',tv[i]:20,'|',mz[i]:20,'|',sm[i]:20,'|');
 writeln('----------------------------------------------------------------');
 writeln('Для продолжения нажмите любую клавишу');
 ReadKey;
 Order_Rec(File_Name_Rec);
 Order_Txt(File_Name_Txt);
 clrscr;
 writeln('Упорядоченный по магазинам список товаров по данным из файла записей:');
 writeln('----------------------------------------------------------------');
 writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
 writeln('----------------------------------------------------------------');
 Out_F_Rec(File_Name_Rec,z);
 for i:=1 to n do
  writeln('|',z[i].tov:20,'|',z[i].mgz:20,'|',z[i].stm:20,'|');
 writeln('----------------------------------------------------------------');
 writeln('Для продолжения нажмите любую клавишу');
 ReadKey;
 clrscr;
 writeln('Упорядоченный по магазинам список товаров по данным из текстового файла:');
 writeln('----------------------------------------------------------------');
 writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
 writeln('----------------------------------------------------------------');
 Out_F_Txt(File_Name_Txt,tv,mz,sm);
 for i:=1 to n do
  writeln('|',tv[i]:20,'|',mz[i]:20,'|',sm[i]:20,'|');
 writeln('----------------------------------------------------------------');
 writeln('Для продолжения нажмите любую клавишу');
 ReadKey;
 ClrScr;
 write('Введите название магазина для поиска: ');
 readln(m);
 writeln('Список товаров, продающихся в магазине ',m,' по файлу записей:');
 Search_Mag_Rec(File_Name_Rec,m,z,K);
 if K=0 then writeln('Такого магазина нет!') else
 begin
  writeln('----------------------------------------------------------------');
  writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
  writeln('----------------------------------------------------------------');
  for i:=1 to K do
   writeln('|',z[i].tov:20,'|',z[i].mgz:20,'|',z[i].stm:20,'|');
  writeln('----------------------------------------------------------------');
 end;
 writeln('Для продолжения нажмите любую клавишу');
 ReadKey;
 ClrScr;
 writeln('Список товаров, продающихся в магазине ',m,' по текстовому файлу:');
 Search_Mag_Txt(File_Name_Txt,m,tv,mz,sm,K);
 if K=0 then writeln('Такого магазина нет!') else
 begin
  writeln('----------------------------------------------------------------');
  writeln('|   Название товара  |  Название магазина |  Стоимость товара  |');
  writeln('----------------------------------------------------------------');
  for i:=1 to K do
   writeln('|',tv[i]:20,'|',mz[i]:20,'|',sm[i]:20,'|');
  writeln('----------------------------------------------------------------');
 end;
 writeln;
 write('Нажмите любую клавишу для выхода');
 Readkey
End.
Имена и пути к файлам поставьте, естественно, свои.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 12:37.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.