1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Добрый вечер, необходимо написать программу, задание слеудющее:
Создать объект «чтение строки» позволяющий считывать строку введенную с клавиатуры. От объекта чтение строки создать дочерний объект «анализ строки», подсчитывающий частоту, с какой символы встречаются во введенной строке и выводящий результат на экран. От объекта «анализ строки» создать дочерний объект «анализ текста», позволяющий считывать текст из файла и анализировать его.
destructor read_str.done; begin dispose(str); dispose(mas); dispose(flag); dispose(h); end;
constructor analiz_str.init; begin end;
destructor analiz_str.done; begin end;
constructor analiz_text.init; begin end;
destructor analiz_text.done; begin end;
procedure read_str.run; begin
end;
procedure read_str.chtenie; var i:integer; k:integer; stroka_b:string; begin clrscr; for i:=1 to 255 do {read_s^.}mas^[i]:=' '; writeln('vvedite stroky:'); readln(stroka_b); {read_s^.}h^:=0; {read_s^.}h^:=length(stroka_b); for i:=1 to {read_s^.}h^ do begin {read_s^.}mas^[i]:=stroka_b[i]; end; {read_s^.}str^:=stroka_b; end;
procedure analiz_str.run; var s:char; begin {analiz_s^.}flag^:=false; analiz; for s:='a' to 'z' do begin if {analiz_s^.}mas_char_1[s]<>0 then writeln(s,'-',{analiz_s^.}mas_char_1[s]); end; for s:='A' to 'Z' do begin if {analiz_s^.}mas_char_2[s]<>0 then writeln(s,'-',{analiz_s^.}mas_char_2[s]); end; end;
procedure analiz_str.analiz; var s:char; i,j,k:byte; begin if {analiz_s^.}flag^=false then begin for s:='a' to 'z' do mas_char_1[s]:=0; for s:='A' to 'Z' do mas_char_2[s]:=0; chtenie; end; for j:=1 to {read_s^.}h^ do begin case {read_s^.}mas^[j] of 'a'..'z':inc({analiz_s^.}mas_char_1[{read_s^.}mas^[j]]); 'A'..'Z':inc({analiz_s^.}mas_char_2[{read_s^.}mas^[j]]); end; end; end; procedure analiz_text.chtenie; Var f:text; s:char; ch:string[1]; i,j,k,p,m:byte; str2:string; begin readkey; clrscr; {analiz_s^.}flag^:=true; Assign(f,'file.txt'); Reset(f); for s:='a' to 'z' do {analiz_s^.}mas_char_1[s]:=0; for s:='A' to 'Z' do {analiz_s^.}mas_char_2[s]:=0; i:=1; j:=1; k:=1; {read_s^.}h^:=0; while not eof (f) do begin while not eoln (f) do begin {read_s^.}str^:=''; readln(f,{read_s^.}str^); k:=1; for i:=1 to length({read_s^.}str^) do begin {read_s^.}mas^[i]:={read_s^.}str^[i]; write({read_s^.}mas^[i]) end; {read_s^.}h^:=length({read_s^.}str^); analiz_txt; end;
readln(f); end; writeln; for s:='a' to 'z' do begin if {analiz_s^.}mas_char_1[s]<>0 then writeln(s,'-',{analiz_s^.}mas_char_1[s]); end; for s:='A' to 'Z' do begin if {analiz_s^.}mas_char_2[s]<>0 then writeln(s,'-',{analiz_s^.}mas_char_2[s]); end; writeln; end;
procedure analiz_text.run; begin chtenie; end;
procedure analiz_text.analiz_txt; begin analiz; end; var read_s:^read_str; analiz_s:^analiz_str; analiz_t:^analiz_text; begin new(analiz_s,init); new(analiz_t,init); analiz_s^.run; analiz_t^.run; dispose(analiz_t,done); dispose(analiz_s,done); readkey; end.
Трудность заключается в следующем: а именно в процедуре read_str.chtenie; в строчке for i:=1 to 255 do {read_s^.}mas^[i]:=' '; мне необходимо обнулить массив который находится в динамической памяти, т.е. я заменяю все символы пробелом. Если массив расположить в статической памяти, то все работает корректно. Задание именно на объекты и динамическую память. Также если обращаться к переменным или к объектам через переменные (закоментированнно), то так же все работает корректно, но преподователь сказал что нужно обращаться напрямую <имя объекта>.<имя переменной>
Помогите разобраться с данной проблемой, заранее блаодарен.
Сообщение отредактировано: ninja - 12.01.2010 22:23