IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> выписать элементы, которые не входят в массив
redeezko
сообщение 20.11.2009 22:17
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской

Репутация: -  0  +


Задача: пусть дан одномерный массив размерностью n, и Min-наименьшее, а Max-наибольшее из них. Получите в порядке возрастания все числа из интервала (min,max), которые не входят в данный массив.
Вот что я написал:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=5;
type u=array [1..n] of integer;
var x:u;
i,min,max,v,k,j,a:integer;
begin
v:=0;
writeln('vvedite massiv');
for i:=1 to n do read(x[i]);
for i:=1 to n do
begin
k:=i;
for j:=i+1 to n do
if x[j]<x[k] then k:=j;
v:=x[i];
x[i]:=x[k];
x[k]:=v;
end;
min:=x[1];
max:=x[n];
while min<max do
begin
min:=min+1;
if x[i]<>min then
write(min,' ');
i:=i+1;
end;
readln;
readln;
end.

Но почему то у меня выводятся ВСЕ числа из данного интервала, кто знает подскажите где ошибка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
Unconnected
сообщение 20.11.2009 23:29
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Может, так?

function prov(x:byte;mas:array of byte;n:byte):boolean;
var i:byte;
begin
prov:=false;
for i:=1 to n do if (mas[i]=x) then begin
prov:=true;
break;
end;
end;

var min,max,i,n:byte;
mas:array[1..255] of byte;
begin
randomize;
writeln('Vvedite razmer massiva');
readln(n);
for i:=1 to n do mas[i]:=random(50)+1;
min:=mas[1];max:=mas[1];
for i:=2 to n do if min>mas[i] then min:=mas[i];
for i:=2 to n do if max<mas[i] then max:=mas[i];
for i:=min to max do if not(prov(i,mas,n)) then writeln(i);
readln;
end.



Сообщение отредактировано: Unconnected - 20.11.2009 23:30


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
redeezko
сообщение 21.11.2009 0:26
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской

Репутация: -  0  +


Спасибо большое что откликнулись, но мы функции не изучали еще. Мне желательно просто подсказать какие изменения нужно внести в мой код
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 21.11.2009 0:39
Сообщение #4


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Тогда можно так:

var min,max,i,i2,n:byte;
mas:array[1..255] of byte;
d:boolean;
begin
randomize;
writeln('Vvedite razmer massiva');
readln(n);
for i:=1 to n do mas[i]:=random(50)+1;
min:=mas[1];max:=mas[1];
for i:=2 to n do if min>mas[i] then min:=mas[i];
for i:=2 to n do if max<mas[i] then max:=mas[i];
for i:=min to max do
begin
d:=false;
for i2:=1 to n do if (mas[i2]=i) then begin
d:=true;
break;
end;
if not(d) then writeln(i);
end;
readln;
end.



--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.11.2009 2:56
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Unconnected,
1. зачем делать в трех циклах то, что можно сделать в одном?
2. зачем приучать новичка к break там, где все легко делается через while/repeat?

Короче, redeezko, вот я начал с твоей проги, но потом вынужден был уйти.. smile.gif
uses
SysUtils;
const
n= 20;
type
u=array [1..n] of integer;
var
x: u;
i,j,min,max,r: integer;

begin
r:=n;
min:=r;
max:=-r;
for i:=1 to n do begin
x[i]:=Random®-Random®;
if min>x[i] then min:=x[i];
if max<x[i] then max:=x[i]
end;
for i:=min+1 to max-1 do begin
j:=1;
while (j<=n)and(i<>x[j]) do Inc(j);
if j>n then WriteLn(i)
end
end.

Спрашивай, что неясно.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
redeezko
сообщение 21.11.2009 11:07
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской

Репутация: -  0  +


Lapp спасибо большое! во всем разобрался, помогло очень!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 21.11.2009 11:11
Сообщение #7


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Lapp, а мне вот просто интересно, зачем было объявлять u=array [1..n] of integer;, а потом x:u, если можно было просто объявить массив?)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.11.2009 11:21
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Unconnected @ 21.11.2009 11:11) *
Lapp, а мне вот просто интересно, зачем было объявлять u=array [1..n] of integer;, а потом x:u, если можно было просто объявить массив?)

В данном случае - незачем. Только если в расчете на будущее расширение - например, передачу массива в процедуру.. Но я оставил просто потому, что это был хоть какой-то элемент, который оставлял сходство с первоначальной программой, и при этом - не ошибка! ))

Кто их знает, может они типы недавно проходили и отрабатывают.. ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"