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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2012, 10:29   #1
Wild Angel
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию Комбинированный тип данных,обработка данной информации.

Здравствуйте!помогите пожалуйста найти ошибку и довести задачу до конца.Вот условия:
Общее условие:
Написать программу,которая вводит все данные об N (N=10-12) книгах(студентах),выводит всю информацию на экран в табличном виде,а также выполняет обработку имеющейся информации.
Известна информация о всех заказах на книги, сделанных читателями за неделю(заказ на книгу в библиотеке включает следующие данные: сведенияо книге:шифр,автор,название;сведения о читателе:номер читательского билета,фамилия;дата заказа(число и месяц))Вывести на экран всю информацию о заказах на книги, сделанных заданным читателем,подсчитать количество таких заказов.
Код:
program upr1;
const N=3;
type      date=record
            day:1..31;
            month:1..12;
            week:1..7;
            end;
          Book=record
           author,num:string [20];
           shifr:integer;
           end;
           reader=record
           number:integer;
           fam:string[15];
           d:date;
           end;
 procedure pr1(var a:book);
 begin
 with a do begin
 write('Название книги: ');
 readln(num);
 write('Автор книги: ');
 readln(Author);
 write('Шифр книги: ');
 readln(shifr);
 end;
 end;
 procedure pr2(a:book);
 begin
 with a do begin
 write(num,' ':20-length(num));
 write(author,' ':15-length(author));
 write(shifr:6);
 end;
 writeln;
 end;
 var mas:array[1..n] of book; b:reader;
 i,k:integer;
 begin
 writeln('Введите информацию о книгах: ');
 for i:=1 to n do pr1(mas[i]);
 writeln('Список книг: ');
 writeln(' №  Название           Автор            Шифр');
 for i:=1 to n do begin
 write(i:2,'.');
 pr2(Mas[i]);
 end;
 write('Введите информацию о читателе:');
 with b do begin
 write('Фамилия: ');
 readln(fam);
 write('Номер читательского билета: ');
 readln(number);
 write('Дата заказа: ');
 readln(d.day,d.month);
 end;
 end
заранее спасибо.
Wild Angel вне форума Ответить с цитированием
Старый 10.03.2012, 16:45   #2
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

Цитата:
об N (N=10-12)
это от 10 до 12 или 10-12=-2 ?
в любом случае, почему const N=3 ?
как-то так
Arhangel7 вне форума Ответить с цитированием
Старый 10.03.2012, 17:04   #3
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

Цитата:
const N=3;
type date=record
day:1..31;
month:1..12;
week:1..7;
end;

Book=record
author,num:string [20];
shifr:integer;
end;

reader=record
number:integer;
fam:string[15];
d : date;
end;

procedure pr1(var a:book);
{ввели данные, а где используем ?}
begin
with a do
begin
write('Название книги: ');
readln(num);
write('Автор книги: ');
readln(Author);
write('Шифр книги: ');
readln(shifr);
end;
end;

procedure pr2(var a:book);
{выводим данные, а где взяли ?}
begin
with a do
begin
write(num,' ':20-length(num));
write(author,' ':15-length(author));
write(shifr:6);
end;
writeln;
end;

var
mas:array[1..n] of book;
b:reader;
i,
k{где используется}
:integer;
begin
writeln('Введите информацию о книгах: ');
for i:=1 to n do pr1(mas[i]);
writeln('Список книг: ');
writeln(' № Название Автор Шифр');
for i:=1 to n do
begin
write(i:2,'.');
pr2(Mas[i]);
end;
write('Введите информацию о читателе:');
with b do
begin
write('Фамилия: ');
readln(fam);
write('Номер читательского билета: ');
readln(number);
write('Дата заказа: ');
readln(d.day,d.month);
end;
end.
дальше как-то не смотрел
как-то так
Arhangel7 вне форума Ответить с цитированием
Старый 10.03.2012, 18:36   #4
Wild Angel
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

N 10-12 это десять или двенадцать книг,а программе 3 только для того чтобы проверить работу, 10 раз вводить трудоемко.
С помощью первой процедуры вводиться информация,с помощью второй выводиться информация соотвествующая условию задачи.
Wild Angel вне форума Ответить с цитированием
Старый 10.03.2012, 18:46   #5
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

Код:
const N=3;

type tBook = record
       shifr,avtor,
       nazvanie:string;
     end;

       tStyd = record
         NBilet,FIO:string;
       end;

       tZakaz = record
         B:tBook;
         S:tStyd;
         Day,Month:string;
       end;


procedure VvodBook(var a:tBook);
begin
  readln(a.shifr);
  readln(a.avtor);
  readln(a.nazvanie);
end;

procedure VvodStyd(var a:tStyd);
begin
  readln(a.NBilet);
  readln(a.FIO);
end;

procedure VvodZakaz(var a:tZakaz; B:tBook; S:tStyd);
begin
  a.B:=B;
  a.S:=S;
  readln(a.Day);
  readln(a.Month);
end;

procedure VivodBook(var a:tBook);
begin
  writeln(a.shifr);
  writeln(a.avtor);
  writeln(a.nazvanie);
end;

procedure VivodStyd(var a:tStyd);
begin
  writeln(a.NBilet);
  writeln(a.FIO);
end;

