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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2008, 23:58   #1
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию Одномерные массивы - Pascal

Дан одномерный массив(вводитса с клавиатуры). Найти количество пар совпадающих элементов в нем. Помогите народ!Спасибо заранее! Я сделал но у меня всегда неправильно считает......
W_P вне форума Ответить с цитированием
Старый 27.02.2008, 06:59   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Напиши, что сделал, посмотрим почему неправильно считает и все поправим.
puporev вне форума Ответить с цитированием
Старый 27.02.2008, 10:15   #3
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

Код:
Program a14;
uses crt;
var
a:array[1..100] of integer;
i,n,j,k:integer;s:real;
begin
writeln('VveDiTe RAZMerNosT ==>');
readln(n);
           for i:=1 to n do
           begin
                writeln('Vvedite ',i,' elemeNt MAsSiVA==>');
                readln(a[i]);
           end;
writeln('IsHoDniI mAsSiv ==>');
           for i:=1 to n do
           writeln('a[',i,']=',a[i]);
k:=0;j:=2;
           for i:=1 to n do begin
               if a[i]=a[j] then
               begin
               k:=k+1;
               writeln(a[j],a[j]);
               end;
               j:=j+1;
               end;
               if k mod 2 <> 0 then k:=k-1;
               s:=k;s:=s/2;
writeln('KoLiChEScTVo PAr ODInAkOvIh ElEmEnTOv ==>',s:2:2);
readkey;
end.
На будущее: Для программ есть специальный тег [code] просьба пользоваться им если хочеш запостить какой либо код

Последний раз редактировалось Stilet; 27.02.2008 в 10:28.
W_P вне форума Ответить с цитированием
Старый 27.02.2008, 10:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я чесслово скорее запутаюсь в твоих компиляциях, посему предложу свой вариант:

Код:
var a:array[1..100] of integer;k,i:integer;
begin
{Здесь мы вводим в массив значения, но 100 значений}
 for i:=1 to 100 do begin a[i]:=random(5);end;
{Ну и находим пары}
 k:=0;
 for i:=1 to 99 do if a[i]=a[i+1] then inc(k);
 writeln(k);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2008, 10:32   #5
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

Это неправильно.....я так тоже ставил и не только так. Нужно посчитать не количество одинаковых элементов, которые встречаютса в массиве, а пары. т.е типо если идут элементы 1 1 1 2 3 5 8 5 5 то здесь 2 пары 11 и 55
W_P вне форума Ответить с цитированием
Старый 27.02.2008, 11:11   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Держи нормальный код, все работает.
Суть: вводим массив, сортируем, чтобы одинаковые были рядом, затем проверяем, если a[i]=a[i+], то кол=+1, i:=i+2. Перескакиваем через проверенный элемент. Если a[i]<>a[i+], то i:=i+1.

Код:
uses crt;
var mas:array[1..20]of integer;
    n,i,j,x,kol:integer;//n-размер массива, i,j-счетчики,х-буфер,kol-кол.пар эл-тов
begin
clrscr;
write('n=');readln(n);
writeln('Vvedite elem massiva:');
i:=1;
while i<=n do
    begin
      write('mas[',i,']=');//ввод элементов массива
      readln(mas[i]);
      i:=i+1;
    end;
for i:=1 to n-1 do       //сортировка
for j:=1 to n-1 do
if mas[j]>mas[j+1] then
   begin
     x:=mas[j];mas[j]:=mas[j+1];mas[j+1]:=x;
   end;
i:=1;kol:=0;
while i<=n do
if mas[i]=mas[i+1] then   //подсчет пар (если 1,1,1-то одна пара)
         begin
          kol:=kol+1;
          i:=i+2;
         end
      else
         i:=i+1;
writeln('kol=',kol);
readln
end.
puporev вне форума Ответить с цитированием
Старый 27.02.2008, 11:36   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
т.е типо если идут элементы 1 1 1 2 3 5 8 5 5 то здесь 2 пары 11 и 55
Так значит нужно всего то удалять посчитанное:
Код:
  program Project2;
 var a:array[1..20] of integer;k,i:integer;
begin
{Здесь мы вводим в массив значения, но 100 значений}
 for i:=1 to 20 do begin a[i]:=random(2); writeln (a[i]);end;
{Ну и находим пары}
 k:=0;i:=1;
 while i<19 do begin
  if a[i]=a[i+1] then begin inc(k);inc(i); end; inc(i);
 end;
 writeln('Pary = ',k);
 readln;
end.
Мог бы и догадаться...

Цитата:
сортируем
Опа. Не понял, так как же задача то звучит: найти рядомстоящие пары или все возможные?
I'm learning to live...

Последний раз редактировалось Stilet; 27.02.2008 в 11:41.
Stilet вне форума Ответить с цитированием
Старый 27.02.2008, 12:11   #8
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Опа. Не понял, так как же задача то звучит: найти рядомстоящие пары или все возможные?
Нужно в одномерном массиве найти пары совпадающих цифер.

Сортировка в коде puporev'а нужна для удобства подсчёта таких пар...
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 27.02.2008, 19:24   #9
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

Спасибо парни за помощь!!
W_P вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы в Turbo Pascal W_P Помощь студентам 10 18.12.2009 19:14
Одномерные массивы 2 (Pascal) Дима82 Помощь студентам 4 16.02.2009 21:21
Одномерные массивы(Pascal) Дима82 Помощь студентам 7 07.06.2008 15:33
Одномерные массивы и строки Magnit Паскаль, Turbo Pascal, PascalABC.NET 4 12.04.2007 15:04