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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2008, 01:58   #1
Lassard
 
Регистрация: 17.11.2008
Сообщений: 4
Вопрос Работа с строками в Delphi.

Всем доброй ночи

Нужна помочь, дали брату задание по программированию, суть задания такова:
Есть исходник на Паскале, но без раздела описи данных (var) но с переменными и присвоенными им значениями, надо восстановить раздел описи и присвоить переменным соответствующие типы данных, тоесть получить рабочий код.

Вижу такое решение:
-поиск в исходном коде - копирование - вставка в конечный код, но что искать?
- и как определить тип данных? по попаданию в диапазон? или каким то другим условием?

Жду Ваших советов
Lassard вне форума Ответить с цитированием
Старый 17.11.2008, 07:55   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

для начала исходник можно глянуть
SERG1980 вне форума Ответить с цитированием
Старый 17.11.2008, 08:15   #3
Lassard
 
Регистрация: 17.11.2008
Сообщений: 4
По умолчанию

Дело в том что исходник может быть любой, просто задание так звучит, а программа должна работать с любым исходником на Паскале.
Lassard вне форума Ответить с цитированием
Старый 17.11.2008, 08:54   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вам нужно написать урезаннный лексический анализатор.
читайте литературу/ищите примеры...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.11.2008, 19:04   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

y:=r+5.2;

получаем y: real(double,extended)

s:=cv+'345';

s: string;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.11.2008, 05:34   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы упростил задачу:
Цитата:
Есть исходник на Паскале, но без раздела описи данных (var) но с переменными и присвоенными им значениями
т.е. оставить чистое присвоение переменным КОНСТАНТ (без использования функций и выражений!). например:
y:=12.5;
i:=1;
s:='stroka';
a[i]:=True;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2008, 02:08   #7
Lassard
 
Регистрация: 17.11.2008
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я бы упростил задачу:

т.е. оставить чистое присвоение переменным КОНСТАНТ (без использования функций и выражений!). например:
y:=12.5;
i:=1;
s:='stroka';
a[i]:=True;
Да, но после работы программы, мы должны получить полностью рабочий код паскалевской программы в которой уже будет раздел описи (var), который будет содержать, (беру с Вашего примера)
var y:real;
i:integer; s:string; a:array of boolean;
Lassard вне форума Ответить с цитированием
Старый 21.11.2008, 13:27   #8
Lassard
 
Регистрация: 17.11.2008
Сообщений: 4
По умолчанию

вот попробовал решить так:
function MyPos(const FindStr, SourceString: PChar; Num: Integer): PChar;
begin
Result := AnsiStrPos(SourceString, FindStr);
if (Result = nil) then
Exit; //Подстрока не найдена
Inc(Result);
if Num = 1 then
Exit;
if num > 1 then
Result := MyPos(FindStr, Result, num - 1);

end;

begin
FirstSym := PChar(SourceString);

Result := MyPos(PChar(FindStr), PChar(SourceString), Num) - FirstSym;

if Result < 0 then
Result := 0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
StrF, StrSrc,buf: string;
n,m,i: Integer;

begin
StrF:=':=';
m:=memo1.Lines.Count;
for i:=0 to m do
begin
strsrc:=memo1.Lines.Strings[i];
n := SearchString(StrF, StrSrc,0);
if n >0 then begin
buf:=copy(memo1.Lines.Strings[i],0,n-1);
end;
end;
end;
находим строку :=, а дальше берем копируем переменную, что поместить в var, а как отделить числовое значения переменной? и проверить его тит даных?

проверял вот на етом:


begin
x:=2.23;
y:=2.63;
z:=8.45;
a:=x+y+z;
end;


мож кто то что посоветует?

Последний раз редактировалось Lassard; 21.11.2008 в 13:57. Причина: дооформил
Lassard вне форума Ответить с цитированием
Старый 21.11.2008, 18:27   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

как узнать что это комментарий?
как отличить значения от операций?
как отличить строку(символ) от числа?
как отличить целое число от вещественного?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками GoAnd Общие вопросы по Java, Java SE, Kotlin 9 22.09.2010 03:36
Работа со строками. Delphi defeat Помощь студентам 4 10.01.2008 13:39
[С++]работа со строками Федор Помощь студентам 6 23.12.2007 12:35