Помощь - Поиск - Пользователи - Календарь
Полная версия: Типизированые файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alex7
Дело вот вобщем в чем- написал програму, которая в конечном итоге должна записать "записи" в типизированый файл при том соблюдая внешнее оформление текста(табуляцию-типо под таблицу).
Возникла следующая проблема: после записи в файл и при дальнейшем его просмотре(что сказано в условии задачи) появляются лишние знаки табуляции(#9) а цифры не отображаются, такое ошюшение, что записаны в другой кодировке.
Вобщем прикрепляю прогу и побочный файл(для чтения).
Хелп!
mega_chok.gif
volvo
Цитата
такое ошюшение, что записаны в другой кодировке.

Дык... Ты же пишешь в типизированный файл, а не в текстовый... В файл записывается внутреннее представление записи типа stri4ka. В частности, числа пишутся не символами (как в текстовых файлах), а просто пишется содержимое того байта, который представляет число. Естественно, никаких переносов строки, ибо данные хранятся последовательно...

Когда прочтешь информацию из типизированного файла в структуру типа stri4ka, все встанет на свои места...
Цитата
после записи в файл и при дальнейшем его просмотре(что сказано в условии задачи)
прямо так и сказано, просмотреть с помощью текстового редактора? Может быть, прочесть содержимое файла и показать его на экране?
Alex7
Цитата
прямо так и сказано, просмотреть с помощью текстового редактора? Может быть, прочесть содержимое файла и показать его на экране?

Да! так и сказано, почему я это и подчеркнул.
Блин, так не охота переводить вам условие. короче думаю поймете)
Код
5.Переглянути за допомогою вбудованого в'ювера або одного з текстових редакторів
структуру створеного типізованого файла. Записати розміри обох файлів: текстового і типізо¬
ваного, порівняти їх, зробити ВИСНОВКИ.

А вообще, если так посмотреть, то програма правильно написана? unsure.gif
Alex7
Большое кстати, забыл прочитать одно условие задачи, и сразу же запутался, вставляя это в задачу. wacko.gif
Мне нужно там вычеслить общее кол-во путевок, которые получила каждая школа. Вывести это все дело на экран.
Т.е. я понимаю что нужно сравнить tabl[i].nomer со всеми tabl[i].nomer, выводив на экран только разные №-ра а потом tabl[i].kst_p с теми же i просумировать и вывести?
Я пробовал начать это так:
...
tabl[i].vidp:= Copy(rad,1,length(rad));
delete(rad,1,length(rad));
Write(f2,tabl[i]);

for k:=0
{
а вот что будет стоять на месте этого элемента,
если он не существует? "мусор"?
} to j-1 do
if tabl[k].nomer <> tabl[i].nomer then write('№',i);
{
далее не придумал, т.к. даже не знаю
правильный ли у меня ход мыслей)
}

Inc(i);
Until seekeof(f1);
...
volvo
Alex7, ты знаешь, не у всех тут отличное знание украинского языка, а в твоей программе все по-украински, да и название kst_p мне лично ничего не говорит... Кроме того, я так и не видел задания, ты все время выдаешь только его куски, и то на непонятном языке. Возможно лм вообще присутствие одного и того же номера школы более одного раза в файле.

Извини, но если уж ты задаешь вопросы - задавай их как положено !!!
Alex7
Цитата
Извини, но если уж ты задаешь вопросы - задавай их как положено !!!
Ну ладно, учту)
Цитата
Возможно лм вообще присутствие одного и того же номера школы более одного раза в файле.
А почему нет?
Разве одна школа не может получить путевки в разные лагеря (например Zonz и Veselka lol.gif ) ? cool.gif
Ладно, прийдется перевести полностью задание, ой, в падло то как wink.gif ...но мне ж надо! rolleyes.gif
Цитата
1.Создать в текстовом редакторе файл,данные которого должны соответствовать таблице(оформление необязательное) {т.е. как и у меня}. Файл должен иметь разширение *.inf
2. В програме организовать создание нового типизированного файла с разширением *.dat , который должен состоять из записей, каждый из которых должен соответствовать определ. полю таблици. Одновременно розпечатать данные на экран. бла,бла,бла,,, подсказки...4) Когда типизированный файл создано, закрыть текстовой и дальше продолжать работать с предыд. Запрограмировать действия, которые необходимо выполнить, чтобы реализовать задачу, обработки введенной инфы. 5) просмотреть с помощью встроенного вьювера, или одного из текстовых редакторов структуру типизированного файла. Записать размеры обоих файлов, Сделать выводы.
Индивидуальное задание:
"Разпределение путевок в оздоровительно- спортивные (конц lol.gif )лагеря по школам города!
<таблица>
Напечатать сумарное кол-во путевок, которое получила каждаю щкола.

