2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Подсчетивывод неравных элементов числовой последовательности
Сообщение31.03.2012, 11:32 
Помогите, пожалуйста, составить программу, которая выполняет следующие действия: ввод произвольного количества чисел с черного экрана (так, чтобы присутствовали равные числа); подсчет количества и вывод на черный экран всех неравных чисел. (Числа равные-неравные - могут быть введены в произвольном порядке)
Вот моя программа:
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
1. У Вас определен массив для хранения введенных чисел емкостью всего на 10 штук. А если бессовестный пользователь захочет ввести 11? То есть такое значение n не отвергается программой, будет организован цикл на 11 чтений вводимых чисел, и 11-е программе совать будет некуда, ибо массив будет заполнен. Программа слетит с катушек. Как на счет организации массива на любое количество данных? :wink: Или хотя бы проверяйте введенное число, не превышает ли оно заданные границы массива.

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

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

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

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

 
 
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение01.04.2012, 13:04 
Код:
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 
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 
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 
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 
acme в сообщении #557374 писал(а):
Эта программа не сможет проверить мне равенство первого элемента с конца и третьего с начала.
Код:
i = 3, j = n
Отношение равенства симметрично.

 
 
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 12:02 
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 
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 
Joker_vD в сообщении #557422 писал(а):
$\{i,j\} \in 2^{\overline{1,n}}\mathrel{\Big|} \#\{i,j\}=2$

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

 
 
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 14:13 
$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 
arseniiv в сообщении #557440 писал(а):
$x \sim y : \Leftrightarrow$

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

 
 
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 15:56 
ewert
Слева — записано подмножество множества $\{1,\ldots,n\}$ (а последнее множество я давно привык обозначать $\overline{1,n}$) с не более чем двумя элементами, справа — условие на то, что в нем должно быть ровно два элемента.

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

 
 
 
 Re: Подсчетивывод неравных элементов числовой последовательности
Сообщение07.04.2012, 16:30 
ewert в сообщении #557442 писал(а):
Этого я уже совсем не понимаю.
Это я так определил отношение $\sim$ равенства элементов с данными индексами, которое дальше используется, а то такая бы свалка получилась!

 
 
 [ Сообщений: 26 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group