Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 16:44   #1
VENOMIK
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 30
По умолчанию Даны 3 массива символов. Определить какие символы входят в состав всех трёх массивов

помогите написать программу)Даны 3 массива символов. Определить какие символы входят в состав всех трёх массивов)С помощью функций или процедур на паскале)
VENOMIK вне форума Ответить с цитированием
Старый 05.12.2011, 17:33   #2
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

Например, считывать символ из массивов и записывать новые в дополнительный массив, после каждого считанного проверять, а нет ли его в нашем массиве.
hiho вне форума Ответить с цитированием
Старый 05.12.2011, 17:34   #3
VENOMIK
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 30
По умолчанию

в процедуре сравниваешь 2 массива на наличие одинаковых и получается новый массив из этих элементов а потом сравниваешь с третьим при вызове процедуры как то так должно быть)как только реализовать в программе не знаю
VENOMIK вне форума Ответить с цитированием
Старый 06.12.2011, 10:29   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тут многое зависит от того, что требуется найти/вывести в программе.
если сколько бы символ не встречался в этих трёх массивах, его нужно вывести ОДИН раз, то удобно использовать тип МНОЖЕСТВО (set of char)

если же (менее вероятно, но возможно и такое) символы должны выводится столько раз, сколько они заданы в массивах, то задачу надо решать перебором с поиском каждого элемента в оставшихся массивах...

допустим. есть три массива:
A: содержимое 'a', 'f', 'c', 'a', 'c', 'd'
B: содержимое 'd', 'z', 'f', 'a', 'n', 'f', 'd'
C: содержимое 'w', 'q', 'z', 'a', 'a', 'a', 'c', 'd', 'd'

что должна вывести программа?


p.s. в случае вашего адекватного ответа я легко могу написать пример, который решает эту задачу
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.12.2011, 13:18   #5
VENOMIK
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 30
По умолчанию

он должен вывести символы которые входят в состав всех трёх)Например тут это символ a,d,
VENOMIK вне форума Ответить с цитированием
Старый 06.12.2011, 16:10   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
var a,b,c: array [1..100] of char;
 s1,s2:set of char;
 res:set of char;
i,n1,n2,n3:integer;
begin
readln(n1);
for i:=1 to n1 do begin
readln(a[i]);s1:=s1+[a[i]];
end;
readln(n2);
for i:=1 to n2 do begin
readln(b[i]);s2:=s2+[b[i]];
end;
readln(n3);
for i:=1 to n3 do begin
readln(c[i]);
end;
for i:=1 to n3 do
if (c[i] in s1) and(c[i] in s2) and not(c[i] in res) then res:=res+[c[i]];
for i:=0 to 255 do
if chr(i) in res then write(chr(i),'  ');
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 06.12.2011, 17:10   #7
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Мой вариант этой программы:
Код:

Var
  Mas1, Mas2, Mas3, Res: Array[0..39] Of Char;
  i, j, k, r, N: Byte;

begin

  Repeat
    Write('N = ');
    ReadLn(N);
  Until (N In [1..40]);

  WriteLn('Massiv 1: ');
  For i:=0 To N-1 Do
    Begin
      Write('Mas1[', i+1, '] = ');
      ReadLn(Mas1[i]);
    End;

  WriteLn('Massiv 2: ');
  For i:=0 To N-1 Do
    Begin
      Write('Mas2[', i+1, '] = ');
      ReadLn(Mas2[i]);
    End;

  WriteLn('Massiv 3: ');
  For i:=0 To N-1 Do
    Begin
      Write('Mas3[', i+1, '] = ');
      ReadLn(Mas3[i]);
    End;

  r:=0;
  For i:=0 To N-1 Do
    Begin
      j:=0;
      While ((Mas1[i]<>Mas2[j]) And (j<N)) Do
        Inc(j);

      If ((j<=N-1) And (Mas1[i]=Mas2[j])) Then
        Begin
          k:=0;
          While ((Mas1[i]<>Mas3[k]) And (k<N)) Do
            Inc(k);

          If ((k<=N-1) And (Mas1[i]=Mas3[k])) Then
            Begin
              Res[r]:=Mas1[i];
              Inc(r);
            End;
        End;
    End;

  WriteLn;
  WriteLn('-------------------------');
  WriteLn;

  For i:=0 To r Do
    WriteLn(Res[i]);

  ReadLn;
