• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите! Паскаль не слушается!

  • Автор темы Guest
  • Дата начала
G

Guest

Проблема такая: Дан файл, содержащий целые числа. Нужно вывести среднее арифметическое этих чисел. А он (паскаль) выводит какую-то хрень. Почему?
Код:
program z_1;

uses crt;

var f: file of integer;
s: integer;
k, l: real;
i: byte;

BEGIN
clrscr;
assign(f, 'z.dat');
reset(f);
while not eof(f) do
begin
s:=0;
read(f, s);
i:=i+1;
k:=k+s;
end;
close(f);
l:=k/i;
writeln(l:3:3);
readkey;
END.
На всякий случай
 
D

Dock1100

Обнуляйте переменные
Код:
program z_1;

uses crt;

var f: file of integer;
r,i: integer; {//////////}
k, l: real;

BEGIN
clrscr;
assign(f, 'z.txt');
i:=0;			 {//////////}
k:=0;			 {//////////} 
reset(f);
while not eof(f) do
begin
read(f, r);
i:=i+1;
k:=k+r;
end;
close(f);
l:=k/i;
writeln(l:3:3);
readkey;
END.
 
G

Guest

Насчет обнуления
Код:
program gg;

uses crt;

var i: integer;
k: byte;
r: real;

BEGIN
clrscr;
writeln(i);
writeln(k);
writeln(r);
readkey;
END.
Проблема в другом. В файле содержатся числа:
1
3
1
3
1
0
3
1
А программа выдает среднее арифметическое: 6564,818
Очевидно, что ср. ар. будет немножко другим :) Чё делать то???
 
G

Guest

Ошибка здесь:
Код:
read(f, r);
Записывает не те числа, что в файле.
Как это исправить?
 
I

isqoff

а разве файл должен быть не .dat?(ведь переменная f создана как типизированная,а не текстовая !!!)
ну а если он текстовый то и переменную f задавайте(f: Text;).
Исходя из этого, какой всё таки файл дан,содержащий целые числа?
 
I

isqoff

Код:
uses crt;
var f:Text;
a,sum,sred:integer;
b:real;
BEGIN
a:=0;
sum:=0;
sred:=0;
b:=0;
Assign(f,'d:\z.txt');
Reset(f);
while not EOF(f)do
begin
readln(f,a);
sum:=sum+a;
inc(sred);
end;
Close(f);
b:=sum/sred;
write('Среднее арифмитическое содержимого файла z.txt = ',b);

END.

вот решение для текстового файла
 
G

Guest

Код:
program z_1;

uses crt;

var f: file of integer;
s: integer;
k, l: real;
i: byte;

BEGIN
clrscr;
assign(f, 'z.dat');
reset(f);
while not eof(f) do
begin
s:=0;
read(f, s);
i:=i+1;
k:=k+s;
end;
close(f);
l:=k/i;
writeln(l:3:3);
readkey;
END.
Ладно, меняем расширение у файла. Все равно ПОКАЗЫВАЕТ ТУ ЖЕ ЕРЕСЬ!!!
 
D

Dock1100

Вот пример, у меня все работает:
Код:
var f:file of integer;
x,k,s:integer;
sred:real;
begin
assign(f,'1.tt');
rewrite(f);

x:=1; {пишем наши целые числа}
write(f,x);
x:=3;
write(f,x);
x:=1;
write(f,x);
x:=3;
write(f,x);
x:=1;
write(f,x);
x:=0;
write(f,x);
x:=3;
write(f,x);
x:=1;
write(f,x);

close(f);

readln;
k:=0;
s:=0;

reset(f);
while not eof(f) do 
begin {читаем и выводим}
k:=k+1;
read(f,x);
s:=s+x;
writeln(x);
end;

writeln;
sred:=s/k; {считаем среднее арифм.}
writeln(sred:8:2);
readln;


close(f);
end.
 
G

Guest

Когда файл cоздается программой все ок
Код:
Uses
CRT;
var
f:file of integer;
l, k:real;
i,n,a:integer;
begin
clrscr;
assign(f,'C:\file.xyi');
rewrite(f);
write('Введите количество элементов массива: ');
readln(n);
for i:=1 to n do
begin
write('Число ',i,'-e:=');
readln(a);
write(f,a);
end;
clrscr;
k:=0;
i:=0;
writeln('Содержание исходного файла: ');
reset(f);
while not eof(f) do
begin
read(f,a);
write(a,' ');
inc(i);
k:=k+a;
end;
l:=k/i;
writeln;
close(f);
writeln(l);
readkey;
end.
А когда файл уже создан, то нехрена не работает!
Код:
Uses
CRT;
var
f:file of integer;
l, k:real;
i,a:integer;

begin
clrscr;
assign(f,'C:\file.dat');
k:=0;
a:=0;
i:=0;
writeln('Содержание исходного файла: ');
reset(f);
while not eof(f) do
begin
read(f,a);
write(a,' ');
inc(i);
k:=k+a;
a:=0;
end;
l:=k/i;
writeln;
close(f);
writeln(l:3:3);
readkey;
end.
 
D

Dock1100

1. У мяне все работает.
2. Скачай другой паскаль с оф сайта
3. Возможно ничего неработает потому что assign(f,'C:\file.xyi') это и это assign(f,'C:\file.dat') два разных файла.

Добавлено:
 
G

Guest

2. Скачай другой паскаль с оф сайта
У меня free pascal 2.2.2 до этого все программы запускались=)

3. Возможно ничего неработает потому что assign(f,'C:\file.xyi') это и это assign(f,'C:\file.dat') два разных файла.
Неа file.dat ЕСТЬ НА ДИСКЕ Ц, все с ним в порядке!
 
D

Dock1100

Я пользуюсь Turbo Pascal 7.1,
попробуй файл сохранять не assign(f,'C:\file.dat') а assign(f,'file.dat')
 
G

Guest

Странно, у меня всё спокойно компилится и работает нормально.
Прога, где файл создается программой, а потом читается и выводит на екран- работает без проблем.
Но если вырезать кусок создания и записи в файл, то программа читает из файла другие числа!!!
Может проблема в кодировке?


Короче хз. Всем написавшим в этом топике- спасибо! И как говорит малахов+: "Доброго Вам здоровьеца!!! " :)
 
I

isqoff

Женя,Лучше всего такие вещи делать с текстовыми файлами (возможностей больше и гемора меньше):)
 
D

Dock1100

А препод сказал на какой именно фигне делать или обязательно Free Pascal.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!