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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2013, 15:13   #1
Flower2
Пользователь
 
Регистрация: 27.10.2013
Сообщений: 22
По умолчанию Одномерный массив, паскаль

Определить имеются ли в одномерном массиве только 2 одинаковых элемента
Flower2 вне форума Ответить с цитированием
Старый 01.11.2013, 15:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Показывай как массив вводишь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2013, 16:02   #3
Flower2
Пользователь
 
Регистрация: 27.10.2013
Сообщений: 22
По умолчанию

Нашла, не много сама доделала.
Код:
uses crt;
const max=100;
var a:array[1..max] of integer;
    n,i,j,k:byte;
begin
clrscr;
write('Размер массива n=');
readln(n);
writeln('Введите ',n,' целых чисел:');
for i:=1 to n do
 begin
  write('a[',i,']=');
  readln(a[i]);
 end;
k:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]=a[i] then k:=1;
if k=1 then write('В массиве имеются одинаковые элементы')
else write('В массиве одинаковых элементов нет!');
readln
end.
Не понимаю пару строчек
k:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]=a[i] then k:=1;
if k=1
Flower2 вне форума Ответить с цитированием
Старый 02.11.2013, 14:49   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не смущает, что программа ваша решает немного другую задачу?
(проверяется есть ли в массиве одинаковые элементы, а у Вас в задании: "имеются ли в одномерном массиве только 2 одинаковых элемента" )

Цитата:
Не понимаю пару строчек
это несложно. алгоритм очень простой:
Цитата:
Код:
k:=0; {флажок одинаковости поставили в 0 (это значит, изначально считаем, что одинаковых элементов в массиве НЕТ.}
for i:=1 to n-1 do {цикл от первого элемента до предпоследнего}
  for j:=i+1 to n do  {внутренний цикл от элемента, следующего за I-м и до послеследнего элемента}
   if a[j]=a[i] then k:=1; {если Iй и Jй элементы массива одинаковы, установили признак, что есть одинаковые}
if k=1 then write('В массиве имеются одинаковые элементы')


кстати, циклы (и внешний и внутренний) при данном алгоритме можно смело прерывать, как только флаг K стал равным единице! Очевидно, что если он стал равным единице, то: он уже не изменится -> в массиве есть одинаковые элементы и проверять дальше смысла уже нет....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2013, 15:22   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
кстати, циклы (и внешний и внутренний) при данном алгоритме можно смело прерывать, как только флаг K стал равным единице!
Неа
Когда стал равным 2, то смело прерываем.. А пока 1 нужно продолжать крутить, т.к. задание :
Код:
Определить имеются ли в одномерном массиве только 2 одинаковых элемента
Poma][a вне форума Ответить с цитированием
Старый 02.11.2013, 17:24   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Неа
Когда стал равным 2, то смело прерываем.. А пока 1 нужно продолжать крутить, т.к. задание :
Код:
Определить имеются ли в одномерном массиве только 2 одинаковых элемента
Рома][а, Вы всёрьёз думаете, что в коде:
Цитата:
Код:
for i:=1 to n-1 do
  for j:=i+1 to n do
      if a[j]=a[i] then k:=1;
k может стать равным двум?!?!?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2013, 17:26   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
k может стать равным двум?!?!?
Я имел ввиду, что туда нужно прикрутить Inc (k)..
Poma][a вне форума Ответить с цитированием
Старый 02.11.2013, 18:07   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Я имел ввиду, что туда нужно прикрутить Inc (k)..
дело в том, что если там поставить Inc(k), тогда, конечно, k может стать и 2 и больше.
Но в этом случае цикл прерывать не нужно. А сравнивать нужно именно с единицей (1 сигнализирует, что найдена одна пара одинаковых элементов)
т.е. код может выглядеть так:
Код:
  k:=0;
  for i:=1 to n-1 do
     for j:=i+1 to n do
         if a[j]=a[i] then k := k+1;  {пишу там, чтобы TC было понятней. хотя, конечно, inc(k) лучше.}
  if k=0 then writeln('В массиве нет одинаковых элементов ')
  else
    if k=1 then writeln('В массиве имеется два одинаковых элемента')
    else writeln('В массиве более двух одинаковых элементов.');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2013, 18:14   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Но в этом случае цикл прерывать не нужно
Поспорю!
Код:
var
	a : array [1..100] of Integer;
	n, i, j, k : Integer;
	
begin
	ReadLn (n);
	
	for i := 1 to n do
		Read (a[i]);
	
	k := 0;
	for i := 1 to n-1 do begin
		for j := i+1 to n do
			if a[j] = a[i] then
				Inc (k);
				
		if k > 2 then 
			Break
	end;
	
	case k of
		0 : WriteLn ('В массиве нет одинаковых элементов');
		1 : WriteLn ('В массиве имеется одна пара одинаковых элементов')
	else
		WriteLn ('В массиве больше 2 одинаковых элементов')
	end
end.
Poma][a вне форума Ответить с цитированием
Старый 02.11.2013, 19:01   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Поспорю!
соглашусь.
с поправкой

Код:
		
		if k >= 2 then 
			Break
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив. Паскаль. Женька Good Помощь студентам 2 01.12.2011 09:21
одномерный массив.Паскаль Nastya2406 Помощь студентам 6 30.05.2011 16:59
паскаль: одномерный массив Lada05 Помощь студентам 2 10.11.2010 13:54
Паскаль, Одномерный массив. HaTyCuk Помощь студентам 5 30.12.2009 21:30
Паскаль. Одномерный массив deceiver Помощь студентам 7 21.03.2009 15:12