|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.12.2008, 22:51 | #1 |
Регистрация: 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. |
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 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Перед
Readln(t1,s); должен начинаться составной оператор, а то обрабатывает только последнюю строку в text.txt. Если в конце строки стоит цифра, программа ее не выводит. Это потому, что после того как число записалось в st должна идти проверка if s[i]<>' ' Но она не происходит, т.к. i>length(s) - строка s закончилась. Если с числом стоит буква, программа его не выводит. Буква не принадлежит множеству inter, следовательно условие k=length(st) будет равно FALSE - программа число не выведет. |
05.12.2008, 23:38 | #5 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
В окно Watch закинь свои переменные и условия.
Прогони программу клавишей F7 и найдешь свои ошибки. |
06.12.2008, 00:00 | #6 |
Регистрация: 05.12.2008
Сообщений: 4
|
Викдон, да именно так...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Синтаксический анализатор | delphin100 | Общие вопросы Delphi | 10 | 01.05.2010 12:50 |
Анализатор формул | KJIOyH | Помощь студентам | 1 | 05.11.2007 18:18 |