Фуф, неужели енд? wacko.gif good.gif
Я буду горько смеятся, если теперь, после прочтения задачи, мне ктото предложит более умный и простой алгоритм решения задачи! nea.gif cool.gif

М
Ты нам одолжение чтоли делаешь ? mad.gif
klem4

Alex7
Цитата
Ты нам одолжение чтоли делаешь ? mad.gif
Дык, volvo, ты чо?
Где это видано, чтобы кто-то просящий о помощи делал помогающему этим отдолжение? blink.gif
Я чото тебя совсем не понимаю! nea.gif

М
Это не Volvo был ...
klem4

Alex7
Понял, но сути не меняет! give_rose.gif
Так кто-то может попробовать мне помочь именно с этим приколом?
(Подсчетом общего кол-ва путевок по школам.)
Alex7
Люди! ПЛИЗ! Хелп, ну!
Я не могу таки до конца грамотно разобраться!
Вот прога(та-же)
program tablizja(lab9_10);
Type stri4ka= record
nazva: string[20];
misze: string[20];
nomer: byte;
kst_p: byte;
vidp : string[50];
end;
Var tabl: array[1..25] of stri4ka;
sumkst_p,k,i,z: integer;
f1name,f2name: string[50];
rad: string;
f1: text;
f2: file of stri4ka;
Begin
Repeat
z:=0;
Writeln('‚ўҐ¤вм i¬''п д ©«г'); readln(f1name);
assign(f1,f1name);
{$I-}
reset(f1);
{$I+}
if ioresult<>0 then
begin
writeln('Џ®¬Ё«Є®ўҐ ўўҐ¤Ґ­­п! ” ©« ­Ґ §­ ©¤Ґ­®.');
Inc(z);
end;
Until z=0;
f2name:= Copy(f1name,1,pos('.',f1name))+'dat';
assign(f2,f2name); rewrite(f2);

