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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2016, 00:10   #1
RLida
Новичок
Джуниор
 
Регистрация: 14.01.2016
Сообщений: 1
По умолчанию Файлы (Паскаль)

исходный файл содержит записи с номером магазина и его асортиментом (множеством продуктов в этом магазине).
1. Создать программу что формирует исходный файл
2. Создать процедуру, которая определяет множество продуктов, которые есть хотя бы в одном с магазинов.

если вводить в магазине продукты которых нет в множестве, программа заканчивается и ничего не хочет выводить, а если вводить хотя бы один продукт из списка в каждый магазин, то все норм выводит. Помогите исправить программу.


Код:
uses crt;
type con=(bread,wine,water,soup,apple,cheese,milk,x);
     x1=set of con;
     shop=record
     num:byte;
     pr:array[1..12] of con;
     end;
    
    
procedure add1();
var 
  r:array[1..12] of con;
  f : x1;
    fil: file of shop;
    pop:shop;
    z,b,i :byte;
    st : string;
    s:con;
    check:array[bread..x] of string[10]=('bread','vine','water','soup','apple','cheese','milk','x');
begin
assign(fil,'C:\Users\TolstiyTobik\Desktop\file.txt');
rewrite(fil);
 
write('write number of shops ');
readln(i);
 
f:=[];
 
for b:=1 to i do
begin
for z:=1 to 12 do
r[z]:=x;
z:=0;
writeln('shop ',b:2);
repeat
 
readln(st);
   for S:=bread to milk do
          if st=check[s] then
          begin
          z:=z+1;
       r[z]:=S;
              f:=f+[S]
            end;
until st='';
pop.num:=i;
for i:=1 to 12 do
pop.pr[z]:=r[z];
write(fil,pop);
end;
 
 
writeln(' Result');
   for S:=bread to milk do
          if s in f then write(s,' ');
 
 
close(fil);
 
end;
 
 var
    ask : char;
 
    
 
begin
repeat
clrscr;
randomize;
 
writeln('bread,vine,water,soup,apple,cheese,milk');
 
 
add1();
 
 
 
writeln('');
writeln('press enter to repeat');
ask:=readkey;
until ord(ask)<>13;
end.
RLida вне форума Ответить с цитированием
Старый 16.01.2016, 16:07   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Если ещё актуально.
Не сильно разбирая код обнаружил, что в цикле:
Код:
for b:=1 to i do
begin
...
   pop.num:=i;
   for i:=1 to 12 do
      pop.pr[z]:=r[z];
   write(fil,pop);
end;
И что бы это значило?
Т.е. в строке
Код:
pop.num:=i;
Номер магазина заносится в список, а вот в строках
Код:
for i:=1 to 12 do
      pop.pr[z]:=r[z];
что происходит? Как параметр цикла i участвует в этом?
Так предполагаю, что поскольку i - количество магазинов, которое задаётся по запросу:
Код:
write('write number of shops ');
readln(i);
то правильнее будет изменить параметр цикла с i на какую то другую переменную.

Естественно, я не ожидаю, что это поможет Вам, но в коде я ведь и не разбирался...


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Файлы. M_arisha Помощь студентам 0 20.12.2011 22:34
Файлы паскаль olya3 Помощь студентам 2 22.12.2009 21:49
Паскаль. Файлы Dmitrij Помощь студентам 1 30.03.2009 23:41