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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2009, 12:32   #1
Milashka_zp
Пользователь
 
Аватар для Milashka_zp
 
Регистрация: 24.05.2009
Сообщений: 24
Восклицание Текстовые файлы

Помогите разобраться!
Условие:
Дан файл, содержащий произвольный текст. Выясните, чего в нем больше: букв или цифр.
Мой код:
FT: text;
C: char;
M: set of '0'..'9';
N: set of 'a'..'z';
Begin
Assign(FT,'Text.txt');
Reset(FT);
While not Eof(FT)
begin
ReadLn(FT,C);
end;
close(FT);
end.
Вопросы:
1.Как можно обратиться к каждому элементу файла, для того чтоб подсчитать чего больше букв или цифр.
2.Должен ли паскаль выводить содержимое файла при получении результата?

Последний раз редактировалось Milashka_zp; 24.05.2009 в 13:33.
Milashka_zp вне форума Ответить с цитированием
Старый 24.05.2009, 16:32   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
1.Как можно обратиться к каждому элементу файла, для того чтоб подсчитать чего больше букв или цифр.
Объявите файл как file of char.
И считывайте файл посимвольно:
Код:
while not eof(FT) do
 begin
 read(FT,c);
 { тут проверяете, цифра или буква }
 end;
Цитата:
2.Должен ли паскаль выводить содержимое файла при получении результата?
Думаю, не нужно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.05.2009, 18:49   #3
Milashka_zp
Пользователь
 
Аватар для Milashka_zp
 
Регистрация: 24.05.2009
Сообщений: 24
Сообщение

Я переделала программу:

FT: file of char;
C: char;
N: set of 'a'..'z';
k,m: integer;
Begin
Assign(FT, 'text.txt');
Reset(FT);
k:=0;
m:=0;
While not Eof(FT)
Read(FT,C);
if (C in N) then
m:=m+1
else
k:=k+1;
if m>k then writeln('Букв больше')
else writeln('Цифр больше');
close(FT);
end.

Программа постоянно выбивает, "Цифр больше"!
Не могу найти ошибку, помогите!
Я первый раз сталкиваюсь с файлами в паскале, поэтому подозреваю, что проблема в строке "if (C in N) then".
Повторяюсь что я впервые сталкиваюсь с файлами, поэтому я не могу понять что копируется в переменную "С"!
Milashka_zp вне форума Ответить с цитированием
Старый 24.05.2009, 18:57   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Повторяюсь что я впервые сталкиваюсь с файлами, поэтому я не могу понять что копируется в переменную "С"!
Код:
Read(FT,C);
читает очередной (один!) символ из файла.
Не забывайте, что в файле, кроме цифр и букв, есть пробелы и символы перевода строки.

Цитата:
Программа постоянно выбивает, "Цифр больше"!
Эта программа вообще не скомпилируется. Вы ее запускали?

Код:
uses crt;
var
FT: file of char;
C: char;
k,m: integer;

Begin
clrscr;
Assign(FT, 'test.txt');
Reset(FT);
k:=0;
m:=0;
While not Eof(FT) do
 begin
 Read(FT,c);
 if c in ['a'..'z','A'..'Z'] then inc(m)
 else if c in ['0'..'9'] then inc(k);
 end;

if m>k then writeln('Bukv bolshe')
else writeln('cifr bolshe');

close(FT);
readln;
end.
------------
Код заключайте в теги CODE!
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.05.2009, 19:16   #5
Milashka_zp
Пользователь
 
Аватар для Milashka_zp
 
Регистрация: 24.05.2009
Сообщений: 24
По умолчанию

Большое спасибо, я поняла свою ошибку!
А та программа запускалась, но содержимое переменной N принемало за число, поэтому и выбивало "цифр больше"
Milashka_zp вне форума Ответить с цитированием
Старый 24.05.2009, 19:19   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Milashka_zp
но содержимое переменной N принемало за число, поэтому и выбивало "цифр больше"
"Цифр больше" выбивало потому что у вас любой символ, не являющийся буквой, принимался за цифру.
Хотя сложно судить, т.к. вы, похоже, выложили измененный (не рабочий) код.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовые файлы. alex-2009 Помощь студентам 2 14.04.2009 15:52
Текстовые файлы ponchikpk Помощь студентам 1 23.03.2009 22:02
текстовые файлы lusuj Помощь студентам 3 20.11.2008 19:18
Текстовые файлы на С Raptor Общие вопросы C/C++ 15 26.01.2008 21:06