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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2011, 02:14   #1
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
Вопрос [Матрицы.Паскаль]Сравнение каждого с каждым.

Доброй ночи.
--------------------------------------------------------------------------
Условия задачи:
3. Дан целочисленный массив А, содержащий n элементов (n<=20). Найти количество различных членов последовательности.
--------------------------------------------------------------------------
Никак не могу сообразить как увеличить переменную temp на [+1значение],
Когда цикл сравнения первого элемента завершился на последнем элементе массива.
То есть есть массив [1..10]
Вот беру первое число, приравниваю его temp'у и гоняю сравнение до конца массива, то бишь до 10го элемента.
А как его увеличить,чтобы после прогона до последнего элемента , начинал сравниваться уже второй элемент ???


Код:
uses crt;
const n=10;
type mass=array[1..n] of integer;
var a:mass;
begin
clrscr;
randomize;
temp:=a[1];
for i:=1 to n do a[i]:=random(100);
for i:=1 to n do write(a[i],' ');
for i:=1 to n do
    begin
    for i:=1 to n do
        begin
        if a[i]=temp then
           begin
           num:=i; rep:=a[i];
           end;
        end;
Подскажите пожалуйста.
Только как можно понятнее, чтобы мне по 100 раз не переспрашивать.
Спасибо.
BackSlash вне форума Ответить с цитированием
Старый 14.01.2011, 02:18   #2
dekameron
Форумчанин
 
Аватар для dekameron
 
Регистрация: 27.04.2010
Сообщений: 185
По умолчанию

for i:=1 у вас встречается 2 раз во вложеном цикле
попробуйте во вложеном цикле использовать другой идентификатор)
Код:
uses crt;
const n = 10;
type mass = array[1..n] of integer;
var a: mass;
begin
  clrscr;
  randomize;
  for i := 1 to n do a[i] := random(100);
  for i := 1 to n do write(a[i], ' ');
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      if a[j] = a[i] then
      begin
        num := i; rep := a[i];
      end;
    end;

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Помог - тырк на весы

Последний раз редактировалось Serge_Bliznykov; 15.01.2011 в 09:41.
dekameron вне форума Ответить с цитированием
Старый 14.01.2011, 02:20   #3
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
По умолчанию

Он там был один раз, это я пробовал что-то изобрести, не вышло а убрать забыл.

Идентификатором, тут дело не ограничится) Я просто не пойму как так сделать чтоб после 10 итераций менялась переменная а не после каждой.

Ок, сейчас попробую, мб дойдет до меня)Спасибо.

Может Вы что-то пропустили?
Что-то я не пойму зачем так делать, ибо a[j]=a[i] (первый с первым, второй со вторым, третий с третим итд.)

А мне нужно, чтобы 1 элемент сравнился со всеми, кроме него, потом второй со всеми, кроме него, потом третий со всеми, кроме него.

Поправьте меня, если я ошибаюсь.

Последний раз редактировалось Stilet; 15.01.2011 в 11:28.
BackSlash вне форума Ответить с цитированием
Старый 14.01.2011, 03:06   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
for i:=1 to n -1 do
for j:=i+1 to n do 
if a[j]=a[i] then
begin
num:=i; rep:=a[i];
end;
вроде так

PS сравниваем 1 элемент со всеми номер которых больше чем 1, потом сравниваем второй элемент со всеми номер которых больше чем 2 (с первым уже сравнивали в прошлый проход) и тд.


Ой прошу прощения, нужно ведь. Найти количество различных членов последовательности. Тогда так

Код:
num:=0;
for i:=1 to n do
begin
x:=1;
for j:=1 to i-1 do
if a[j]=a[i] then
begin
inc(x);
end;
if x<2 then
inc(num);
end;

Последний раз редактировалось vovk; 14.01.2011 в 05:49. Причина: опечатка вместо if написал f
vovk вне форума Ответить с цитированием
Старый 14.01.2011, 14:47   #5
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
По умолчанию

Спасибо.
Что вы обозначили за переменную x и за переменную num?
И объясните пожалуйста как работает код.
Я в выводе вывожу) x и num.
У меня идея была такая за х допустим взять количество повторяющихся элементов, а за num количество различных членов последовательности.

Следовательно для массива
[1,2,3,4,1,2,0,5,4,9]
x должен быть =3 а num=4

А на деле что-то не получается.

И еще вот num:=0 и особенно x:=1;
в правильное место Вы поставили?
BackSlash вне форума Ответить с цитированием
Старый 14.01.2011, 17:08   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

X это просто счётчик он нужен только дя проверки совпадений в цикле, в num сохраняется количество различных членов последовательности.
на счёт кода всё просто,
циклом проходим от 1 до последнего члена массива,
во внутреннем цикле сравниваем проверяемый элемент с элементами которые уже посчитали,
если есть совпадения то увеличиваем X после прохождения внутреннего цикла проверяем переменную X и если она меньше чем 2 (то есть не было совпадения)
увеличиваем количество различных членов последовательности.
както так.
Внутренний цикл (где проходит проверка ) можно немного переделать, чтобы проверка шла только до 1 совпадения, то есть если уже есть совпадения то дальше смысла проверять нет, и значит можно просто закончить проверку.

ЗЫ Если нужно посчитать количество повторяющихся, то можно просто от общего количества членов отнять количество различных членов последовательности))

Последний раз редактировалось vovk; 14.01.2011 в 17:19.
vovk вне форума Ответить с цитированием
Старый 15.01.2011, 03:56   #7
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
По умолчанию

Понятно, Огромное спасибо!
BackSlash вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напечатать числа последних четвергов каждого месяца Паскаль Alen4ik Помощь студентам 3 07.11.2013 01:12
Вычислить и запомнить количество отрицательных элементов каждого столбца для матрицы A(10,10) , B (15,20) bitmania Помощь студентам 3 15.10.2008 01:06
Вычислить произведение элементов каждого столбца матрицы размерности n*n, находящаяся в строках ZmeI Помощь студентам 2 17.12.2007 22:43