Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ типизированные файлы

Автор: D-7 22.03.2007 3:51

Помогите Люди Добрые!
Дан файл 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 22.03.2007 4:41

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

Автор: Адель 22.03.2007 4:46

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

Автор: Sozialist 22.03.2007 4:47

Цитата(Адель @ 22.03.2007 0:46) *

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

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

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


Автор: Гость 22.03.2007 4:49

Sozialist-а в премод... За оскорбление участника форума...

Автор: Sozialist 22.03.2007 4:52

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

Автор: мисс_граффити 22.03.2007 5:01

М
Sozialist, правила никто не отменял:
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).


Автор: КМА 22.03.2007 5:16

 
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 22.03.2007 5:21

А смысл использовать 4 массива? Перегрузка программы. Переменная типа компонента файла одна.

Автор: КМА 22.03.2007 5:31

Вот то, о чем я говорил в моем предыдущем посте. Просто, если разрешено рассматривать а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.


Автор: Алена 22.03.2007 5:31

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

Перестань флудить по всему форуму... По хорошему прошу...

Автор: мисс_граффити 22.03.2007 5:32

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

Автор: Sozialist 22.03.2007 5:41

Цитата(мисс_граффити @ 22.03.2007 1:32) *

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

Ну ты наверно не знаешь, что в Delphi, копилятор следит за процессами. В частности, если файл открыт для записи, close(F) писать не нужно, если нужно открывать для чтения.
В других местах писал, вроде пунктуации, но не привык.

Автор: Артемий2 22.03.2007 5:48

Это она не знает!!!?Не смеши! Про дельфи забудь,100 раз сказали!

Автор: Lapp 22.03.2007 9:46

 ! 
Sozialist в премоде на неделю (см.выше)

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