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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2008, 22:51   #1
serguna005
 
Регистрация: 05.12.2008
Сообщений: 4
По умолчанию Лексический анализатор

Помогите довести программу до ума.
Цель программы проанализировать текс из текта выделить только числа, но у меня проблемы, если в начале и в конце текста стоят цифры они не выводятся, и если рядом с цифрой стоит буква(),то эти цифры тоже не выводятся.Прошу помогите завтра на зачет идти....

Вот текст проги

program ton;
uses crt;
var
t1,t2:text;
i,i1,n,glob,k:integer;
s:string;
st,str:string;
const
inter=['0'..'9',','];
begin
clrscr;
Assign(t1,'C:\text.txt');
Assign(t2,'C:\text2.txt');
Reset(t1);
Rewrite(t2);
while not eof(t1) do
Readln(t1,s);
st:='';
n:=0;
i:= 0;

for i:=0 to length(s) do
begin
if s[i]<>' ' then begin
st:=st+s[i];
end else
begin
glob:=i;
n:=n+1;
k:=0;
i1:=1;
for i1:=1 to length(st) do
begin
if st[i1] in inter
then k:=k+1;
end;
if k=length(st) then begin
i:=1;
k:=0;
for i:=1 to length(st) do
if st[i]=',' then
k:=1;
writeln(t2,'nomer ',n,' znachenie ',st);
if k=0 then
begin
writeln(t2,' tip integer');
writeln(t2);
end else
begin
writeln(t2,' tip real');
writeln(t2);
end;
end;
st:='';
i:=glob;
end;end;
Close(t1);Close(t2);
end.
serguna005 вне форума Ответить с цитированием
Старый 05.12.2008, 23:20   #2
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
По умолчанию

для начала
while not eof(t1) do
Readln(t1,s);
в этом фрагменте читается только последняя строчка файла
Викдон вне форума Ответить с цитированием
Старый 05.12.2008, 23:23   #3
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
По умолчанию

Цель программы проанализировать текс из текта выделить только числа. Т.е записать в другой файл эти числа?
Викдон вне форума Ответить с цитированием
Старый 05.12.2008, 23:35   #4
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Перед

Readln(t1,s);

должен начинаться составной оператор, а то обрабатывает только последнюю строку в text.txt.

Если в конце строки стоит цифра, программа ее не выводит. Это потому, что после того как число записалось в st должна идти проверка

if s[i]<>' '

Но она не происходит, т.к. i>length(s) - строка s закончилась.

Если с числом стоит буква, программа его не выводит. Буква не принадлежит множеству inter, следовательно условие

k=length(st)

будет равно FALSE - программа число не выведет.
Сергей089 вне форума Ответить с цитированием
Старый 05.12.2008, 23:38   #5
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

В окно Watch закинь свои переменные и условия.
Прогони программу клавишей F7 и найдешь свои ошибки.
Сергей089 вне форума Ответить с цитированием
Старый 06.12.2008, 00:00   #6
serguna005
 
Регистрация: 05.12.2008
Сообщений: 4
По умолчанию

Викдон, да именно так...
serguna005 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксический анализатор delphin100 Общие вопросы Delphi 10 01.05.2010 12:50
Анализатор формул KJIOyH Помощь студентам 1 05.11.2007 18:18