2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 помогите. не выводятся буквы из множества. delphi
Сообщение17.05.2011, 22:17 
Аватара пользователя


29/12/10
9
Калининград
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 


11/05/11
28
Обнинск
Наверное, что-то с кодировками.

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

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

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

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


29/12/10
9
Калининград
я читаю данные из файла, а не консоли...
мб адаптируете совет?)

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


11/05/11
28
Обнинск
А выводите куда?

 Профиль  
                  
 
 Re: помогите. не выводятся буквы из множества. delphi
Сообщение19.05.2011, 18:40 
Заслуженный участник


26/07/09
1559
Алматы
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 
Аватара пользователя


29/12/10
9
Калининград
спасибо огромное. справилась.
+действительно алгоритм считывания был немного не правильный(

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group