Помогите, пожалуйста, написать программу с символьными данными
Вводится текст в виде списка слов, разделенных запятыми, и заканчивающийся точкой (в слове не более 10 литер, в тексте не более 20 слов). Напишите про-грамму, выводящую упорядоченный в алфавитном порядке перечень слов (без по-вторений) с указанием, сколько раз такое слово встречалось в тексте.
|
Так как не написали на чём писать, сделал в Pascal.
const n=20; type Z= array[1..n] of string; var f,f1: Text; s,s1: string; c: char; j,i,t: byte; A: Z; begin Readln(s); Assign(f,'Text_in.txt'); Rewrite(f); Writeln(f,s); Reset(f); s1:=''; t:=1; While not Eof(f) do Readln(f,s); for i:=1 to Length(s) do begin c:= s[i]; if (c<>',') and (c<>'.') then s1:= s1+c else begin A[t]:= s1; Inc(t); s1:=''; if (t>n) then Break; end; end; for i:=1 to n-1 do for j:=1 to n-i do if A[j]>A[j+1] then begin s:= A[j]; A[j]:= A[j+1]; A[j+1]:= s end; Assign(f1,'Text_out.txt'); Rewrite(f1); i:=1;t:=1; repeat if A[i]=A[i+1] then begin Inc(t); Inc(i) end else begin Writeln(f1,A[i],'-',t); t:=1; Inc(i) end; until i>n; Close(f); Close(f1); end. |
да, мне нужно было в Pascal! спасибо за помощь, а не подскажите ещё, что мне нужно ввести после того как внизу экрана у меня появляется поле "ввод данных" ?
|
Вводите строку из слов через запятую, а в конце ставите точку. В условии про пробелы ничего не сказано и их использовать не стоит.
|
Вложений: 1
он мне уже в который раз ошибку выдаёт(
|
а это все глючный ABC. вроде ранее советовали изменить описание массива. на что то вроде type Z= array[1..n] of string[10];
|
всё рввно не получается( tehno015
|
У меня Free Pascal и всё работает.
Немрого подправил( на случай если слов меньше 20): const n=20; type Z= array[1..n] of string; var f,f1: Text; s,s1: string; c: char; j,i,t: byte; A: Z; begin Readln(s); Assign(f,'Text_in.txt'); Rewrite(f); Writeln(f,s); Reset(f); s1:=''; t:=1; While not Eof(f) do Readln(f,s); for i:=1 to Length(s) do begin c:= s[i]; if (c<>',') and (c<>'.') then s1:= s1+c else begin A[t]:= s1; Inc(t); s1:=''; if (t>n) then Break; end; end; for i:=1 to n-1 do for j:=1 to n-i do if A[j]>A[j+1] then begin s:= A[j]; A[j]:= A[j+1]; A[j+1]:= s end; Assign(f1,'Text_out.txt'); Rewrite(f1); i:=1;t:=1; s1:=''; repeat if A[i]=s1 then Inc(i) else if A[i]=A[i+1] then begin Inc(t); Inc(i) end else begin Writeln(f1,A[i],'-',t); t:=1; Inc(i) end; until i>n; Close(f); Close(f1); end. |
всё равно ошибку выдаёт(
|
Цитата:
Вот Вы ставите цикл с постусловием: repeat if A[i]=s1 then Inc(i) else if A[i]=A[i+1] then begin Inc(t); Inc(i) end else begin Writeln(f1,A[i],'-',t); t:=1; Inc(i) end; until i>n; причем в теле цикла мало того, что допускается это самое i>n, так еще и делается обращение к элементу массива A[i+1]! Тут явный выход за границу массива, о чем транслятор у kris_kaif и верещит. Вероятно, а Вас, Женя, эта проверка (выход индекса массива за пределы диапазона) по умолчанию отключена - вот и создается впечатление, что всё тип-топ. Но ошибку отсутствие проверки не снимает. Поправьте, пожалуйста. |
Часовой пояс GMT +4, время: 16:06. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.