Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на работу с файлами и строками
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
MiH@N
задача такая: Дан произвольный русский текст. Проверить каких букв в нем больше: гласных или согласных.
При выполнении задания необходимо текст считать из текстового файла. Результат выполнения программы записать в исходный файл.

вот чтоя нарешал:
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 .
renesko1


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 ;



вроде так ;
Client
А не лучше использовать множества?
renesko1
ну да, но я как то с множесвами не очень сегодня посмотрю.
Sozialist
if g<s then Write (text,V1)
else Write (text,V1);

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

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


В else тоже придется делать проверку на вхождение в множество, тк кроме букв
в файле могут быть другие символы, наверное.
Sozialist
Естественно
renesko1
это я так на всякий случай ... smile.gif
MiH@N
 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.