2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 помогите. не выводятся буквы из множества. delphi
Сообщение17.05.2011, 22:17 
Аватара пользователя
program Project2;
{$R+,I+,Q+}
{$APPTYPE CONSOLE}

uses
SysUtils;

Const
ZRB=['À'..'ß','¨'];

Type
Mn=set of char;


Var
c, nach,beg,bukv: char;
w1,w2: set of char;
posl: Boolean;
a: array [1..10000] of Mn;
b: array[1..10000] of char;
s: string;
i,k,toch: byte;


begin
{Вычислить значение выражения, состоящего из символьных множеств, содержащих только заглавные русские буквы, и знаков операций "+","-","*". Апострофы при вводе и выводе не задаются. Например: ‘[Б..Н,Р..Х,Ы..Э]*[В,Г,Д,З..К,Ц..Я]-[М..Ф,Ч..Ь]’ = ‘[Б..Д,Э,З..К]’}
Reset(input,'input.txt');
Rewrite(output,'output.txt');
While not SeekEof do Begin
Read(c);
If ord(c)=93 then w1:=w1+[bukv];
If ord(c)=91 then w1:=[]; // åñëè ñ ÿâë-ñÿ - [
If (c in ZRB) and (toch=2) then Begin
nach:=bukv;
bukv:=#0;
For beg:= nach to c do w1:=w1+[beg];
toch:=0;
End
Else
If c in ZRB then bukv:=c;
If (ord(c)=44) and (toch<>2) then Begin // åñëè ñ ÿâë-ñÿ - ,
w1:=w1+[bukv];
bukv:=#0;
End;
If ord(c)=46 then toch:=toch+1; // åñëè ñ ÿâë-ñÿ - .
End;
For i:=192 to 223 do
if Chr(i) in w1 then Write(chr(i)+' ')

end.


а на выходе - дикое не пойми что.(

 
 
 
 Re: не выводятся буквы из множества. delphi
Сообщение17.05.2011, 22:41 
Наверное, что-то с кодировками.

Если Вы вызываете программу из консоли Windows то может помочь сделать так:

1) щелкнуть правой кнопкой на заголовке окна консоли, выбрать Свойства -> Шрифты -> Lucida
2) набрать команду chcp 1251
3) запустить программу.

Если не получится, то на шаге 2 можно попробовать написать chcp 65001.

 
 
 
 Re: помогите. не выводятся буквы из множества. delphi
Сообщение17.05.2011, 23:29 
Аватара пользователя
я читаю данные из файла, а не консоли...
мб адаптируете совет?)

 
 
 
 Re: помогите. не выводятся буквы из множества. delphi
Сообщение18.05.2011, 00:55 
А выводите куда?

 
 
 
 Re: помогите. не выводятся буквы из множества. delphi
Сообщение19.05.2011, 18:40 
2Anka969
Основная проблема в том, что вы не удовлетворили всей спецификации. Рекомендую вам начать сначала, аккуратно шаг за шагом наращивая функциональность вашего интерпретатора.

Возможно, вместо конечно-автоматного подхода (конструкции из if'ов и case'ов) здесь лучше всего будет смотреться простой рекурсивно-нисходящий парсер (см. вики). Сначала напишите простейший калькулятор, вычисляющий выражения типа "a*b-b/c+d", далее напишите парсер для ваших множеств, т.е. строк вида "[A..B, F, J..Z]". Потом объедините эти парсеры, т.е. в парсере арифметического выражения вызывайте для разбора терминала второй парсер выражения-множества ("арифметические" операции при этом перейдут в теор-множественные).

Результатом работы парсеров, как вы и задумали, могут быть нативные паскалевские множества; алгоритм отображения результатов у вас тоже (почти) правильный (хотя его придется усовершенствовать, чтобы вместо "A, B, C, D" выводилось "A..D").

Ещё одно замечание: не злоупотребляйте функциями ord и chr, ведь char -- это порядковый тип и вполне можно писать что-то вроде for c:='A' to 'Z' do if c in w1 then write(c) или уж тем более не If ord(c)=93, а просто if c='A'.

Надеюсь, разберетесь...

 
 
 
 Re: помогите. не выводятся буквы из множества. delphi
Сообщение19.05.2011, 19:51 
Аватара пользователя
спасибо огромное. справилась.
+действительно алгоритм считывания был немного не правильный(

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group