Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задачка на множества, Паскаль (http://www.tehnari.ru/f41/t96153/)

pashasnuff 05.05.2014 08:58

Задачка на множества, Паскаль
 
Вложений: 1
Вводится непустая строка из строчных букв не более 79 символов(чтобы было удобно читать). Отдельные слова в ней разделены запятыми слева. Справа от запятой могут быть пробелы. Вывести на печать в алфавитном порядке: все звонкие согласные, которые входят больше чем в одно слово.


Буду благодарен за помощь.

Vladimir_S 05.05.2014 11:20

А без множеств нельзя? Задача решается существенно проще через массивы.

pashasnuff 05.05.2014 14:19

Изучаем тему про множества, поэтому с помощью их и надо делать.

Vladimir_S 05.05.2014 14:48

Цитата:

Сообщение от pashasnuff (Сообщение 1029891)
Изучаем тему про множества, поэтому с помощью их и надо делать.

Н-да... ну это только если... не при дамах будь сказано, через что. Ладно, вечером поразмыслю.

poiu 05.05.2014 17:59

с множествами не работал, но как понимаю в множестве может содержаться буква только один раз?
то есть слово ОТВЕТ будет множество "О Т В Е"?
значит я беру слово, заношу его в множество и сверяю с множеством звонких согласных? и если более 2 совпадений то запоминаю? я верно понял?

pashasnuff 05.05.2014 18:41

Например ввели строку
Привет, красный, жук , жало, гадость, горшок
Должен вывести Г,Ж,Р
потому что они в словах повторяются

Vladimir_S 05.05.2014 20:20

Вложений: 1
ПолучИте.
Несколько замечаний.
1. Прописные буквы недопустимы: строка должна состоять из русских слов, написанных строчными буквами и разделенных запятыми.
2. Буква "й" в качестве звонкой согласной не включена в список. Если надо - добавьте и увеличьте длину массива Codes на 1.
3. Сам по себе массив Codes возник исключительного из-за идиотского требования расположить буквы в результирующем списке по алфавиту. Если бы не этот преподский дебилизм, то программа была бы куда компактнее, и никакой надобности в массиве не возникло бы. А так... Дело в том, что элементы множества всегда располагаются "навалом", и упорядочить их внутри множества никакой возможности нет, вот и пришлось извращаться с массивом.
Код:

Const
 Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р'];

Var
 S:String;
 C:Char;
 i,j,k,N:Byte;
 Found:Set of Char;
 Codes:Array[1..10] of Byte;

Begin
 Writeln('Enter the string:');
 Readln(S);
 Writeln;
 Found:=[];
 N:=0;
 i:=0;
 Repeat
  Inc(i);
  If (S[i] in Sonants) and not (S[i] in Found) then
  begin
    C:=S[i];
    k:=i;
    repeat
    Inc(k);
    until (S[k]=',') or (k=Length(S));
    if S[k]=',' then
    begin
      repeat
      Inc(k);
      until (S[k]=C) or (k=Length(S));
      if S[k]=C then
      begin
        Found:=Found+[C];
        Inc(N);
        Codes[N]:=Ord(C);
      end;
    end;
  end;
 Until i=Length(S)-1;

 for i:=1 to N-1 do
  for j:=1 to N-i do
  if Codes[j]>Codes[j+1] then
    begin
    k:=Codes[j];
    Codes[j]:=Codes[j+1];
    Codes[j+1]:=k;
    end;
 writeln('Result:');
 for i:=1 to N do write(Chr(Codes[i]),' ');
 Readln
End.


pashasnuff 05.05.2014 20:23

Это сделано каким методом? Методом множеств?

pashasnuff 05.05.2014 20:28

Почему то не работает..(
Нельзя преобразовать тип set of string к set of char

Vladimir_S 05.05.2014 20:33

Цитата:

Сообщение от pashasnuff (Сообщение 1029965)
Почему то не работает..(
Нельзя преобразовать тип set of string к set of char

Как видите, у меня работает. И где Вы узрели "set of string"? А главное - какой у Вас Паскаль? Если глючный АВС - то, пардоньте, с этой дрянью не работаю. И еще - где именно спотыкается?


Часовой пояс GMT +4, время: 20:51.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.