Помощь - Поиск - Пользователи - Календарь
Полная версия: типизированные файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
D-7
Помогите Люди Добрые!
Дан файл F, элементами которого являються целочисленные массивы a0,a1,a2,a3,a4. Требуеться преобразовать каждый из массивов, заменив элементы с наибольшим значением на 0. Полученные массивы должны быть записаны в тот же самый файл F.
Исходные данные:
5 6 7 4 8
11 8 3 2 1
2 1 -5 -6 -10
-8 2 -9 -2 -1
Sozialist
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

Type
TMas=array[1..4] of integer;
Var
a:TMas;
F:file of TMas;
i,k:byte;
max:integer;
begin
AssignFile(F,'data.dat');
rewrite(F);
for k:=1 to 5 do
begin
writeln('Fill in the ', k ,' massive:');
for i:=1 to 4 do read(a[i]);
write(F,a);
end;

reset(F);
for i:=1 to 5 do
begin
read(F,a); max:=a[1];
for k:=1 to 3 do
begin
if a[k+1]>max then max:=a[k+1];
end;

for k:=1 to 4 do
if a[k]=max then a[k]:=0;
seek(F,i-1);
write(F,a);
end;
closeFile(F);
writeln;
//вывод на экран
reset(F);
for i:=1 to 5 do
begin
read(F,a);
for k:=1 to 4 do write(' ',a[k]);
writeln;
end;
readln; readln;
end.


С тебя бутыль, хоть я и не пью. blum.gif Если не в дельфяке программируешь, перепиши там пару строк. Я не шарю в простом паскале wink.gif
Адель
здесь посты на Pascal а не Delphi
Sozialist
Цитата(Адель @ 22.03.2007 0:46) *

здесь посты на Pascal а не Delphi

Ухах lol.gif А ты все еще суешь свой нос, куда не следует?

 ! 
Sozialist в премоде на неделю за этот пост. Lapp

Гость
Sozialist-а в премод... За оскорбление участника форума...
Sozialist
Где оскорбление? Учи русский язык, читай словарь Даля.
Ну давайте, все по очереди, накидывайте проценты. Поражаюсь над вами, люди. Вам по 10 лет что ли?
Оффтоп, прошу прощения, но это того стоило. А тема себя исчерпала все равно уже.
мисс_граффити
М
Sozialist, правила никто не отменял:
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).

КМА
 
const n=5;
type massive=array [1..n] of integer;
Var f: file of massive;
a0, a1, a2, a3, a4: massive;

procedure createRandomMassive(Var x: massive);
Var i: byte;
Begin
for i:=1 to n do
x[i]:=random (199) - 100;
End;

procedure printMassive (x: massive);
Var i: byte;
Begin
for i:=1 to n do
write (x[i],' ');
writeLn;
End;

function numMaxElMassive (x: massive): byte;
Var i, iMax: byte;
Begin
iMax:=1;
for i:=2 to n do
if x[iMax]<x[i]
then iMax:=i;
numMaxElMassive:=iMax;
End;

BEGIN
assign (f, 'C:\zadacha1.kma');
{---------------------------------------}
{создадим файл и занесем в него массивы}
reWrite (f);
createRandomMassive (a0);
write (f, a0);
createRandomMassive (a1);
write (f, a1);
createRandomMassive (a2);
write (f, a2);
createRandomMassive (a3);
write (f, a3);
createRandomMassive (a4);
write (f, a4);
close (f);
{-----------------------------------------}
{теперь начинается собвственно твоя программа, все что отделенно
-----------------------------------------
не считать. Это вообще отдельная программа должна быть}
writeLn ('File before:');
reSet (f);
{читаем из файла массив выводим его на экран,
находим максимальный, обнуляем}
read (f, a0);
printMassive (a0);
a0[numMaxElMassive (a0)]:=0;

read (f, a1);
printMassive (a1);
a1[numMaxElMassive (a1)]:=0;

read (f, a2);
printMassive (a2);
a2[numMaxElMassive (a2)]:=0;

read (f, a3);
printMassive (a3);
a3[numMaxElMassive (a3)]:=0;

read (f, a4);
printMassive (a4);
a4[numMaxElMassive (a4)]:=0;

writeLn ('File after:');
{Теперь стираем все данные из файла и перезаписываем новые массивы}
reWrite (f);

write (f, a0);
write (f, a1);
write (f, a2);
write (f, a3);
write (f, a4);

printMassive (a0);
printMassive (a1);
printMassive (a2);
printMassive (a3);
printMassive (a4);

close (f);
readLn;
END.



В общем есть идея все эти массивы забабахать в еще один большой из 4 элементов. Но условие есть условия, таковы данные.
Sozialist
А смысл использовать 4 массива? Перегрузка программы. Переменная типа компонента файла одна.
КМА
Вот то, о чем я говорил в моем предыдущем посте. Просто, если разрешено рассматривать а0, а1, а2, а3, а4 как элементы массива, то тогда код можно ужать (сразу вспоминается лекция про соотношение пространства и времени). Думаю, этот вариант будет немного помедленее, но зато более удобно читаемый.

const n=5;
type massive=array [1..n] of integer;
Var f: file of massive;
an: array [0..4] of massive;
i: byte;

procedure createRandomMassive(Var x: massive);
Var i: byte;
Begin
for i:=1 to n do
x[i]:=random (199) - 100;
End;

procedure printMassive (x: massive);
Var i: byte;
Begin
for i:=1 to n do
write (x[i],' ');
writeLn;
End;

function numMaxElMassive (x: massive): byte;
Var i, iMax: byte;
Begin
iMax:=1;
for i:=2 to n do
if x[iMax]<x[i]
then iMax:=i;
numMaxElMassive:=iMax;
End;

BEGIN
assign (f, 'C:\zadacha1.kma');
{---------------------------------------}
{создадим файл и занесем в него массивы}
reWrite (f);
Randomize;
for i:=0 to 4 do
begin
createRandomMassive (an[i]);
write (f, an[i])
end;
close (f);
{-----------------------------------------}
{теперь начинается собвственно твоя программа, все что отделенно
-----------------------------------------
не считать. Это вообще отдельная программа должна быть}
writeLn ('File before:');
reSet (f);
{читаем из файла массив выводим его на экран,
находим максимальный, обнуляем}
for i:=0 to 4 do
begin
read (f, an[i]);
printMassive (an[i]);
an[i][numMaxElMassive (an[i])]:=0;
end;

writeLn ('File after:');
{Теперь стираем все данные из файла и перезаписываем новые массивы}
reWrite (f);
for i:=0 to 4 do
begin
write (f, an [i]);
printMassive (an[i])
end;

close (f);
readLn;
END.

Алена
Цитата
Переменная типа компонента файла одна.
Переменных типа компонента файла столько, сколько решит сделать программист... ТВОЙ вариант мы уже видели... nea.gif

Перестань флудить по всему форуму... По хорошему прошу...
мисс_граффити
Sozialist, а смысл не закрывать файл после записи?
Sozialist
Цитата(мисс_граффити @ 22.03.2007 1:32) *

Sozialist, а смысл не закрывать файл после записи?

Ну ты наверно не знаешь, что в Delphi, копилятор следит за процессами. В частности, если файл открыт для записи, close(F) писать не нужно, если нужно открывать для чтения.
В других местах писал, вроде пунктуации, но не привык.
Артемий
Это она не знает!!!?Не смеши! Про дельфи забудь,100 раз сказали!
Lapp
 ! 
Sozialist в премоде на неделю (см.выше)

Кончаем флуд..

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