procedure VivodZakaz(var a:tZakaz);
begin
  writeln(a.B.Shifr);
  writeln(a.B.avtor);
  writeln(a.B.nazvanie);
  writeln(a.S.NBilet);
  writeln(a.S.FIO);
  writeln(a.Day);
  writeln(a.Month);
end;

var
  MassB:array[1..n] of tBook;
  MassS:array[1..n] of tStyd;
  MassZ:array[1..n] of tZakaz;
begin


end.
вот набросал скелет
как-то так

Последний раз редактировалось Arhangel7; 11.03.2012 в 02:33.
Arhangel7 вне форума Ответить с цитированием
Старый 11.03.2012, 15:01   #6
Wild Angel
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

как оформляется я знаю. я условию правильно написать не могу(((
Wild Angel вне форума Ответить с цитированием
Старый 11.03.2012, 15:09   #7
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

Цитата:
я условию правильно написать не могу
что именно ?
Код:
Procedure PodschetZak(var S1{FIO},S2{NBilet}:string);
var I:integer;{кол-во заказов}
begin
I:=0;
  for i:=1 to n then
    begin
      if (MassZ[I].S.FIO={S1}) and (MassZ[I].S.NBilet={S2}) then
        begin
          VivodZakaz(MassZ[I]);
          inc(I);
        end;
    end;
  writeln('количество заказов сделанных заданным читателем => ', I);
end;
код не проверял, но должен работать.
как-то так

Последний раз редактировалось Arhangel7; 11.03.2012 в 15:27.
Arhangel7 вне форума Ответить с цитированием
Старый 11.03.2012, 15:16   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, вы слишком усложнили задачу.
Вам нужно (достаточно) описать ОДИН тип данных (заказ на книгу) и ввести данные только по заказанным книгам.

во-вторых, объявляете массив (ну, например, на 20 заказов - "с запасом", хотя вам в условии сказали, что достаточно 10-12...)
вводите в этот массив данные.

потом выводите ВСЕ данные на экран в виде таблицы (это несложно, но прийдётся потыкать, подбирая нужное число пробелов, чтобы отформатировать данные).

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

всё.


p.s. для того, чтобы упростить себе жизнь в подобных задачах ОЧЕНЬ удобно занести все данные в типизированный файл и читать их оттуда. Иначе, конечно, вводить 10 заказов каждый раз при запуске программы заколебёшься!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.03.2012, 18:43   #9
Wild Angel
 
Регистрация: 10.03.2012
Сообщений: 5
По умолчанию

вот с типизированными файлами только все равно эта программа неправильно работает((( исправьте пожалуйста то, что неправильно

программа, которая записывает в файл
Код:
 program upr;
 const n=10;
 type date=record
 day:1..31;
 month:1..12;
 end;
 zakaz=record
 fam:string[18];
 name,author:string[15];
 number:integer;
 shifr:integer;
 d:date;
 end;
 var f:file of zakaz;a:zakaz;i:integer;
 begin
 assign(f,'book.dat');
 rewrite(f);
 writeln('Введите информацию о заказе:');
 for i:=1 to n do begin
 with a do begin
 write('Фамилия:');readln(fam);
 write('Номер чит.билета:');readln(number);
 write('Дата заказа:');readln(d.day,d.month);
 write('Название:');readln(name);
 write('Автор:');readln(author);
 write('Шифр:');readln(shifr);
 end; write(f,a); end;
 close(f);
 reset(f);
 Writeln('Фамилия   Номер чит.билета  Дата заказа  Название       Автор       Шифр');
 while not eof(f) do begin
 read(f,a);
 with a do begin
 write(Fam,' ':18-length(fam));
 write(number:6);
 write(d.day:6,d.month:5,' ':6);
 write(name,' ':15-length(name));
 write(author,' ':10-length(author));
 writeln(shifr:5);
 end; end;
 writeln;
 close(f);
 end.
программа,которая записывает в файл информацию соответствующую условию
Код:
program upr;
 const n=10;
 type date=record
 day:1..31;
 month:1..12;
 end;
 zakaz=record
 fam:string[18];
 name,author:string[15];
 number:integer;
 shifr:integer;
 d:date;
 end;
 var f,f1:file of zakaz;a:zakaz;i:integer;
 begin
 randomize;
 assign(f,'book.dat');
 reset(f);
 assign(f1,'book1.dat');
 rewrite(f1);
 writeln('Введите фамилию: ');
 readln(a.fam);
 while not eof(f) do begin
 read(f,a);
 with a do begin
 write(name,' ':12-length(name));
 write(author,' ':10-length(author));
 writeln(shifr:5);
 end;
 end;
 write(f1,a);
 writeln;
 while not eof(f1) do begin
 read(f1,a);
 with a do begin
 write(name,' ':12-length(name));
 write(author,' ':10-length(author));
 writeln(shifr:5);
 end;
 end;
 close(f);
 close(f1);
 end.
Wild Angel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинированный тип данных. ProgrammiST-_- Паскаль, Turbo Pascal, PascalABC.NET 8 27.11.2011 08:10
Комбинированный тип данных Black_butterfly Помощь студентам 1 14.04.2011 11:29
Комбинированный тип данных ne4eHUce Помощь студентам 3 11.04.2011 01:36
Комбинированный тип данных Nightt Помощь студентам 0 19.06.2009 18:25