Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2011, 03:50   #1
allegri
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию Проблема с записью данных в файл

Есть программа, которая считает проценты 0, - и + чисел.
У меня не получается сохранить окончательные даные в файл. Самое странное то, что процедура SaveMas работала. Но после доработки других частей программы отказывается создавать файл. Может быть я что-то где-то случайно переписала и теперь в упор не вижу? Помогите, пожалуйста!
Заранее спасибо!

Код:
Program rozrah;
uses crt;
Type
TMatrix=array[1..30] of integer;

procedure ReadMas(var M:TMatrix);
var i:integer;
begin
for i:=1 to 30 do
Read(M[i]);
writeln;
end;

procedure ReadMasR(var M:TMatrix);
var i:integer;
begin
for i:=1 to 30 do
begin
M[i]:=random(10)-random(10);
write(M[i],' ');
end;
writeln;
end;

procedure ReadMasF(var M:TMatrix);
var
f:file of integer;
fname:string;
num,i:integer;
begin
Writeln('Vvedit imja failu:');
Readln(fname);
assign(f,fname);
reset(f);
while not eof(f) do
begin
read(f,num);
write(f,num);
end;
writeln;
close(f);
end;

procedure Vidsotok(var M:TMatrix);
var i,d,v,n:integer;
dod,nul,vid:real;
begin
d:=0; v:=0; n:=0;
for i:=1 to 30 do
begin
if M[i]>0 then inc(d);
if M[i]=0 then inc(n);
if M[i]<0 then inc(v);
end;
dod:=(d*100)/30;
nul:=(n*100)/30;
vid:=(v*100)/30;
Writeln('Dodatni: ',dod:3:2,'%');
Writeln('Vidjemni: ',vid:3:2,'%');
Writeln('Nuljovi: ',nul:3:2,'%');
end;

Procedure SaveMas(var M:TMatrix);
var f:text;
i,d,v,n:integer;
name:string;
dod,vid,nul:real;
begin
d:=0; v:=0; n:=0;
for i:=1 to 30 do
begin
if M[i]>0 then inc(d);
if M[i]=0 then inc(n);
if M[i]<0 then inc(v);
end;
dod:=(d*100)/30;
nul:=(n*100)/30;
vid:=(v*100)/30;
Writeln('Vvedit nazvu fajlu:');
Readln(name);
assign(f,name);
rewrite(f);
Writeln(f,'Dodatni: ',dod:3:2,'%');
Writeln(f,'Vidjemni: ',vid:3:2,'%');
Writeln(f,'Nuljovi: ',nul:3:2,'%');
close(f);
end;

var A:TMatrix;
x:integer;
begin
clrscr;
randomize;
Writeln('Oberit variant vvodu danuh:');
Writeln('1-zchutatu masuv z klaviatury');
writeln('2-zchutaty masuv z failu');
writeln('3-zgeneruvaty masuv');
readln(x);
writeln;
if x=1 then ReadMas(A);
if x=2 then ReadMasF(A);
if x=3 then ReadMasR(A);
Vidsotok(A);
Writeln('Zberegtu u fail?');
Writeln('1-Yes');
Writeln('2-No');
read(x);
if x=1 then SaveMas(A);
Readkey;
end.
allegri вне форума Ответить с цитированием
Старый 20.01.2011, 07:12   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

внешне всё пристойно (ну,если не считать, что Вы переменные для расчёта в процедуре Vidsotok сделали локальные, поэтому в SaveMas вынуждены повторить полностью код расчёта)...

В чём проявляется то, что "не получается сохранить окончательные даные в файл" ? Ошибка при сохранении? Или то, что сохранилось, Вы потом прочитать не можете? Или в чём?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2011, 07:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну все понятно.
1) Вопрос на ввод имени файла не дает пользователю его ввести потому что ты пишешь
Цитата:
Writeln('Zberegtu u fail?');
Writeln('1-Yes');
Writeln('2-No');
read(x);
read используется для особого вида ввода, и не рекомендуется для ввода с клавиатуры, потому что у него есть особенности при работе с клавишей Энтера - эта процедура его не считывает, или вернее оставляет в буфере. потому сюда нужен readln, который и Энтер считает, что даст позже ввести имя файла. Иначе Readln(name);считает неочищенный Энтер из буфера и будет радоваться типа так и надо.
А так в целом прога в норме...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2011, 09:33   #4
allegri
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

Stilet
Спасибо большое! Дело было именно в Readln.
Пока еще не знала такой особенности read.

Serge_Bliznykov
Спасибо! Насчет локальных переменных что-то не подумала..
Нужно будет переделать.
allegri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью в файл (Паскаль) ThisIzGame Помощь студентам 2 24.03.2010 06:45
Проблема с записью текста в файл AK BULLETS Помощь студентам 3 19.03.2010 19:22
Проблема с записью в файл baltushka Помощь студентам 0 14.06.2009 17:39
Проблема с записью структуры в файл JamS007 Общие вопросы C/C++ 5 07.01.2009 23:13
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49