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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2012, 12:00   #1
PersonUnknown
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 19
Восклицание Паскаль -> Делфи

Вот есть программка которая решает криптарифметические задачи в паскале.
(пример - пишешь "два+три=пять" и оно находит все решения числовые.)
Хочется сделать визуальную оболочку в делфи, но в делфи не хочет искать решения, кто разберётся, помогите.
Код:
uses crt;
const
Alph: set of char= ['A'..'Z']+['Ђ'..'џ'];
Rus: array ['Ђ'..'џ'] of char = '*ЎўЈ¤Ґ¦§Ё©Є«¬*®Їабвгдежзийклмноп';

type
tCS= set of char;
tBS= set of byte;

var
d: array ['A'..'џ'] of byte;
n: longint;
s:string;
i,m: integer;
Letters: set of char;
f:text;

procedure Next(i: integer; a,b,x: longint; Op: char; UsedC: tCS; UsedD: tBS);
procedure Calculate(c: char);
begin{calculate}
case Op of
'+': a:= a+x;
'-': a:= a-x;
'*': a:= a*x;
'/': a:= a div x;
end;
if c='=' then begin
Op:='+';
b:=a;
a:=0;
end
else Op:=c;
x:=0
end;{calculate}
var
j: integer;
begin{next}
if i>Length(s) then begin
Calculate(' ');
if a=b then begin
for j:=1 to Length(s) do if s[j] in Alph then write(f,d[s[j]]) else write(f,s[j]);
writeln(f);
Inc(n)
end
end
else case s[i] of
'A'..'Z','Ђ'..'џ': if s[i] in UsedC then begin
if (x>0) or (d[s[i]]>0) then Next(i+1,a,b,x*10+d[s[i]],Op,UsedC,UsedD)
end
else for j:=0 to 9 do if not (j in UsedD) then begin
d[s[i]]:=j;
Next(i,a,b,x,Op,UsedC+[s[i]],UsedD+[j])
end;
'0'..'9': Next(i+1,a,b,x*10+Ord(s[i])-48,Op,UsedC,UsedD);
'+','-','*','/','=': begin
Calculate(s[i]);
Next(i+1,a,b,x,Op,UsedC,UsedD)
end;
else Next(i+1,a,b,x,Op,UsedC,UsedD)
end
end;{next}

begin clrscr; {main}
assign(f,'solutions.txt');
rewrite(f);
if s='' then begin
write('‚ўҐ¤ЁвҐ д®а¬г«Ёа®ўЄг ॡгб*: ');
readln(s)
end
else WriteLn('ђҐи*Ґ¬ ॡгб: ',s);
for i:=1 to Length(s) do begin
s[i]:=UpCase(s[i]);
case s[i] of
'*'..'Ї': Dec(s[i],32);
'а'..'п': Dec(s[i],80)
end
end;

for i:=1 to Length(s) do
if (s[i] in Alph) and not (s[i] in Letters) then begin
Inc(m);
Letters:= Letters+[s[i]]
end;
writeln('‚ ўла*¦Ґ*ЁЁ ᮤҐа¦Ёвбп ',m,' а*§«Ёз*ле ЎгЄў');
if m<=10 then begin
n:=0;
Next(1,0,0,0,'+',[],[]);
writeln('**©¤Ґ*® ',n,' аҐиҐ*Ё©, ᬮваЁ ў д*©«Ґ solutions.txt')
end
else writeln('‡*¤*з* *Ґа*§аҐиЁ¬*');
close(f);
readln
end.
В паскале работает, а в делфи не хочет...

Последний раз редактировалось Stilet; 18.02.2012 в 13:01.
PersonUnknown вне форума Ответить с цитированием
Старый 18.02.2012, 12:04   #2
PersonUnknown
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 19
По умолчанию

Почему так сложно скопировать сюда код программы, то казюбрики то неправильно буква "а" работает в коде...
Вот сама програмка - http://zalil.ru/32729307
PersonUnknown вне форума Ответить с цитированием
Старый 18.02.2012, 13:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это консольная программа, и в Делфи ее нужно вставлять в консольный проект, при условии что будут убраны несовместимые с Делфи операции, типа uses crt или clrscr
Если же ты хочешь сделать оконку то тебе однозначно нужно начать читать книги по Делфи, потому как для оконки код не подходит, его нужно радикально менять.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2012, 13:57   #4
PersonUnknown
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 19
По умолчанию

Код изначально писался в делфи, потом очистка экрана для паскаля была сделана, но в паскале программа работает а в консоле делфи нет...
PersonUnknown вне форума Ответить с цитированием
Старый 18.02.2012, 14:22   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а в консоле делфи нет...
Все работает в консоли. вот результат:
Цитата:
Введите формулировку ребус*: огого блин
В выр*же*ии содержится 6 р*злич*ых букв
**йде*о 0 реше*ий, смотри в ф*йле solutions.txt
файл так же сформировался нормально.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2012, 14:42   #6
PersonUnknown
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 19
По умолчанию

Отлично, а у меня в консоле не работает, находит сколько букв и всегда пишет 1 решение без создания файла...
delphi 7

Просто это работа на МАН, хотелось бы чтобы она в оболочке была..

