Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки и символьные массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Сталкер
Дана последовательность до 30 слов, в каждом из которых от 1 до 5 символов, между словами - пробел или запятая, в конце последовательности точка. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность. Использовать входной и выходной файл.
Как сделать эту задачу без использования подпрограмм (напр, GetWords)?

Пока составил программу, в которой все слова должны состоять из 5 символови (не меньше) и знаки препинания выводятся вместе со словами.
Помогите доделать задачу. unsure.gif
samec
хм, dry.gif интересный у тебя какой то код.... я вот набросал, но требуются доработки:

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 символов, разделитель слов или пробел илизапятая (вместе стоять не должны))
в третих, выводит все имеющиеся слова и их количества, надобы дубликаты в конце программы убирать, одновременно подсчитыва количество.
Так что есть над чем поработать и самому smile.gif
Сталкер
blink.gif
Скажите, что не так в программе?
все слова вместе с числами вхождений стираются, но в введённом предложении присутствуют несколько повторяющихся слов.

Код
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;

   writeln(f,'<',a[j],'> -',kol[j]:2);
t:
end;
close(f);
close(g);
end.
Сталкер
И можно ли не создавать ещё дополнительный массив, а изменять исходный?
Сталкер
Хелп. это последняя задача в этом учебном году... Завтра сдавать ( mega_chok.gif



Добавлено через 10 мин.
Цитата
for j:=1 to n do kol[j]:=0;


- это не лишнее ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.