IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Строки и символьные массивы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Дана последовательность до 30 слов, в каждом из которых от 1 до 5 символов, между словами - пробел или запятая, в конце последовательности точка. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность. Использовать входной и выходной файл.
Как сделать эту задачу без использования подпрограмм (напр, GetWords)?

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


Прикрепленные файлы
Прикрепленный файл  STROKA.PAS ( 964 байт ) Кол-во скачиваний: 151
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Юра

Репутация: -  1  +


хм, 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


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.


Сообщение отредактировано: Сталкер -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


И можно ли не создавать ещё дополнительный массив, а изменять исходный?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Хелп. это последняя задача в этом учебном году... Завтра сдавать ( mega_chok.gif



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


- это не лишнее ?

Сообщение отредактировано: Сталкер -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.10.2020 14:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name