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

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

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

 
 Ответить  Открыть новую тему 
> Строки и символьные массивы
Сталкер
сообщение 8.05.2007 8:09
Сообщение #1


Новичок
*

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

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


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

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


Прикрепленные файлы
Прикрепленный файл  STROKA.PAS ( 964 байт ) Кол-во скачиваний: 166
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 8.05.2007 11:54
Сообщение #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 
 К началу страницы 
+ Ответить 
Сталкер
сообщение 10.05.2007 17:39
Сообщение #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.


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


Новичок
*

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

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


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


Новичок
*

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

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


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



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


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

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

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

 



- Текстовая версия 24.06.2025 23:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"