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

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

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

 
 Ответить  Открыть новую тему 
> задача на работу с файлами и строками
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: 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 -


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


Профи
****

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

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


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


поиск
****

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

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


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


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


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

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

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


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

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


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


поиск
****

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

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



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


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


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


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

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

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


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


поиск
****

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

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


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


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 24.10.2021 7:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name