Автор Тема: Паскаль, помогите пжт разобраться  (Прочитано 4745 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Millenia

  • Пользователь
  • **
  • Сообщений: 44
    • Просмотр профиля
Паскаль, помогите пжт разобраться
« : 16 Февраля 2011, 03:44:54 »
Задание
Сформирована переменная bibl, содержащий сведения о книгах. Сведения о каждой из книг  - это фамилия автора, название и год издания.
а) Найти названия книг данного автора, изданных с 1960 года
б) Определить, имеется ли книга с названием "Информатика". Если да, то сообщить фамилию и год издания. Если таких книг несколько, то сообщить сведения обо всех этих книгах.

Собственно вот сама программа:
program L10_l8;
uses crt;
type
  bibl = record // создаем bibl типа Record
    fam: string;   //поле с фамилей
    naz: string;
    god: integer;
  end;

var
  i, z, c: integer;
  x: string;
  a: array[1..100] of bibl; //cоздаем массив типа bibl

begin
  write('Введите количество книг: ');
  readln(z);
  for i := 1 to z do
  begin
   write ('Введите автора: ');
   readln(a[i].fam);
   write ('Введите название книги: ');
   readln(a[i].naz);
   write ('Введите год издания книги: ');
   readln(a[i].god);
  end;
  //a) ищем книги изданные с 1960 года данного автора
  writeln;
  writeln('а) Находим книги которые изданны с 1960 года');
  write('Введите автора: ');
  readln (x);
  writeln;
  c := 0;
  for i := 1 to z do begin
    if (a[i].god>1960) and (x = a[i].fam) then
    writeln('Данныя книга нашлась: ',a[i].fam,' название книги "',a[i].naz,'" ', 'год издания ', a[i].god);
    if c = 0 then writeln('Данных книг нет');
    end;
  //b) ищем книгу с названием Информатики
  writeln;
  writeln('б) Ищем книгу под названием Информатика');
  writeln;
  c := 0;
  for i := 1 to z do begin
    if (a[i].naz = 'Информатика') or (a[i].naz = 'информатика') then
    begin
    writeln(a[i].fam, ' ', a[i].naz, ' ', a[i].god);
    if c = 0 then writeln('Данных книг нет');
    end;
    end;
   
end.



я запуталась с переменной с)) и вот с этой строчкой If c = 0 then writeln('Данных книг нет');

Если в пункте а нет таких книг, он либо не выводит сообщение о том, что данных книг нет, но выводит после пункта б когда оно там в принципе не уместно)
Либо два раза выводит в пункте а.  (в зависимости от того конечн, где и как прописать "If c = 0 then writeln('Данных книг нет'); ")
Подскажите пжт, как сделать чтобы он выводил этот сабж в нужное время, в нужном месте))  ::)
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для операционной системы.

Оффлайн testtest

  • Старожил
  • ****
  • Сообщений: 376
    • Просмотр профиля
Re: Паскаль, помогите пжт разобраться
« Ответ #1 : 16 Февраля 2011, 17:17:25 »
если оставить проверку c = 0 в цикле, он каждый раз и будет проверять её.
в цикле должен быть только инкремент.
а проверка - после цикла.

  c := 0;
  for i := 1 to z do
    if (a[i].god>1960) and (x = a[i].fam) then begin
      writeln('Данныя книга нашлась: ',a[i].fam,' название книги "',a[i].naz,'" ', 'год издания ', a[i].god);
      inc(c);
    end;

  if c = 0 then writeln('Данных книг нет')
  else writeln('Всего ', c, ' книг.');
  //b) ищем книгу с названием Информатики
  writeln;
  writeln('б) Ищем книгу под названием Информатика');
  writeln;
  c := 0;
  for i := 1 to z do
    if (a[i].naz = 'Информатика') or (a[i].naz = 'информатика') then
    begin
      writeln(a[i].fam, ' ', a[i].naz, ' ', a[i].god);
      inc(c);
    end;
  if c = 0 then writeln('Данных книг нет')
  else writeln('Всего ', c, ' книг.');

Оффлайн Millenia

  • Пользователь
  • **
  • Сообщений: 44
    • Просмотр профиля
Re: Паскаль, помогите пжт разобраться
« Ответ #2 : 16 Февраля 2011, 19:46:06 »
Спасибо большое =)
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для операционной системы.