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

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

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

 
Closed Topic Открыть новую тему 
> Слова
bigglewood
сообщение 14.06.2006 14:29
Сообщение #1


Пионер
**

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

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


Помогите с задачкой ато не получается самому sad.gif
Дана последовательность слов, слова разделяются пробелом.
Нужно вывести на экран все согласные буквы которые входят только в одно слово.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 14.06.2006 22:41
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


uses crt;
type
    main=array[1..40] of string[50];

procedure take_array(s:string; var mas:main; var n:integer);
var i:byte;
begin
n:=1;
for i:=1 to length(s) do
    if (s[i]=' ') and (i<>length(s)) then
       inc(n)
    else
        mas[n]:=mas[n]+s[i];
end;

function dif_letters(s:string):string;
var i,j:byte; buf:string;
begin
buf:='';
for i:=1 to length(s) do
    if pos(s[i],buf)=0 then
       buf:=buf+s[i];
dif_letters:=buf;
end;

procedure consonant(mas:main; n:integer);
const
     con='zxcvbnmlkhgfdsqwrtp';
var i,j,temp:integer;
    buf:string;
    num:array[1..20] of integer;
begin
for i:=1 to 20 do
   num[i]:=0;
for i:=1 to n do
    begin
         buf:=dif_letters(mas[i]);
         for j:=1 to length(buf) do
             begin
                  temp:=pos(buf[j],con);
                  if temp<>0 then
                     inc(num[temp]);
             end;
    end;

for i:=1 to 20 do
    if num[i]=1 then
       write(con[i],' ');
readln;
end;

var s:string;
    mas:main;
    n:integer;
begin
clrscr;
writeln('Enter string');
readln(s);
take_array(s,mas,n);
consonant(mas,n);
end.


Сообщение отредактировано: volvo - 2.11.2006 19:43


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.06.2006 11:32
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Вот мое решение, оно несколько короче.
const
  c:string='bcdfghklmnpqrstvwxz';
  z:set of char=[];

var
  s:string;
  A,B,T:set of char;
  i,j:integer;

begin
  Write('Type in a line: '); ReadLn(s);
  A:=Z;
  for i:=1 to Length(c) do begin
    T:=Z;
    for j:=1 to Length(s) do if c[i]=s[j] then
      if c[i] in A then Include(B,c[i]) else Include(T,c[i])
    else if s[j]=' ' then begin
      A:=A+T;
      T:=Z;
    end;
    A:=A+T
  end;
  A:=A-B;
  for i:=1 to Length(c) do if c[i] in A then Write(c[i],' ')
end.

Любопытно, что сначала я прочел условие неверно, и написал программу, которая выдает все буквы, которые входят в слова по одному разу. Когда я собрался ее постить, я увидел ошибку. Так вот, в результате мне оказалось нужно только в одном месте заменить одну букву, чтобы решение стало соответствовать правильному условию smile.gif.
Кто-нибудь может сказать, какую именно? smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bigglewood
сообщение 15.06.2006 15:42
Сообщение #4


Пионер
**

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

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


огромное спасибоsmile.gif
по поводу буквы сказать не могуsmile.gif

Сообщение отредактировано: bigglewood - 15.06.2006 16:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 15.06.2006 21:26
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
которая выдает все буквы, которые входят в слова по одному разу

Тоесть при такой строке
Цитата
vcx ccx xc

результат должен быть
Цитата
x

?

Сообщение отредактировано: Bokul - 15.06.2006 21:30


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 15.06.2006 21:59
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Рузельтат должен быть v. Толко эта буква входит в одно слово (первое).
c и x есть во всех словах.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 15.06.2006 22:06
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
Рузельтат должен быть v. Толко эта буква входит в одно слово (первое).

Так по условию должно быть... Я же спрашиваю какой результат должен быть по задаче lapp'a (ч. п. 3)


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.06.2006 23:40
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Bokul @ 15.06.2006 22:26) *

Тоесть при такой строке
vcx ccx xc
результат должен быть
x
?

нет, тут результат (по моему измененному условию) такой:
v x

То есть те буквы, которые встречаются в каждом слове 0 или 1 раз (но хотя бы одно вхождение в одном слове должно быть).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 16.06.2006 1:49
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
То есть те буквы, которые встречаются в каждом слове 0 или 1 раз (но хотя бы одно вхождение в одном слове должно быть).

Ну тогда все просто
       for j:=1 to Length(s) do if c[i]=s[j] then
      if c[i] in A then {надо поменять A на T}
       Include(B,c[i]) else Include(T,c[i])
    else if s[j]=' ' then begin



Сообщение отредактировано: volvo - 2.11.2006 19:43


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 16.06.2006 11:58
Сообщение #10


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


В общем какие-то разнолгасия .. пусть автор уточнит условие, вот мой вариант но первоначальному условию

uses crt;
const
  sogl = 'wrtpssdfghjklzxcvbnm';
var
  s : string = 'cxx xyfc xcavv';
  c : set of char = [];
  i, j, start : integer;

begin
  i := 1;
  while (i <= length(s)) do begin
    while (s[i] = ' ') do inc(i);
    if i <= length(s) then begin
      start := i;
      while (s[i] <> ' ') and (i <= length(s)) do inc(i);
      for j := start to i do
       if (pos(s[j], sogl) <> 0) then begin
         if not(s[j] in c) and (pos(s[j], copy(s, 1, pred(start))) = 0)
          and (pos(s[j], copy(s, succ(i), 255)) = 0) then
           writeln(s[j]);
         include(c, s[j]);
       end;
    end;
  end;
end.


cxx xyfc xcavv


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bigglewood
сообщение 16.06.2006 16:05
Сообщение #11


Пионер
**

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

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


из vx vkx vkt ответ должен быть t
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pola
сообщение 16.06.2006 18:56
Сообщение #12


Новичок
*

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

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


Цитата
Дана последовательность слов, слова разделяются пробелом.
Нужно вывести на экран все согласные буквы которые входят только в одно слово


const
  sogl: set of char = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'];
var
  S:String;
  len,p :integer;
  res, slo, vto: set of char;
  ch: char;
begin
  writeln('Введите строку ');
  readln(S); 

  len:=Length(S); 
  p:=1;     {начнем с первого символа}
  res:=[];  {один раз}
  vto:=[];  {неск слов}

  {пропустить пробелы в начале строки}
  while (p<=len) and (S[p]=' ') do p:=p+1;

  {выделяем слова пока не конец строки}
  while (p<=len) do
  begin
    {смотрим слово до пробела или конца строки}
    slo:=[];
    while (p<=len) and (S[p]<>' ') do
    begin
      slo:=sogl*[S[p]] + slo;  {складываем согласные}
      p:=p+1;               {к следующему символу}
    end;
    
    vto:=slo*res + vto; {встречалась - запоминаем}
    res :=res + slo - vto; {те, что не встречались еще - добавляем}  {встречалась - убираем}

    {пропускаем пробелы, не выходя за пределы строки}
    while (p<=len) and (S[p]=' ') do p:=p+1;
  end;

  {вывод}
  if res=[] then writeln('нет таких')
  else
  for ch:='b' to 'z' do
   if ch in res then write(ch,' ');
  readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.06.2006 19:05
Сообщение #13


Гость






lapp, как видишь, одна лишь твоя фраза привела к полному запутыванию участников и продолжению решения уже давным-давно решенной задачи... Я бы попросил тебя в следующий раз быть осмотрительнее... Если ты совершил ошибку - зачем ВСЕМ об этом знать? Да еще и гадать, какой же, интересно, символ был изменен ?...

Закрыто...
 К началу страницы 
+ Ответить 

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

 

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