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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2009, 13:50   #1
NeXuLoN
 
Регистрация: 28.09.2009
Сообщений: 6
По умолчанию Помогите найти ошибку

Алгоритм должен создать второй файл и в него записать ту специальность (и автора тоже) по каторой больше всего книг.

Код:
uses crt;
type knigi=record
 avtor:string[40];
 nazvanie:string[80];
 god_izdania:string[4];
 spechialnost:string[40];
end;
var x:array[1..100]of knigi;
 l,k,n,i:integer;
 f,t:file of knigi;
begin
clrscr;
 write('введите количесто книг');
 readln(n);
 assign(f,'katalog1.txt');
 rewrite(f);
 for i:=1 to n do
 with x[i] do begin
 writeln('введите автора');
 readln(avtor);
 writeln('введите название');
 readln(nazvanie);
 writeln('введите год издания');
 readln(god_izdania);
 writeln('введите специальность');
 readln(spechialnost);
 write(f,x[i]);
end;
 close(f);
 reset(f);
 assign(t,'katalog2.txt');
 rewrite(t);
 i:=1;
 while not eof (f) do begin
 for i:=1 to n do begin
 read(f,x[i]);
 k:=0;l:=0;
 if (x[i].spechialnost='m')then k:=k+1 else l:=l+1;
end;
 if k>l then
 for i:=1 to n do begin
 read(f,x[i]);
 if (x[i].spechialnost='m') then write(t,x[i])
 else
 for i:=1 to n do begin
 read(f,x[i]);
 if (x[i].spechialnost='a') then write(t,x[i]);
end;end;end;
 close(f);close(t);
 reset(t);
 i:=1;
 while not eof (t) do begin
 read(t,x[i]);
 writeln(x[i].spechialnost,x[i].avtor);
 i:=i+1;
end;
 readln;
end.

Заранее премного благодарен.

Последний раз редактировалось Stilet; 29.09.2009 в 09:39.
NeXuLoN вне форума Ответить с цитированием
Старый 28.09.2009, 13:57   #2
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

сильно заумно сделано, напиши лучше сколько у тебя специальностей и какие они
Consol вне форума Ответить с цитированием
Старый 28.09.2009, 15:00   #3
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

и какого цвет красный ?
РЕЖЕТ ГЛАЗА! наврядли ктото будет спокойно смотреть.
kakawkin вне форума Ответить с цитированием
Старый 28.09.2009, 16:43   #4
NeXuLoN
 
Регистрация: 28.09.2009
Сообщений: 6
По умолчанию

Файл « Каталог книг » ( Создайте этот файл ).
Структура записи:
- Автор (40 знаков);
- Название (80 знаков);
- Год издания (4 знака);
- Специальность (40 знаков);
Создайте файл каталог книг. Найдите специальность, по которой имеется наибольшее число книг. Специальности 2 можно любые, главное чтобы работал.
NeXuLoN вне форума Ответить с цитированием
Старый 28.09.2009, 18:33   #5
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Код:
type knigi=record
      avtor:string[10];
      nazvanie:string[10];
      god_izdania:string[4];
      spechialnost:string[2];
      end;
var x:array[1..100]of knigi;
    l,k,n,i:integer;
    f,t:file of knigi;
begin
{Запись в кататлог1 список авторов}
write('Vvedite kol-vo knig: '); readln(n);
assign(f,'C:\katalog1.txt');
rewrite(f);
for i:=1 to n do
with x[i] do begin
writeln('Vvedite avtora: '); readln(avtor);
writeln('Vvedite nazvanie: '); readln(nazvanie);
writeln('Vvedite god izdanya: '); readln(god_izdania);
writeln('Vvedite spechialnost'); readln(spechialnost);
write(f,x[i]);
end;
close(f);
{Конец этапа}
{Проверка специальностей}
reset(f);
k:=0;l:=0;
while not eof (f) do
begin
   for i:=1 to n do
    begin
    read(f,x[i]);
    if (x[i].spechialnost='m') then k:=k+1 else
    if (x[i].spechialnost='a') then l:=l+1;
    end;
end;
Close(f);
{Конец этапа}
{Главный блок}
{Если k>l то записываем специальность a}
if k>l then
begin
reset(f);
assign(t,'C:\katalog2.txt');
rewrite(t);
while not eof (f) do
begin
 for i:=1 to n do
   begin
   read(f,x[i]);
   if (x[i].spechialnost='m') then write(t,x[i])
   end;
end;
end;
if k<l then {Если k<l то записываем специальность a}
begin
reset(f);
assign(t,'C:\katalog2.txt');
rewrite(t);
if l>k then
while not eof (f) do
begin
 for i:=1 to n do
   begin
   read(f,x[i]);
   if (x[i].spechialnost='a') then write(t,x[i]);
   end;
end;
end;
close(f);
close(t);
{ЦКонец гл блока}
{Вывод специальностей с большей суммой}
reset(t);
i:=1;
while not eof (t) do
begin
read(t,x[i]);
writeln(x[i].spechialnost,' ',x[i].avtor);
i:=i+1;
end;
readln;
end.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
Попробуй этот код, у меня работает.
Кстати,
Код:
avtor:string[10];
nazvanie:string[10];
god_izdania:string[4];
spechialnost:string[2];
здесь можешь конечно поменять длину строк, но не советую выбирать очень обльшие значения потому, что когда данные записываются в katalog1.txt - там учитывается вся длина инициализации строки, то есть одна запись
Код:
nazvanie:string[80];;
действительно будет занимать именно 80 символов. После выполнения программы, когда файл откроешь не эстетично смотрится, так что длину строк не стоит брать слишком длинной, лучше обойтись максимально до 15.
Всё гениальное - просто!

Последний раз редактировалось .Phoenix; 28.09.2009 в 18:38.
.Phoenix вне форума Ответить с цитированием
Старый 29.09.2009, 04:58   #6
NeXuLoN
 
Регистрация: 28.09.2009
Сообщений: 6
По умолчанию

Огромное тебе спасибо!
NeXuLoN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку) Crish Паскаль, Turbo Pascal, PascalABC.NET 1 20.09.2009 19:16
Помогите найти ошибку! frantic150 Microsoft Office Excel 0 26.06.2009 18:23
help!!! Помогите найти ошибку!!! linker13 Общие вопросы Delphi 2 07.07.2007 23:15