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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2011, 08:22   #1
madman797
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 10
По умолчанию ERROR 106 invalid numeric format (PASCAL)

на строчке Read(f,nU);{Количество ребер в реберном списке графа }

выдает ERROR 106 invalid numeric format , а файле C:\hvivod.txt появились строчки :
nU= 0
nX= 0
X=
u1=2
u2=2
We=2
uo1=2
uo2=uo1=4
uo2=2
Woe=2
Bec= 0


вот программный код :
Код:
Program Hungry_Ostov; {Оставное дерево.Жадный алгоритм.}
uses CRT,DOS;
Const
nVertex=50;{Максимальное количество вершин}
nRib=1000;{Максимальное количество ребер}
Type
TypeVertex=array[1..nVertex] of Integer;
TypeRib=array[1..nRib] of Integer;
Var f:Text;{Текстовый файл}
nX:Integer;{Количество вершин в графе}
nU:Integer;{Количество ребер в графе}
Mark:TypeVertex; {Метки принадлежности вершин}
x:TypeVertex;{Список вершин графа}
U:TypeRib;{Реберный список графа }
nUo:Integer;{Количество ребер в оставном дереве}
Uo:TypeRib;{Ребра оставного дерева}
We:TypeRib;{Веса ребер графа}
Wt:LongInt;{Вес минимального оставного дерева}
Procedure Init;{Переназначение меток вершин}
Var
i,j,m:Integer;
begin
for i:=1 to 2*nU do Uo[i]:=1;
for i:=1 to 2*nU do
for j:=i+1 to 2*nU do if Uo[j]=1 then
if U[j]=U[i] then Uo[j]:=0;
nX:=0;
for i:=1 to 2*nU do
if Uo[i]=1 then begin
nX:=nX+1;
X[nX]:=U[i];
end;
for i:=1 to 2*nU do {Новые метки}
for m:=1 to nX do
if U[i]=X[m] then begin U[i]:=m; break; end;
end; 
Procedure Sort; {Сортировка списка ребер по их весам}
Var
i,j,k:Integer;
w:Integer;
begin
for i:=1 to nU do
for j:=1 to nU-i do
if We[j]>We[j+1] then begin
w:=We[j]; We[j]:=We[j+1]; We[j+1]:=w;
w:=U[2*j-1]; U[2*j-1]:=U[2*(j+1)-1];
U[2*(j+1)-1]:=w;
w:=U[2*j]; U[2*j]:=U[2*(j+1)]; U[2*(j+1)]:=w;
end; 
end;
Procedure Ostov;{Строим минимальное оставное дерево}
Var
i,x,y,z:Integer;
sU:Integer;
begin
for i:=1 to nX do Mark[i]:=i;
Sort;{Сортировка ребер по весу}
nUo:=0;{Пустое множество Uo}
sU:=1;{Начальное ребро в сортированном U}
while nUo<nX-1 do begin
x:=U[2*sU];{Выбор нового ребра из списка}
y:=U[2*sU-1];
if Mark[x]<>Mark[y] then begin
nUo:=nUo+1;
Uo[nUo]:=sU;{Добавить ребро в оставное дерево}
z:=Mark[y];{Слияние Ux и Uy}
for i:=1 to nX do if Mark[i]=z then
Mark[i]:=Mark[x];
end;
sU:=sU+1{Удалить ребра (x,y) из списка U }
end;
end;
Var{Main}
i,j:Integer;
Begin{Main}
Assign(f,'C:\hvvod.txt');
Reset(f);{Файл открыт для чтения}
Read(f,nU);{Количество ребер в реберном списке графа }
for i:=1 to nU do Read(f,U[2*i-1]);{Первые вершины ребер}
for i:=1 to nU do Read(f,U[2*i]);{Вторые вершины ребер}
for i:=1 to nU do Read(f,We[i]);{Вес ребер}
Close(f);
Assign(f,'C:\hvivod.txt');
Rewrite(f); {Файл открыт для чтения}
Init;
Sort;
WriteLn(f,'nU=',nU:3);
WriteLn(f,'nX=',nX:3);
Write(f,'X='); for i:=1 to nX do Write(f,X[i]:3);
WriteLn(f); Write(f,'u1=');
for i:=1 to nU do Write(f,X[U[2*i-1]]:3);
WriteLn(f); Write(f,'u2=');
for i:=1 to nU do Write(f,X[U[2*i]]:3);
WriteLn(f); Write (f,'We=');
for i:=1 to nU do Write(f,We[i]:3);WriteLn(f);
Ostov;
Write(f,'uo1=');
for i:=1 to nUo do Write(f,X[U[2*Uo[i]-1]]:3);
WriteLn(f);Write(f,'uo2=');
Write(f,'uo1=');
for i:=1 to nUo do Write(f,X[U[2*Uo[i]-1]]:3);
WriteLn(f);Write(f,'uo2=');
for i:=1 to nUo do Write(f,X[U[2*Uo[i]]]:3);
WriteLn(f); Write(f,'Woe=');
for i:=1 to nUo do Write(f,We[Uo[i]]:3);WriteLn(f);
Wt:=0;
for i:=1 to nUo do Wt:=Wt+We[Uo[i]];
Write(f,'Bec=',Wt:3);
Close(f);
end.{Main}

Последний раз редактировалось Stilet; 09.12.2011 в 09:07.
madman797 вне форума Ответить с цитированием
Старый 09.12.2011, 09:02   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

crossposting..

И в двух постах ни разу не показал содержимое входного файла.. Ты полагаешь, мы тут телепаты?
Могу только повторить то, что тебе уже сказала программа: неправильно написано число в файле.

Не ставить теги кода на форуме - все равно что лить суп гостям прямо на стол.. Тебе два клика жалко?
From Stilet: Я поправил оформление
Предпочитаю на "ты".

Последний раз редактировалось Stilet; 09.12.2011 в 09:12.
TinMan вне форума Ответить с цитированием
Старый 09.12.2011, 09:10   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно выдает. Ты из файла пытаешся считать данные, и преобразовать их в число, но строку nU= 0 в число преобразовать нельзя.
Делай по такому принципу:
Код:
var s:string;e:integer;
...
readln(f,s);
val(trim(copy(s,pos(' ',s)+1,length(s))),nu,e);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2011, 10:22   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Правильно выдает. Ты из файла пытаешся считать данные, и преобразовать их в число, но строку nU= 0 в число преобразовать нельзя.
Виталик, речь не про тот файл.. Это файл hvivod.txt, а то - hvvod.txt.
ТС не дал содержимое входного файла.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
invalid numeric input Fri Помощь студентам 5 13.11.2011 15:05
Invalid numeric input ДениC Общие вопросы Delphi 4 03.04.2011 12:49
Invalid numeric format _-Re@l-_ Общие вопросы Delphi 3 22.12.2010 15:49
error:invalid filename Pascal Chibi Помощь студентам 11 29.11.2010 18:12