end.
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..
<- DelpHIFanat -> вне форума Ответить с цитированием
Старый 06.12.2011, 23:34   #8
VENOMIK
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 30
По умолчанию

Спасибо большое!я вот сам накалякал вроде работает)вот мой вариант:
Код:
Program VeNOM;
type
      massivx=array[1..5] of char;
      massivy=array[1..5] of char;
      massivq=array[1..5] of char;
var
      q:massivq;
      n:integer;
      x:massivx;
      y:massivy;
      z:array[1..5] of char;
      i:integer;
      j:integer;
procedure srav(x1:massivx; y1:massivy; i:integer; j:integer; var q:massivq);
begin
      for i:=1 to 5 do
      for j:=1 to 5 do
      if x1[i]=y1[j] then
      q[i]:=x[i];
end;
begin
     writeln('vvedite 1 massiv');
     for i:=1 to 5 do readln(x[i]);
     writeln('vvedite 2 massiv');
     for i:=1 to 5 do readln(y[i]);
     writeln('vvedite 3 massiv');
     for i:=1 to 5 do readln(z[i]);
     srav(x,y,i,j,q);
     for i:=1 to 5 do
     for j:=1 to 5 do
     if q[i]=z[j] then writeln('odinakvie simvol=>',q[i]);
end.
VENOMIK вне форума Ответить с цитированием
Старый 07.12.2011, 09:05   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

VENOMIK

1. Вы плохо понимаете, зачем нужно описание ТИПОВ.
Зачем Вы наплодили столько одинаковых типов с разными именами?!
А в довершение всего ещё и для Z не произвели описание.
я бы рекомендовал так:
Код:
type
      massiv=array[1..5] of char;
var
      x, y, z, q:massiv;
      i, j :integer;
...
2. переменная n описана, но не используется.

3. не надо переменные-счётчики передавать в процедуру.
там нужно объявлять переменные и использовать их.
примерно так
Код:
procedure srav(x1, y1 :massiv; var q:massiv);
var i, j : integer;
begin
      for i:=1 to 5 do
      for j:=1 to 5 do
        if x1[i]=y1[j] then
            q[i]:=x[i];
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.12.2011, 18:17   #10
VENOMIK
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 30
По умолчанию

это был как бы черновой вариант программы)как вы написали про типы можно было сделать если массивы одинакового размера как у меня но если они будут разные нужно делать по другому)вот что получилося в итоге но и его можно было подредакитровать:
Код:
Program VeNOM;
type
      massivx=array[1..5] of char;
      massivy=array[1..5] of char;
      massivq=array[1..5] of char;
var
      q:massivq;
      x:massivx;
      y:massivy;
      z:array[1..5] of char;
      i:integer;
      j:integer;
      flag:boolean;
procedure srav(x1:massivx; y1:massivy; i:integer; j:integer; var q:massivq);
begin
      for i:=1 to 5 do
      for j:=1 to 5 do
      if x1[i]=y1[j] then
      q[i]:=x[i];
end;
begin
     writeln('vvedite 1 massiv');
     for i:=1 to 5 do readln(x[i]);
     writeln('vvedite 2 massiv');
     for i:=1 to 5 do readln(y[i]);
     writeln('vvedite 3 massiv');
     for i:=1 to 5 do readln(z[i]);
     srav(x,y,i,j,q);
     flag:=false;
     for i:=1 to 5 do
     for j:=1 to 5 do
     if q[i]=z[j] then
        begin
              writeln('odinakvie simvol=>',q[i]);
              flag:=true;
        end;
     if flag=false then writeln('odinakovix simvolov net');
end.
VENOMIK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны натуральное число n и символы s1,...,sn. Получите все символы, расположенные до первого двоеточия (Pascal) Татьана Помощь студентам 16 22.09.2011 15:05
В строке символов определить символы, которые встречаются по одному разу Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 12 27.03.2011 00:08
Дана строка символов, содержащая слова. Определить количество слов, последний и предпоследний символы кот RamZax Паскаль, Turbo Pascal, PascalABC.NET 2 17.06.2010 14:06
Работа со строками.даны три слова.Одно из них имеет меньшее количество символов,чем другое.Определить и в Ashley Помощь студентам 6 01.06.2010 22:08
Для массива определить сумму всех элементов, стоящих после максимального HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2009 22:04