0 / 0 / 0 Регистрация: 28.11.2011 Сообщений: 22 |
|
1 |
|
Определить количество различных элементов в массиве13.12.2011, 21:29. Показов 4840. Ответов 10
Ребят срочно нужна помощь надо сделать две задачи по одномерным массивам, я знаю логику у этих задач, но не могу написать код… Исходный массив упорядочен по возрастанию Ввести число К и вставить его в массив, не нарушая упорядоченности. Определить количество различных элементов в массиве Зарание благодарен…
0 |
WebMax 2.0 –.founder./– 565 / 565 / 392 Регистрация: 20.10.2011 Сообщений: 867 |
||||
13.12.2011, 22:39 |
2 |
|||
Сообщение было отмечено Памирыч как решение Решение
1 |
0 / 0 / 0 Регистрация: 28.11.2011 Сообщений: 22 |
|
13.12.2011, 22:47 [ТС] |
3 |
WebMax 2.0, спасибо за задачу, а можно как нибудь полегче ее вообще сделать, просто к тому моменту мы еще не прошли процедуры и функции…
0 |
Steacher 13 / 13 / 13 Регистрация: 09.12.2011 Сообщений: 35 |
||||
13.12.2011, 22:48 |
4 |
|||
Сообщение было отмечено Памирыч как решение Решениену или мой вариант, не зря же я его писал
1 |
WebMax 2.0 –.founder./– 565 / 565 / 392 Регистрация: 20.10.2011 Сообщений: 867 |
||||
13.12.2011, 22:53 |
5 |
|||
а можно как нибудь полегче ее вообще сделать, просто к тому моменту мы еще не прошли процедуры и функции… Процедуры и функции убрал .
1 |
0 / 0 / 0 Регистрация: 28.11.2011 Сообщений: 22 |
|
13.12.2011, 22:54 [ТС] |
6 |
Steacher, во спасибо вот оно самое… Добавлено через 1 минуту
0 |
–.founder./– 565 / 565 / 392 Регистрация: 20.10.2011 Сообщений: 867 |
|
13.12.2011, 22:57 |
7 |
а попробуйте вторую Вторая решена в моем алгоритме , посмотри внимательней !
1 |
0 / 0 / 0 Регистрация: 28.11.2011 Сообщений: 22 |
|
13.12.2011, 22:58 [ТС] |
8 |
WebMax 2.0, хорошо щас найду))) Добавлено через 53 секунды
0 |
WebMax 2.0 –.founder./– 565 / 565 / 392 Регистрация: 20.10.2011 Сообщений: 867 |
||||
13.12.2011, 23:02 |
9 |
|||
Если не сложно выдели его)))
1 |
0 / 0 / 0 Регистрация: 28.11.2011 Сообщений: 22 |
|
13.12.2011, 23:11 [ТС] |
10 |
WebMax 2.0, спасибо большое очень вам благодарен Добавлено через 5 минут
0 |
WebMax 2.0 –.founder./– 565 / 565 / 392 Регистрация: 20.10.2011 Сообщений: 867 |
||||
13.12.2011, 23:31 |
11 |
|||
set of byte Множество из целочисленных значений !
Если значения нет в множестве, то вставляем данное значение в множество и увеличиваем K+1, проверяем следующее значение массива, если значение уже присутствует в множестве, то пропускаем . Таким образом узнаем кол-во различных элементов !
0 |
Задача. Найти количество различных чисел в массиве из N элементов.
Как будем решать задачу (2 способа)
для хранения уникальных значений исходного массива будем использовать:
- новый массив
- множество
Способ 1
Сформируем массив a случайных чисел из диапазона от 0 до 20.
Заведем массив b и заполним все его ячейки числами -1.
Переменной j присвоим значение 0.
В цикле для k от 1 до n:
- Присвоим флагу f значение true, это будет означать, что ячейка a[k] хранит уникальное значение, и его нет в массиве b.
- В цикле для s от 1 до j сравним значение a[k] со значениями массива b (a[k]=b[s]), если условие верно, флагу присвоим значение false.
- Если флаг не поменял значение true на false и хранит значение true, счетчик j увеличим на 1 и сохраним в ячейке b[j] значение a[k].
В итоге переменная j будет хранить количество измененных ячеек массива b – количество различных элементов исходного массива.
Программа решения задачи на языке Паскаль (способ 1)
const n = 10;
var a,b:array[1..n] of integer;
k,s,j:integer;
f:boolean;
begin
write(‘Исходный массив: ‘);
for k:=1 to n do
begin
a[k]:=random(21); write(a[k],’ ‘);
b[k]:=-1;
end;
j:=0;
for k:=1 to n do
begin
f:=true; //элемента a[k] нет в массиве b
for s:=1 to j do if a[k]=b[s] then f:=false;
if f then begin j+=1; b[j]:=a[k]; end;
end;
writeln;
write(‘Неповторяющиеся числа: ‘);
for k:=1 to j do write(b[k],’ ‘);
writeln;
writeln(‘Количество различных чисел: ‘,j);
end.
Способ 2
Заведем пустое множество m.
Сформируем массив a случайных чисел из диапазона от 0 до 20.
В цикле для k от 1 до n:
- если значение a[k] нет в множестве m, увеличим счетчик j на 1,
- добавим значение a[k] в множество m.
В итоге переменная j будет хранить длину сформированного множества, то есть количество различных значений исходного массива
В цикле foreach k in m do
(для каждого k, имеющегося в множестве m) выведем значения, сохраненные в множестве m.
Программа решения задачи на языке Паскаль (способ 2)
const n = 10;
var a:array[1..n] of integer;
k,j:integer;
m:set of integer;
begin
m:=[];
j:=0;
write(‘Исходный массив: ‘);
for k:=1 to n do
begin
a[k]:=random(21); write(a[k],’ ‘);
if not(a[k] in m) then j+=1;
m:=m+[a[k]];
end;
writeln;
write(‘Неповторяющиеся числа: ‘);
foreach k in m do write(k,’ ‘);
writeln;
writeln(‘Количество различных чисел: ‘,j);
end.
Результат запуска программы
Если значительно увеличить количество элементов массива a, какая программа будет искать различные числа более эффективно (быстро)?
На занятии разбираются разного уровня сложности задачи в Pascal для работы с одномерными массивами
Задача сайта labs-org.ru — получение пользователями практических навыков работы с языком. Уроки по Паскалю, изложенные по мере увеличения их сложности и подкрепляемые наглядными решенными примерами, позволят с легкостью освоить изучаемый материал.
Для начала рассмотрим не сильно сложную задачу с одномерными массивами в Pascal:
Пример: Найти максимальный элемент численного массива и его индекс.
Результат:
Подумайте, пригодится ли в программе счетчик или нет, нужны ли дополнительные переменные.
Показать листинг программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const m = 20; var arr: array[1..m] of byte; max_index: byte; i: byte; begin randomize; for i := 1 to m do begin arr[i] := random(100); write (arr[i]:3); end; max_index := 1; for i := 2 to m do if arr[i] > arr[max_index] then begin max_index := i; end; writeln; writeln ('Max = ',arr[max_index]); writeln ('position: ', max_index); end. |
Задача Array 15. Требуется заполнить массив числами, которые вводит пользователь, и вычислить их сумму. Если пользователь вводит ноль или превышен размер массива, то запросы на ввод должны прекратиться. Использовать цикл с постусловием (repeat)
Результат:
Число: 3 Число: 2 Число: 5 Число: 0 3 2 5 0 sum = 10
[Название файла: task15.pas
]
Задача Array 16. Дан массив из 50 элементов, значения которых формируются функцией random и лежат в диапазоне от -50 до 49 включительно. Требуется из одного массива скопировать в другой массив значения в диапазоне от -5 до 5 включительно и подсчитать их количество.
[Название файла: task16.pas
]
Задача Array 17. В одномерном массиве (заполнение массива случайными числами от -50 до 49) найти сумму отрицательных элементов. Если эта сумма меньше -100, то необходимо прибавить к ней минимальный положительный элемент.
Следующую сложную задачу с одномерными массивы следует разобрать подробно.
Пример: Имеется одномерный массив, содержащий числа от 0 до 49 включительно. Требуется исключить из него все элементы, значения которых меньше 15.
Сложность этого задания состоит в том, что нужно не просто удалять элементы, значения которых < 15, а требуется при этом передвигать остальные элементы, стоящие за удаляемым, на позицию влево. Как бы сжимая массив, чтобы не оставались «пустые» элементы.
Показать решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
const n=20; var arr: array[1..n] of integer; i,j,m:integer; begin randomize; for i:=1 to n do begin arr[i]:=random(50); write(arr[i]:4); end; writeln; m:=n; i:=1; while i<=m do if arr[i]<15 then begin for j:=i to m-1 do arr[j]:=arr[j+1]; m:=m-1 end else i:=i+1; writeln('Результат:'); for i:=1 to m do write(arr[i]:4) end. |
Рассмотрим представленный алгоритм решения данной сложной задачи с одномерным массивом:
- строка 12: Здесь присваивание значения
n
переменнойm
требуется, т.к.n
— константа и не может быть изменена. Поскольку при «просмотре» массива в циклеwhile
некоторые элементы будут удаляться, то значениеm
, обозначающее длину массива, будет уменьшаться. - строка 21: Если очередной элемент не удаляется, то переходим к просмотру следующего элемента (
i := i + 1
) и не уменьшаем массив (m
не меняется).
Задача Array 18. Дан массив из N элементов в диапазоне [100;300]. Сжать массив, оставив в нем только те элементы, сумма цифр которых четная.
101 245 167 295 133 >>> 101(2) 167(14) 295(16)
[Название файла: task18.pas
]
Задача Array 19. Заполнить массив из 10 элементов случайными числами в интервале [0..4] и определить, есть ли в нем одинаковые соседние элементы.
Пример:
Исходный массив: 4 0 1 2 0 1 3 1 1 0 Ответ: есть
[Название файла: task19.pas
]
Задача Array 20.
- Определите в массиве
A
номер первого элемента, равногоX
. - Определите номер первого элемента, равного
X
, в первой половине массиваA
(массив имеет чётное число элементов). - Определите номер первого элемента, равного
X
, во второй половине массиваA
(массив имеет чётное число элементов).
[Название файла: task20.pas
]
Задача Array 21. Найти количество различных чисел в одномерном массиве.
[Название файла: task21.pas
]
Рассмотрим алгоритм решения:
Задача Array 22. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и сделать реверс отдельно для 1-ой и 2-ой половин массива.
Пример:
[Название файла: task22.pas
]
Задача Array 23. Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на 4 элемента.
Пример:
[Название файла: task23.pas
]
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
Нужно найти количество элементов равных минимальному. Выводит неправильное количество
var
s, i: integer;
A: array [1..5] of integer;
min := 367131;
begin
randomize;
for i := 1 to 5 do
a[i] := Random(1, 5);
begin
for i := 1 to 5 do write(a[i], ' ');
for i := 1 to 5 do
begin
if (a[i] < min) and (a[i] >= 0) then
begin
min := a[i];
end;
if a[i] = min then
begin
s := s + 1;
end;
end;
end;
writeln('Минимальный:', min, ' Количество - ', s);
end.
Kromster
13.5k12 золотых знаков43 серебряных знака72 бронзовых знака
задан 20 мая 2021 в 9:21
2
Необходимо 2 цикла – в одном искать минимум, во втором подсчитывать количество равных минимуму, либо в вашем цикле при нахождении нового минимума обнулять счетчик:
for i := 1 to 5 do
begin
if (a[i] < min) and (a[i] >= 0) then
begin
min := a[i];
s : = 0;
end;
if a[i] = min then
begin
s := s + 1;
end;
end;
В вашей реализации подсчитается количество элементов равных или меньше ВСЕХ предыдущих.
И еще. переменную s в начале программы надо инициализировать s:=0;
ответ дан 20 мая 2021 в 9:43
Sergey TatarintsevSergey Tatarintsev
5,8452 золотых знака5 серебряных знаков14 бронзовых знаков
1
Формулировка задачи:
Дан массив из N чисел в интервале от -32000 до 32000. (1<=N<=1000). Все элементы массива упорядочены (по возрастанию или по убыванию). Найти количество различных элементов в данном массиве. Ввести в первой строке одно число N. Во второй строке через один или несколько пробелов расположены N чисел. Вывести одно число – количество различных элементов в данном массиве.
Код к задаче: «Вычислить количество различных элементов в массиве»
textual
program z1644142; const nmax=1000; var n,i,k:integer; a:array [1..nmax] of integer; begin writeln('Введите количество элементов массива:'); readln(n); writeln('Введите значения элементов массива:'); for i:=1 to n do read(a[i]); k:=1; for i:=2 to n do if a[i-1]<>a[i] then k:=k+1; writeln(k) end.
Полезно ли:
7 голосов , оценка 4.000 из 5