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

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

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

Автор: WiT 14.05.2008 23:20

Есть задача:

Создать файл,содержащий массив целых чисел. Определить количество элементов массива.
Переменной L присвоить значение True ,если в массиве нечетное число элементов и значение
False в противном случае.

Нарисовал всё это так:


uses crt;

const n=13;

var f:text; i,kol:integer; s:real; l:boolean;
mas: array [1..n] of integer;
begin clrscr; randomize;
for i:=1 to n do begin
mas[i]:=random(25)-5; write(mas[i],' '); end;
for i:=1 to n do
kol:=kol+1; writeln;
writeln('chislo_elementov= ',kol);
if (kol mod 2)=0 then l:=false else l:=true;
writeln('L: ',l);
assign(f,'massiv1.txt'); rewrite(f);
for i:=1 to n do
write(f,mas[i],' '); writeln(f);
writeln(f,'chislo_elementov= ',kol);
writeln(f,'L: ',l); close(f);
readkey; end.


Т.е. число элементов задал сам,а надо чтобы при каждом запуске
число было четным или нечетным - менялось,как этого можно добиться? посоветуйте ,умные люди!!!
ибо конечное значение массива не удается задать переменной....

Автор: volvo 14.05.2008 23:43

Цитата
Т.е. число элементов задал сам,а надо чтобы при каждом запуске число было четным или нечетным - менялось,как этого можно добиться?
Задание читай внимательнее: тебе надо создать файл, а не массив... Вот так и делаем:

var
f: FILE of integer; { <--- Исправлено !!! }
...
begin
randomize;
count := random(20) + 20;
assign(f, 'array.dat'); rewrite(f);

for i := 1 to count do begin
elem := random(25) - 5; write(f, elem);
end;
close(f);

{
ну вот, файл создан, теперь открывай его и считай,
сколько элементов в нем хранится
}
...
end.

Автор: Гость 15.05.2008 0:14

Надо чтото в скобке после слова array написать в задании переменной- ошибку выдаёт

Автор: volvo 15.05.2008 0:24

Ты где-то в моем коде видишь слово Array (в смысле, описание типа)? Я - не вижу... Показывай, что ты намудрил...

Update:
исправлено, там должен был быть File of integer... Остальные переменные доопредели сам...

Автор: Гость 15.05.2008 0:44

Получилось вот что:


uses crt;
var i,kol,count,elem:integer; l:boolean;
f: file of integer;
begin clrscr; randomize;
count:=random(20)+10;
assign(f,'massiv1.txt'); rewrite(f);
for i:=1 to count do begin
elem:=random(25)-5; write(f,elem); write(elem,' '); end; close(f);
assign(f,'massiv1.txt'); reset(f);
for i:=1 to count do
kol:=kol+1; writeln;
writeln('chislo_elementov= ',kol);
if (kol mod 2)=0 then l:=false else l:=true;
writeln('L: ',l);
readkey; end.


Работает вродебы)))

Автор: Айра 15.05.2008 0:51

for i:=1 to count do
kol:=kol+1;

Тогда проще вывести writeln('chislo_elementov= ',count); smile.gif

Ты должен считывать элементы из файла, пока он не закончится, и попутно считать, сколько их получилось..

окончание файла - eof(f)

Автор: WiT 15.05.2008 0:52

Чуть не забыл,volvo - благодарю!!!)))

Автор: WiT 15.05.2008 0:57

Айра, исправлю,но это всё мелочи , у меня нет задачи оптимизировать код)))

Автор: Айра 15.05.2008 1:12

Здесь дело не в оптимизации.. Задача то на файлы, скорее всего в задании подразумевались запись в файл и чтение из него.. 1-е у тебя есть, а вместо второго ты схитрил))
Но вообще кто его знает.. я же не твой преподаватель и настаивать не буду))