IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> задача на работу с файлами и строками
MiH@N
сообщение 21.06.2008 19:55
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


задача такая: Дан произвольный русский текст. Проверить каких букв в нем больше: гласных или согласных.
При выполнении задания необходимо текст считать из текстового файла. Результат выполнения программы записать в исходный файл.

вот чтоя нарешал:
procedure TForm1.Button1Click(Sender: TObject);
var text : textFile; V1 : string; i,g,s : integer;
begin
s:=0; g:=0;
assignfile(text,'K:\text.txt');
reset(text);
read(text,V1);
for i:=1 to length(V1) do
case V1[i] of
'а','о','у','э','ы','и','я','ё','ю','е' : g:=g+1;
'б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ' : s:=s+1;

if g<s then Write (text,V1)
else Write (text,V1);

end;
проверьте кто может и укажите ошибки плз.
З.Ы. ошибка выскакивает после
else Write (text,V1);
такая:
[Error] Unit1.pas(40): Constant expression expected.

Но в правильности всего остального сильно неуверен nea.gif
Прошу помочь !mol1.gif .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
renesko1
сообщение 21.06.2008 20:47
Сообщение #2


поиск
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +




f : text ;
mas1 : massiv c glasnimii ;
mas2 : massiv c soglsnimi ; //инициализиркй их тоже сам
simvol : char ;
g : integer ;
begin
assign(f, 'put k text');
reset(f) ;
while not eof(f) do begin
READ(f, cimvol) ;
if simvol prinadlechit k mas1 then inc(g) ; // функцию принадлежности напишешь сам как нмибудь smile.gif
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 ;



вроде так ;

Сообщение отредактировано: renesko1 - 21.06.2008 20:48


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 21.06.2008 21:54
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


А не лучше использовать множества?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
renesko1
сообщение 21.06.2008 21:58
Сообщение #4


поиск
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


ну да, но я как то с множесвами не очень сегодня посмотрю.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sozialist
сообщение 22.06.2008 13:25
Сообщение #5


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


if g<s then Write (text,V1)
else Write (text,V1);

Зачем условие, если ты в любом случае записываешь строку в файл?
Затем ошибка!!!! Строки записываются в файл ПОСИМВОЛЬНО.
Использовать множества можно запросто:
if v1[i] in ['а','е','ё','и','о','у','э','ю','я'] then inc(g) else ...


Сообщение отредактировано: Sozialist - 22.06.2008 13:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
renesko1
сообщение 22.06.2008 13:29
Сообщение #6


поиск
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +



if v1[i] in ['а','е','ё','и','о','у','э','ю','я'] then inc(g) else ...


В else тоже придется делать проверку на вхождение в множество, тк кроме букв
в файле могут быть другие символы, наверное.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sozialist
сообщение 22.06.2008 14:50
Сообщение #7


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


Естественно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
renesko1
сообщение 22.06.2008 15:31
Сообщение #8


поиск
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


это я так на всякий случай ... smile.gif


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MiH@N
сообщение 23.06.2008 10:08
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


 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;
эт конечно глупый вопрос но...что делает dec(g)...я так понимаю он уменьшает...на единицу...чтоли...Правильно ли я понимаю?
и...можно ли былоб сделать так: if simvol prinadlechit k mas2 then inc(d) ; а потом сравнивать d и g ?
...иии...надо ли в конце приписать closefile(f) и если надо то перед каким ендом или это не принципиально?


иии...как написать ф-ию принадлежности чёт никак не соображу...допустим надо открыть файл используя компонент OpenDialog перегнать текстовый файл в массив, потом берём элемент этого массива a[i, j] и проверяем его на принадлежность к массиву mas1...так чтоль?
З.Ы. Оч срочно надо.Помогите кто могёт!

тут бета-версию наклепал не без помощи умеющих...новсё равно ошибка выходит...зацените:
procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile;
glas, soglas: set of char;
ks, kg: integer;
cimvol: char;
begin
glas:= ['о','у','э','ы','и','я','ё','ю','е'];
soglas:= ['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ф'];
ks:= 0;
kg:= 0;
assignfile(f,'L:\text.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');
closefile(f);
end;
строка writeln('glasnix < soglasnix') ; выделяется синим и слева появляется зелёная стелка...и ошибка :Progect Progect1.exe raised exception class EInOutError message 'I/O error 105'.pROCESS STOPPED/ uSE STEP OR RUN TO CONTINUE

Сообщение отредактировано: volvo - 28.11.2009 11:33
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 18:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"