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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2008, 22:28   #1
MiH@N
 
Регистрация: 21.01.2008
Сообщений: 8
Лампочка задача на работу с файлами и строками

задача такая: Дан произвольный русский текст. Проверить каких букв в нем больше: гласных или согласных.
При выполнении задания необходимо текст считать из текстового файла. Результат выполнения программы записать в исходный файл.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
mas1 : array ['ф','о','у','э','ы','и','я','ё','ю','е'] of char;
mas2 : array ['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ'] of char;
f : text;
mas1 : massiv c glasnimii;
mas2 : massiv c soglsnimi; //инициализиркй их тоже сам
simvol : char;
g : integer;
begin 
assign(f, 'K:\f.txt');
reset(f);
while not eof(f) do begin
  READ(f, cimvol);
  if simvol prinadlechit k mas1 then inc(g); // функцию принадлежности напишешь сам как нмибудь  

  if simvol prinadlechit k mas2 then dec(g);
end;
if g > 0 then writeln('glasnix > soglasnix');
if g < 0 then writeln('soglasnix > glasnix');
if g = 0 then writeln('glasnix = soglasnix' );
end;
end;
надо ли в конце приписать closefile(f) и если надо то перед каким ендом или это не принципиально?


иии...как написать ф-ию принадлежности чёт никак не соображу...допустим надо перегнать текстовый файл в массив, потом берём элемент этого массива a[i, j] и проверяем его на принадлежность к массиву mas1...так чтоль?
MiH@N вне форума Ответить с цитированием
Старый 23.06.2008, 23:17   #2
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

На принадлежность проверять надо, только при использовании массива, вам каждый считанный элемент придется сравнивать со всеми элементами, то есть каждый раз проходится по нему, но я б предложил использовать множества - гораздо удобнее! То есть объявляете два множества: множество согласных и множество гласных букв и проверяете вхождение считанного символа в эти множества. ЗЫ. и инициализировать множества гораздо удобнее, в данном случае!
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 23.06.2008, 23:30   #3
MiH@N
 
Регистрация: 21.01.2008
Сообщений: 8
По умолчанию

У мея с множествами туговато...както не встречался с ними часто в моей небогатой практике...
щас литературку гляну и попробую переделать.

Последний раз редактировалось MiH@N; 23.06.2008 в 23:34.
MiH@N вне форума Ответить с цитированием
Старый 23.06.2008, 23:44   #4
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

Вот код процедуры:
Код:
procedure TForm1.Button1Click(Sender: TObject);  
var
 f: text;
 glas, soglas: set of char;
 ks, kg: integer;
 cimvol: char;
begin
 glas:= ['о','у','э','ы','и','я','ё','ю','е'];
 soglas:= ['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ф'];
 ks:= 0;
 kg:= 0;
 assign(f, 'K:\f.txt');
 reset(f);
while not eof(f) do
 begin
  read(f,cimvol);
  if cimvol in glas then
   inc(kg);
  if cimvol in soglas then
   inc(ks);
 end;
 if ks > kg then
  writeln('glasnix < soglasnix');
 if kg > ks then
  writeln('glasnix > soglasnix');
 if kg = ks then
  writeln('glasnix = soglasnix');
 close(f);
end;
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 23.06.2008, 23:51   #5
MiH@N
 
Регистрация: 21.01.2008
Сообщений: 8
По умолчанию

у мя получается так:
Код:
if f[i] in ['а','е','ё','и','о','у','э','ю','я'] then inc(g) else 
if f[i] in['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ'] then dec(g)
а как правильно описать множество:
Код:
type mnogestva = set of char;
var mno1,mno2 :mnogestva;
begin
mno1:=['а','е','ё','и','о','у','э','ю','я'];
mno2:=['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ'];
так будет правильно?
MiH@N вне форума Ответить с цитированием
Старый 23.06.2008, 23:55   #6
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

Смотрите пост выше, там все описано! Объявление множеств:
Цитата:
glas, soglas: set of char;
Инициализация:
Цитата:
glas:= ['о','у','э','ы','и','я','ё','ю','е'];
soglas:= ['б','в','г','д','ж','з','й','к','л' ,'м','н','п','р','с','т','ф','х','ц ','ч','ш','щ','ф'];
И проверка на вхождение:
Цитата:
if cimvol in glas then
inc(kg);
if cimvol in soglas then
inc(ks);
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 24.06.2008, 00:01   #7
MiH@N
 
Регистрация: 21.01.2008
Сообщений: 8
По умолчанию

Пасиба...я пока читал литературку да обдумывал не заметил...
Но теперь ошибка выходит в 13 строке [Error] Unit1.pas(37): Incompatible types: 'TPersistent' and 'Text' тобишь Несовместимые типы: 'TPersistent и 'Текст.эт почму?
MiH@N вне форума Ответить с цитированием
Старый 24.06.2008, 00:26   #8
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

Ах, да, извините, совсем забыл, что в Делфи немного иные названия функций, чем в паскале. Замените функции assign и close на assignfile и closefile
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 24.06.2008, 00:44   #9
MiH@N
 
Регистрация: 21.01.2008
Сообщений: 8
По умолчанию

чтото я засиделся...же такое очевидное не замечаю...теперь после запуска выходит ошибка Progect Progect1.exe raised exception class EInOutError message 'I/O error 105'.pROCESS STOPPED/ uSE STEP OR RUN TO CONTINUE
И 24 строка выделяется синим а слева от неё появляется зелёная стрелка.

Последний раз редактировалось MiH@N; 24.06.2008 в 00:47.
MiH@N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача со строками Panda Помощь студентам 8 02.07.2008 09:10
Задачка на работу с символами и строками Go6a Помощь студентам 10 30.03.2008 16:31
задача на сложные действия со строками Converse Паскаль, Turbo Pascal, PascalABC.NET 5 03.01.2008 07:34
Работа с файлами и строками. mituhin Общие вопросы C/C++ 1 06.12.2007 12:53
Задача со строками Klyan Общие вопросы C/C++ 6 21.09.2007 22:22