Слышал, что есть люди которым нечем заняться, шляются по форумам ища при этом новые головоломки.
Пожалуйста, запихните эту программку в делфи, буду очень признателен..
Цитата:
Сообщение от Stilet Посмотреть сообщение
его нужно радикально менять.
Со мной ребята говорили что это дело 10-20 минут(

Сколько пытался, всегда разные ошибки, поэтому обращаюсь к Вам..

Последний раз редактировалось Stilet; 18.02.2012 в 19:46.
PersonUnknown вне форума Ответить с цитированием
Старый 18.02.2012, 19:49   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
есть люди которым нечем заняться
Ну что ж... Подождем. Может кому-то и нечем заняться в этот вечер...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2012, 20:13   #8
PersonUnknown
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну что ж... Подождем. Может кому-то и нечем заняться в этот вечер...
Искренне надеюсь, сдать работу надо уже в это понедельник
PersonUnknown вне форума Ответить с цитированием
Старый 18.02.2012, 21:33   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чет не понял в чем проблема. Бросил в консольное приложение почти один в один и получил
Код:
Введите формулировку ребуса: два+три=пять
В выражении содержится 9 различных букв
найдено 180 решений, смотри в файле solutions.txt
в т.ч. в solutions.txt кучу всякого типа 236+849=1085

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
Alph: set of char= ['A'..'Z']+['Ђ'..'џ'];
Rus: array ['Ђ'..'џ'] of char = ' ЎўЈ¤Ґ¦§Ё©Є«¬*®Їабвгдежзийклмноп';

type
tCS= set of char;
tBS= set of byte;

var
d: array ['A'..'џ'] of byte;
n: longint;
s:string;
i,m: integer;
Letters: set of char;
f:text;

procedure Next(i: integer; a,b,x: longint; Op: char; UsedC: tCS; UsedD: tBS);
procedure Calculate(c: char);
begin{calculate}
case Op of
'+': a:= a+x;
'-': a:= a-x;
'*': a:= a*x;
'/': a:= a div x;
end;
if c='=' then begin
Op:='+';
b:=a;
a:=0;
end
else Op:=c;
x:=0
end;{calculate}
var
j: integer;
begin{next}
if i>Length(s) then begin
Calculate(' ');
if a=b then begin
for j:=1 to Length(s) do if s[j] in Alph then write(f,d[s[j]]) else write(f,s[j]);
writeln(f);
Inc(n)
end
end
else case s[i] of
'A'..'Z','Ђ'..'џ': if s[i] in UsedC then begin
if (x>0) or (d[s[i]]>0) then Next(i+1,a,b,x*10+d[s[i]],Op,UsedC,UsedD)
end
else for j:=0 to 9 do if not (j in UsedD) then begin
d[s[i]]:=j;
Next(i,a,b,x,Op,UsedC+[s[i]],UsedD+[j])
end;
'0'..'9': Next(i+1,a,b,x*10+Ord(s[i])-48,Op,UsedC,UsedD);
'+','-','*','/','=': begin
Calculate(s[i]);
Next(i+1,a,b,x,Op,UsedC,UsedD)
end;
else Next(i+1,a,b,x,Op,UsedC,UsedD)
end
end;{next}

begin
  { TODO -oUser -cConsole Main : Insert code here }

assign(f,'solutions.txt');
rewrite(f);
if s='' then begin
write('‚ўҐ¤ЁвҐ д®а¬г«Ёа®ўЄг ॡгб : ');
readln(s)
end
else WriteLn('ђҐи Ґ¬ ॡгб: ',s);
for i:=1 to Length(s) do begin
s[i]:=UpCase(s[i]);
case s[i] of
' '..'Ї': Dec(s[i],32);
'а'..'п': Dec(s[i],80)
end;
end;

for i:=1 to Length(s) do
if (s[i] in Alph) and not (s[i] in Letters) then begin
Inc(m);
Letters:= Letters+[s[i]]
end;
writeln('‚ ўла ¦Ґ*ЁЁ ᮤҐа¦Ёвбп ',m,' а §«Ёз*ле ЎгЄў');
if m<=10 then begin
n:=0;
Next(1,0,0,0,'+',[],[]);
writeln('* ©¤Ґ*® ',n,' аҐиҐ*Ё©, ᬮваЁ ў д ©«Ґ solutions.txt')
end
else writeln('‡ ¤ з  *Ґа §аҐиЁ¬ ');
close(f);
readln

end.
ADD При переводе в оконное приложение не забудьте все символы досовской кириллицы перевести в кириллицу винды
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.02.2012 в 23:26.
Аватар вне форума Ответить с цитированием
Старый 19.02.2012, 12:56   #10
PersonUnknown
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 19
По умолчанию

Кто-нибудь возмётся за это дело?
Тому кто хоть раз такое делал, намного легче будет перевести програмку на делфи..

Последний раз редактировалось PersonUnknown; 19.02.2012 в 15:24.
PersonUnknown вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ в паскаль. Трактовка кода c++ в делфи Человек_Борща Общие вопросы Delphi 1 02.07.2011 11:52
Делфи или паскаль МАРА90 Помощь студентам 1 09.12.2010 21:47
Паскаль и Делфи laluna Помощь студентам 1 08.09.2010 16:32
Паскаль в Делфи... Vremya-Dengy Общие вопросы Delphi 15 26.01.2009 04:32
Делфи или Паскаль LLIypLLIyH Помощь студентам 9 28.05.2008 18:22