Другие языки программирования и технологии

Программа паскаль, код внутри.

Есть такое условие: дано натуральное число n. Записать в файл g все целые числа b[1]...b[n]. Если b[i]=i!+i^2
Вот такая программа у меня получилась, но результат не правильный.

uses crt;
Var g:file of integer;
i,n: integer;
f,s,b,a: longint;
Begin

write('vvedite N ');
readln(n);
Assign(g,'d:\g.txt');
Rewrite(g);
For i:=1 to n do
Begin
f:=1;
for i:=1 to n do
begin
f:=f*i;
a:=1;
for i:=1 to n do
begin
a:=i*i;
s:=1;
for i:=1 to n do
begin
s:=a+f;
End;
end;
end;
end;
write (g, s);
close(g);
Reset(g);
write('polychenij fajl');
While not Eof(g) do Begin
read(g, s);
writeln;
End;
readln;
End.
Во-первых, у вас несоответствие типов - файл типа integer, а вы пытаетесь записать в него значения типа longint.
Во-вторых, в матрёшке циклов for (суть которых так и осталась мне непонятна) , у вас нет команды записи в файл. Циклы вы гоняете впустую, потому что в файл записываете только последнее значение.
В-третьих, при чтении файла вы забыли выводить прочитанное значение на экран.

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

Предлагаю свой вариант:

program p165761467;

uses
crt;

var
FileOfNum : file of longint;
i, n : integer;
b : longint;

{ Factorial of number }
function factorial(n : integer) : longint;
var
i : integer;
f : longint;
begin
f := 1;
for i := 2 to n do
f := f * i;
factorial := f;
end {factorial};

begin
clrscr;

write('Please, enter n: ');
readln(n);

assign(FileOfNum,'d:\g.txt');
rewrite(FileOfNum);

for i := 1 to n do
begin
b := factorial(i) + i*i;
write(FileOfNum, b);
end;

writeln('Result file:');
reset(FileOfNum);

while (not Eof(FileOfNum)) do
begin
read(FileOfNum, b);
write(b, ' ');
end;

close(FileOfNum);
readkey;

end.

Факториал числа вычисляется отдельной функцией factorial

Форматированная версия - pastebin.com/gJ7yY7P4

P.S. Кстати, есть разница между типизированными и текстовыми файлами. Если вы хотите записать числа в текстовый файл, то объявите FileOfNum : text;
И при этом чтение из файла тоже надо немного подредактировать.
ПК
Павел Копытов
1 648
Лучший ответ
Судя по всему — это Pascal под DOS.

Исходя из этого:
— При объявлении файл типа Integer – 16 бит
— Записываешь в него значения типа Longint (32 бита) , у которых при записи обрезаются верхние 16 бит.

Так почему же ты считаешь, что «результат неправильный» ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Машина делает не то, что хочет человек, а то, что он ей приказывает!
Читать этот бредовый код невозможно. Понять, что нужно автору вопроса тоже.

Рекомендую начать заново и решать задачу поэтапно:
1. читать число Н и тупо вывести его в файл
2. читать число Н и вывести в файл числа от 1-го до Н
3. вместо чисел выводить факториалы этих чисел
4. выводить вместо факториалов то, что требуется по условию задачи

вложенные циклы ОБЯЗАНЫ иметь разные переменные.