for z:=1 to 80 do
Write(#196);
Writeln('’ Ўiа',#9,#9,'ЊiбжҐ §­-­­п',#9,'ь иЄ®«Ё'#9,#9,'Љ-бвм Їгв.',#9,'‚i¤Ї®ўi¤ «м­Ё©');
writeln;
i:=1;
Repeat
Readln(f1,rad); writeln(rad);
tabl[i].nazva:= Copy(rad,1,pos(#9,rad)-1); delete(rad,1,pos(#9,rad)+1);
tabl[i].misze:= Copy(rad,1,pos(#9,rad)-1); delete(rad,1,pos(#9,rad)+1);
Val(Copy(rad,1,pos(#9,rad)-1),tabl[i].nomer,z); delete(rad,1,pos(#9,rad)+1);
Val(Copy(rad,1,pos(#9,rad)-1),tabl[i].kst_p,z); delete(rad,1,pos(#9,rad)+1);
tabl[i].vidp:= Copy(rad,1,length(rad)); delete(rad,1,length(rad));
Write(f2,tabl[i]);
Inc(i);
Until seekeof(f1);
close(f1);
for z:=1 to 80 do
Write(#43);
Writeln(' Љi«мЄiбвм Їгвiў®Є, пЄг ®ваЁ¬ « Є®¦­ иЄ®« :');
Writeln('˜Є®« ь');
for z:=1 to 80 do
Write(#196);
{For k:=1 to i-1 do
With tabl[k] do
Writeln(k,' ',nazva,#9,misze,#9,nomer,#9,kst_p,#9,vidp);}
close(f2);
Writeln('„ ­­i § ­ҐбҐ­i г д ©« ''',f2name,'''');
Readln;
End.

для пояснения- переменные:
kst_p -это кол-во путевок, которые получила каждая школа
sumkst_p - это кол-во путевок, которые получила каждая школа вместе(ЭТО МНЕ И НАДО СЕЦЧАС НАЙТИ)
rad -рядок(который читаем)
Alex7
Сои за как-бы оффтоп, но вот вобщем чо я наполовину сделал,НО опять таки же условие не хочет работать! ХЕЛП! Мне на завтра нужно идеально закончить прогу!
Writeln('               Кол-во путевок, которые получила КАЖДАЯ школа« :');
Write('Школа',#9);
For z:=1 to i-1 do
If z=1 then
Write('№',tabl[z].nomer,#9) else
begin
sumkst_p:=0;
For k:=1 to z-1 do
If tabl[z].nomer=tabl[k].nomer then Inc(sumkst_p);
If sumkst_p=0 then Write('№',tabl[z].nomer,#9);
end;
writeln;
Write('Кол-во',#9);
For z:=1 to i-1 do
begin
sumkst_p:=0;
For k:=1 to i-1 do
If tabl[z].nomer=tabl[k].nomer then
begin
sumkst_p:=sumkst_p+tabl[k].kst_p;
tabl[k].nomer:=0;
end;
Write(sumkst_p,#9);
end;

Вот. условие подсчета кол-ва путевок не работает!!!! mega_chok.gif mega_chok.gif mega_chok.gif
 Write('Кол-во',#9);
For z:=1 to i-1 do
begin
sumkst_p:=0;
For k:=1 to i-1 do
If tabl[z].nomer=tabl[k].nomer then
begin
sumkst_p:=sumkst_p+tabl[k].kst_p;
tabl[k].nomer:=0;
end;
Write(sumkst_p,#9);
end;

Выводит простовсе числа подрят, не сумируя.
Alex7
Ясно. norespect.gif
Вот, вобщем после пару часиков) я таки прогу доделал, если кому интирессно, то:
Цитата
Я не флужу!

program tablizja(lab9_10);
{Uses CRT;}
Type stri4ka= record
nazva: string[20];
misze: string[20];
nomer: byte;
kst_p: byte;
vidp : string[50];
end;
Var tabl: array[1..25] of stri4ka;
sumkst_p,k,i,z: integer;
f1name,f2name: string[50];
rad: string;
f1: text;
f2: file of stri4ka;
Begin
{ Clrscr;}
for z:=1 to 25 do
writeln;
for z:=1 to 80 do
Write(#205);

Repeat
z:=0;
Writeln('‚ўҐ¤вм i¬''п д ©«г'); readln(f1name);
assign(f1,f1name);
{$I-}
reset(f1);
{$I+}
if ioresult<>0 then
begin
writeln('Џ®¬Ё«Є®ўҐ ўўҐ¤Ґ­­п! ” ©« ­Ґ §­ ©¤Ґ­®.');
Inc(z);
end;
Until z=0;
f2name:= Copy(f1name,1,pos('.',f1name))+'dat';
assign(f2,f2name); rewrite(f2);

for z:=1 to 80 do
Write(#250);

Writeln('’ Ўiа',#9,#9,'ЊiбжҐ §­-­­п',#9,'ь иЄ®«Ё'#9,#9,'Љ-бвм Їгв.',#9,'‚i¤Ї®ўi¤ «м­Ё©');
writeln;
i:=1;
Repeat
If i=16 then
begin
writeln(#9,' Ќ вЁб­iвм ENTER ¤«п Їа®¤®ў¦Ґ­­п ўЁў®¤г в Ў«Ёжi ­ ҐЄа ­.');
writeln(#9,#9,#9,#9,'“ў Ј !');
write(' ЏаЁ Їа®¤®ў¦Ґ­­i i­д®а¬ ©iп, й® ­ Ї®з вЄг в Ў«Ёжi, Ўг¤Ґ §вҐав зҐаҐ§ бЄа®««i­Ј');
readln;
end;
Readln(f1,rad); writeln(rad);
tabl[i].nazva:= Copy(rad,1,pos(#9,rad)-1); delete(rad,1,pos(#9,rad)+1);
tabl[i].misze:= Copy(rad,1,pos(#9,rad)-1); delete(rad,1,pos(#9,rad)+1);
Val(Copy(rad,1,pos(#9,rad)-1),tabl[i].nomer,z); delete(rad,1,pos(#9,rad)+1);
Val(Copy(rad,1,pos(#9,rad)-1),tabl[i].kst_p,z); delete(rad,1,pos(#9,rad)+1);
tabl[i].vidp:= Copy(rad,1,length(rad)); delete(rad,1,length(rad));
Write(f2,tabl[i]);
Inc(i);
Until seekeof(f1);
close(f1);

for z:=1 to 80 do
Write(#250);

Writeln(' Љi«мЄiбвм Їгвiў®Є, пЄг ®ваЁ¬ « Є®¦­ иЄ®« :');
Write('˜Є®« ',#9);
For z:=1 to i-1 do
If z=1 then
Write('ь',tabl[z].nomer,#9) else
begin
sumkst_p:=0;
For k:=1 to z-1 do
If tabl[z].nomer=tabl[k].nomer then Inc(sumkst_p);
If sumkst_p=0 then Write('ь',tabl[z].nomer,#9);
end;
writeln;
Write('Љ-бвм',#9);
For z:=1 to i-1 do
begin
sumkst_p:=0;
For k:=1 to i-1 do
If (tabl[z].nomer=tabl[k].nomer)and(tabl[z].nomer<>0) then
begin
sumkst_p:=sumkst_p+tabl[k].kst_p;
if z<>k then tabl[k].nomer:=0;
end;
If sumkst_p<>0 then Write(sumkst_p,#9);
end;
Writeln;

for z:=1 to 80 do
Write(#250);

close(f2);
Writeln('„ ­­i § ­ҐбҐ­i г д ©« ''',f2name,'''');

for z:=1 to 80 do
Write(#205);

Readln;
End.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.