2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Подсчетивывод неравных элементов числовой последовательности
Сообщение31.03.2012, 11:32 


18/01/11
78
Помогите, пожалуйста, составить программу, которая выполняет следующие действия: ввод произвольного количества чисел с черного экрана (так, чтобы присутствовали равные числа); подсчет количества и вывод на черный экран всех неравных чисел. (Числа равные-неравные - могут быть введены в произвольном порядке)
Вот моя программа:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program p1;
var a,b,c,d,i,j,k,n:longint;
f:array [1..10] of longint;
Begin
writeln('vvedite kol-vo elementov: ');
readln(n);
for j:=1 to n do begin
write('f[',j,']=');
readln(f[j]);
end; k:=0;
for j:=1 to n do
begin
if f[j]=f[j+1] then
k:=k+1
else writeln('Neravnoe cislo: ',f[j]);
end;
writeln('kol-vo ravnih elementov: ',k);
readln;
End.

Она, очевидно с дефектом, т.к. будет выдавать ложные ответы.
Помогите, пожалуйста, составить верную программу.
Заранее благодарю!

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение31.03.2012, 20:36 


26/02/12
50
1. У Вас определен массив для хранения введенных чисел емкостью всего на 10 штук. А если бессовестный пользователь захочет ввести 11? То есть такое значение n не отвергается программой, будет организован цикл на 11 чтений вводимых чисел, и 11-е программе совать будет некуда, ибо массив будет заполнен. Программа слетит с катушек. Как на счет организации массива на любое количество данных? :wink: Или хотя бы проверяйте введенное число, не превышает ли оно заданные границы массива.

2. Почему-то у Вас программа проверяет на равенство только соседние элементы массива... :-(

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение01.04.2012, 09:41 


18/01/11
78
TupaHo3aBp в сообщении #554293 писал(а):
1. У Вас определен массив для хранения введенных чисел емкостью всего на 10 штук. А если бессовестный пользователь захочет ввести 11? То есть такое значение n не отвергается программой, будет организован цикл на 11 чтений вводимых чисел, и 11-е программе совать будет некуда, ибо массив будет заполнен. Программа слетит с катушек. Как на счет организации массива на любое количество данных? :wink: Или хотя бы проверяйте введенное число, не превышает ли оно заданные границы массива.

2. Почему-то у Вас программа проверяет на равенство только соседние элементы массива... :-(

С массивом я разберусь - это легко, а как заставить ее проверять все элементы массива на равенство?

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение01.04.2012, 13:04 
Заслуженный участник


09/09/10
3729
Код:
for i := 1 to n do
  for j := i+1 to n do
    if f[i] = f[j]
    then // ...

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 10:43 


18/01/11
78
Joker_vD в сообщении #554461 писал(а):
Код:
for i := 1 to n do
  for j := i+1 to n do
    if f[i] = f[j]
    then // ...

Код - хороший, но он проверяет на равенство только два близлежащих элемента (i и i+1). А как заставить программу проверить все элементы массива между собой?

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 11:28 
Заслуженный участник


09/08/09
3438
С.Петербург
acme в сообщении #557350 писал(а):
Код - хороший, но он проверяет на равенство только два близлежащих элемента (i и i+1).
Вот код, который проверяет только соседние элементы:
Код:
for i := 1 to n-1 do
  if f[i] = f[i+1]
  then // ...
А это код, предложенный Joker_vD:
Код:
for i := 1 to n do
  for j := i+1 to n do
    if f[i] = f[j]
    then // ...
Чувствуете разницу?

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 11:37 


18/01/11
78
Maslov в сообщении #557369 писал(а):
acme в сообщении #557350 писал(а):
Код - хороший, но он проверяет на равенство только два близлежащих элемента (i и i+1).
Вот код, который проверяет только соседние элементы:
Код:
for i := 1 to n-1 do
  if f[i] = f[i+1]
  then // ...
А это код, предложенный Joker_vD:
Код:
for i := 1 to n do
  for j := i+1 to n do
    if f[i] = f[j]
    then // ...
Чувствуете разницу?

Я чувствую результат

-- Сб апр 07, 2012 11:39:06 --

Эта программа не сможет проверить мне равенство первого элемента с конца и третьего с начала.

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 12:01 
Заслуженный участник


09/08/09
3438
С.Петербург
acme в сообщении #557374 писал(а):
Эта программа не сможет проверить мне равенство первого элемента с конца и третьего с начала.
Код:
i = 3, j = n
Отношение равенства симметрично.

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 12:02 
Заслуженный участник


11/05/08
32166
acme в сообщении #557374 писал(а):
Эта программа не сможет проверить мне равенство первого элемента с конца и третьего с начала.

Сможет, но там другие проблемы. В частности:

acme в сообщении #554100 писал(а):
writeln('kol-vo ravnih elementov: ',k);

Что это вообще такое -- "количество равных элементов"?... Имеет смысл лишь количество неравных, т.е. уникальных элементов.

Используется синтаксис Pascal
num:=0;
for i := 1 to n do begin
    findeq:=false;
    for j := 1 to i-1 do begin
        findeq:=( f[i] = f[j]);
        if findeq then break;
    end;
    if not findeq then begin
        inc(num);
        writeln(f[i]);
    end;
end;

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 13:38 
Заслуженный участник


09/09/10
3729
ewert в сообщении #557390 писал(а):
Что это вообще такое -- "количество равных элементов"?

$\#\left\{\{i,j\} \in 2^{\overline{1,n}}\mathrel{\Big|} \#\{i,j\}=2,\, f[i]=f[j]\right\}$

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 13:45 
Заслуженный участник


11/05/08
32166
Joker_vD в сообщении #557422 писал(а):
$\{i,j\} \in 2^{\overline{1,n}}\mathrel{\Big|} \#\{i,j\}=2$

И что бы это могло значить?... Но в любом случае: это количество вовсе не элементов, а пар.

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 14:13 
Заслуженный участник


27/04/09
28128
$x \sim y : \Leftrightarrow f[x] = f[y]$. Можно попробовать определить функцию $c\colon 1..n / {\sim} \to \mathbb R_{\geqslant 0}$, говорящую сколько разных элементов в общем случае. Значения $c$ для всех равных элементов ($0$) и для всех разных ($n$) есть, осталось только выдумать остальные!

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 14:18 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #557440 писал(а):
$x \sim y : \Leftrightarrow$

Этого я уже совсем не понимаю. Там-то была хотя бы всего лишь тавтология...

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 15:56 
Заслуженный участник


09/09/10
3729
ewert
Слева — записано подмножество множества $\{1,\ldots,n\}$ (а последнее множество я давно привык обозначать $\overline{1,n}$) с не более чем двумя элементами, справа — условие на то, что в нем должно быть ровно два элемента.

А можно вообще так: количество равных элементов — это количество всех элементов ($n$) минус количество различных элементов.

 Профиль  
                  
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 16:30 
Заслуженный участник


27/04/09
28128
ewert в сообщении #557442 писал(а):
Этого я уже совсем не понимаю.
Это я так определил отношение $\sim$ равенства элементов с данными индексами, которое дальше используется, а то такая бы свалка получилась!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group