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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 20:37   #1
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
Сообщение файлы

Здравствуйте, помогите пожалуста с задачей:
Дан файл input, содержащий сведения о книгах. Сведения о каждой из книг – это фамилия автора, название и год издания. Найти названия книг данного автора, изданных начиная с 1960 г.
Я пока-что остановился на том что никак не могу вывести содержание файла на экран.

Содержание файла Imput:
Цитата:
Pshimanovsky; Four tanker and a dog; 1970;
Ryazanov; Vultures; 2002;
Popkov; in Nature; 1955;
Popkov; Modernity; 1961;
Suvorov; Aquarium; 1993;
Popkov; Spring; 1970;

Последний раз редактировалось kuy; 12.11.2011 в 12:45.
kuy вне форума Ответить с цитированием
Старый 12.11.2011, 02:12   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Как я понял, входной файл у тебя текстовый. Каждая книга - одна строка. Автор, название и год разделены символом ";". Считывай этот файл в цикле построчно до конца, EoF(f), подсчитывая количество строк. Потом находи в каждой строке разделитель и бей строку на три строки - можно запись сделать. А потом поиск по массиву записей. Вот и все.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 12.11.2011, 13:41   #3
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Обработал файл, вывел на екран..:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type m = record
           avtor: string[40];
           kniga: string[40];
           god: integer;
         end;
var massiv:array[1..100] of m;
    massiv2:array[1..100] of m;
    i,n,code: integer;
    s,avtor2: string;
    f:text;
begin
assign (f,'input.txt' );
reset(f); {открываем для чтения}
i:=0;
while not eof(f) do begin
inc(i);
readln(f,s);{читаем содержимое в строку}
massiv[i].avtor:=copy(s,1,pos(';',s)-1 );
 delete(s,1,pos(';',s)+1 );
massiv[i].kniga:=copy(s,1,pos(';',s)-1 );
 delete(s,1,pos(';',s)+1 );
val(copy(s,1,pos(';',s)-1 ),massiv[i].god,code );
end;
writeln('File contents:');
n:=i;
for i:=1 to n do writeln('  ',massiv[i].avtor,', ',massiv[i].kniga,', ',massiv[i].god);
write('Input author surname: '); readln(avtor2);
Теперь не могу сделать так чтобы когда вводиш автора, то выводились на екран все его книги с 1960 года, а если таких нету, то: 'No books of this author since 1960'. Подскажите что-то..
kuy вне форума Ответить с цитированием
Старый 12.11.2011, 14:59   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,871
По умолчанию

Находишь дату - '1960' и переводишь её из строкового типа в число.
функция StrToInt.
например, Ваше сравнение.
Код:
for i:=1 to N do
begin
    if(1960<=StrToInt(massiv[i].god))then writeln('  ',massiv[i].avtor,', ',massiv[i].kniga,', ',massiv[i].god);//если есть такая книга - выводим на экран
    //а вот второе условие, что мол книг таких нема, напишете сами...
end;
не забудьте подключить модуль SysUtils.pas
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 12.11.2011, 20:52   #5
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

NetSpace, дата уже в числовом типе
Я уже решил проблему, внедрил переменную типа булин, вроди работает:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type m = record
           avtor: string[40];
           kniga: string[40];
           god: integer;
         end;
var massiv:array[1..100] of m;
    i,n,code: integer;
    s,avtor2: string;
    f:text;
    e: boolean;
begin
assign (f,'input.txt' );
reset(f); {открываем для чтения}
i:=0;
while not eof(f) do begin
inc(i);
readln(f,s);{читаем содержимое в строку}
massiv[i].avtor:=copy(s,1,pos(';',s)-1 );
 delete(s,1,pos(';',s)+1 );
massiv[i].kniga:=copy(s,1,pos(';',s)-1 );
 delete(s,1,pos(';',s)+1 );
val(copy(s,1,pos(';',s)-1 ),massiv[i].god,code );
end;
writeln('File contents:');
n:=i;
for i:=1 to n do writeln('  ',massiv[i].avtor,', ',massiv[i].kniga,', ',massiv[i].god);
write('Input author surname: '); readln(avtor2);
e:=false;
for i:=1 to N do
begin
 if(massiv[i].avtor=avtor2) and (1960<=massiv[i].god)then
  begin
   writeln('  ',massiv[i].kniga,'(',massiv[i].god,')');
   e:=true;
  end;
end;
if e=false then writeln('No books of this author since 1960');
readln;
end.
kuy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы (текстовые файлы) Finn4ik Помощь студентам 0 25.04.2011 21:42
Не сохраняет файлы (Создает файлы пустышки) Rock231 Помощь студентам 2 25.12.2010 12:31
Файлы данных.Типизированные файлы. вылка Помощь студентам 6 17.05.2010 15:42
Файлы Алексей Д. Помощь студентам 2 10.05.2008 19:21
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53