Дана последовательность до 30 слов, в каждом из которых от 1 до 5 символов, между словами - пробел или запятая, в конце последовательности точка. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность. Использовать входной и выходной файл. Как сделать эту задачу без использования подпрограмм (напр, GetWords)?
Пока составил программу, в которой все слова должны состоять из 5 символови (не меньше) и знаки препинания выводятся вместе со словами. Помогите доделать задачу.
samec
8.05.2007 15:54
хм, интересный у тебя какой то код.... я вот набросал, но требуются доработки:
program strings; uses crt; const n=30; name1='e:\BP\BIN\lab\s1.out'; name2='e:\BP\BIN\lab\s2.out';
var a:array[1..n] of string[6]; ch:char; i,j,k:integer; f,g:text; kol:array[1..n] of integer;
begin clrscr; assign(g,name1); reset(g); assign(f,name2); rewrite(f); writeln(f,'Laboratornaya rabota 2. Simvilniye massivi i stroki'); writeln(f,'Posliedovatielnost slov'); i:=1; j:=1; while not Eof(g) and (i<=n) do begin read(g,ch); if(ch=' ')or(ch=',') then inc(i) else if (ch='.') then break else a[i]:=a[i]+ch; end; for j:=1 to n do kol[j]:=0;
for j:=1 to i do for k:=1 to i do if a[j]=a[k] then inc(kol[j]);
writeln(f,'Razlichniye slova v posliedovatielnosti i ij kolichestvo'); for j:=1 to i do writeln(f,a[j],'-',kol[j]:2); close(f); close(g); end.
во первых, заглавные и строчные буквы считаются разные, во вторых, будет читать из файла, сформированного строго по заданию (длина слов не более 5 символов, разделитель слов или пробел илизапятая (вместе стоять не должны)) в третих, выводит все имеющиеся слова и их количества, надобы дубликаты в конце программы убирать, одновременно подсчитыва количество. Так что есть над чем поработать и самому
Сталкер
10.05.2007 21:39
Скажите, что не так в программе? все слова вместе с числами вхождений стираются, но в введённом предложении присутствуют несколько повторяющихся слов.
Код
program strings; uses crt; const n=30; name1='C:\BP\BIN\2semestr\s1.out'; name2='C:\BP\BIN\2semestr\s2.out';
var a:array[1..n] of string[5]; ch:char; i,j,k:byte; f,g:text; kol:array[1..n] of byte; label t; begin clrscr; assign(g,name1); reset(g); assign(f,name2); rewrite(f); writeln(f,'Laboratornaya rabota 2. Simvilniye massivi i stroki'); writeln(f,'Posliedovatielnost slov'); i:=1; j:=1; while not Eof(g) and (i<=n) do begin read(g,ch); if(ch=' ')or(ch=',') then inc(i) else if (ch='.') then break else a[i]:=a[i]+ch; end; writeln(f,'Razlichniye slova v posliedovatielnosti i ij kolichestvo'); for j:=1 to n do kol[j]:=0; for j:=1 to i+1 do begin for k:=1 to i+1 do if a[j]=a[k] then inc(kol[j]); if a[j]=a[k] then goto t;