в общем я тут написал прогу, но надо не много переделать вот код:
program ll;
uses crt;
type mas1=array[1..30000] of integer;
mas2=array[1..1000] of integer;
p=^mas1;
var
x:p;
k:mas2;
i,n,m:integer;
begin
clrscr;
writeln('vvedite n');
readln(n);
writeln('vvedite m');
readln(m);
new(x);
for i:=1 to m do k[i]:=0;
randomize;
for i:=1 to n do x^[i]:=random(m)+1;
writeln('isxodnbIu slu4aino 3apolnenbIu massiv x');
for i:=1 to n do begin
delay(1000);
write(x^[i]:2);
end;
writeln;
k[x^[i]]:=0;
for i:=1 to n do k[x^[i]]:=k[x^[i]]+1;
writeln('koli4estvo sootvetstvyI0hix elementov v massive x');
for i:=1 to m do writeln(i,' = ',k[i],' htyk; ');
dispose(x);
readln;
end.
Например мы вводим: n=10 m=5;
рандомно заполняется массив х 1 до n числами из диапозона 1..m
Вот так например: 3 3 4 2 5 5 3 4 2 3 2
Далее на экран выводит:
1- 0 раз
2- 3 раза
3- 4 раза
4- 2 раза
5- 2 раза
А мне нужно переделать так, чтобы. если какого-либо числа вобще нету в массиве х не нужно его ввыводить на экран это во-первых, во-вторых должно выводить повторение каждого числа из диапозона 1 до m в порядке его появления, вот напримере этого же массива:
3- 4 раза
4- 2 раза
2- 3 раза
5- 2 раза
Вот что должно выводить на экран! Можете сказать, что мне мне нужно изменить в своей программе, чтобы так мне выводило?
13 ноября 2009 в 17:00
Все уже не надо сам доделал) Спасибо всем кто помог!!!
13 ноября 2009 в 1:00
Вот только еще надо чтоб также выводило, если m ввести больше n
Например: n=3
m=10
Массив: 10 8 7
И должно выводить
10-1
8-1
7-1
13 ноября 2009 в 1:00
Владимир Красноглазый geek Гордеев
в вашем варианте считает нормально, если n>m вводим
мне нужно чтобы еще выводило нормально если m>n
13 ноября 2009 в 0:03
Тьфу, там ошибка мелкая была. Вот вернее //nopaste.info/c62fda32a5.html
> а что там есть динамическим массивом?
Я имел ввиду динамическое выделение памяти. Перепутал.
13 ноября 2009 в 0:02
> > Не охота ковыряться в неясном месиве символов.
> Я что-то вас не понял вобще, что вы хотели этим сказать?
Я тебя еле понял. Нет внятного условия. Нахрена тебе динамический массив?
Под форматированным вариантом кода я имел ввиду нижеследующее.
//nopaste.info/ad918960e0.html
13 ноября 2009 в 0:02
а что там есть динамическим массивом?
13 ноября 2009 в 0:00
Без дополнительного массива для хранения порядка появления чисел не обойтись. В этом случае: в дополнительном массиве типа mas1 индексы – порядок появления элемента, в нем хранишь само значение этих элементов.
Необходима проверка на совпадение с уже введенными числами (не особо трудоемкая) + счетчик индексов. Потом при выводе просто этот массив юзаешь.
Насчет рациональности: приносишь много вариантов, показываешь самый хреновый ("Можно сделать так"). Потом получше ("Но я тут еще исправил такое"). Потом еще лучше ("И вот тут оптимизировал"). И в конце – самый крутой ("И вот, на мой взгляд самый оптимальный вариант"). Если у вас ценят идеи и объем работы – покатит.
12 ноября 2009 в 23:04
Елки, двумерный доп. массив, в котором хранится значение элемента и порядок появления (+ один integer типа счетчик), перед выводом обычная сортировка по порядку.
Либо одномерный массив: по индексам – порядок появления введенного числа, по элементам – его значение. + доп. проверка (есть вероятность, длинная).
Если это для универа (?) – сойдет.
12 ноября 2009 в 23:04
Вобще для колледжа)
12 ноября 2009 в 23:04
Массив одномерный) Можешь немножко подробнее расписать?
12 ноября 2009 в 23:04
Придумай еще и третий вариант, чтобы там и по быстродействию, и по памяти было еще более нерационально, реализовываешь все 3 варианта, приносишь преподу. Показываешь по мере возрастания рациональности. К третьему варианту он проникнется.
12 ноября 2009 в 23:04
k[x^[i]]:=0;
for i:=1 to n do k[x^[i]]:=k[x^[i]]+1;
writeln('koli4estvo sootvetstvyI0hix elementov v massive x');
for i:=1 to m do
begin
if k[i]=0 then continue;
writeln(i,' = ',k[i],' htyk; ');
end;
Вот спервым условием разобрался, а вот со 2-м как?
12 ноября 2009 в 23:04
Что значит по мере возрастания рациональности можешь сказать, а то я что-то туплю)
12 ноября 2009 в 23:03
Владимир Красноглазый geek Гордеев
Форматированный вариант кода на стороннем сайте (пастебин например), в студию.
Не охота ковыряться в неясном месиве символов.
Я что-то вас не понял вобще, что вы хотели этим сказать?
12 ноября 2009 в 23:01
Вот мне со вторым условием необходимо помочь, а то я незнаю вобще как это делать!!!
12 ноября 2009 в 21:00
да пофиг на подсветку. Отступы хотя бы. А то похоже на мешанину хер-пойми чего с хер-пойми чем.
12 ноября 2009 в 20:05
а мне один препод заявлял что хайлалйт это все от лукавого =))
Ну я еще тогда понял что с ним не стоит связываться
12 ноября 2009 в 20:03
Форматированный вариант кода на стороннем сайте (пастебин например), в студию.
Не охота ковыряться в неясном месиве символов.
12 ноября 2009 в 20:01
Есть магическое заклинание if … then, которое легко справляется с первым требованием. Со вторым чуть сложнее. Но если заранее известно, что все числа больше 0, то числа для подсчета и вывода можно брать прямо из массива и в процессе подсчета обнулять, чтобы несколько раз не пересчитывать одно и то же число.
12 ноября 2009 в 17:04
Какой фрагмент кода твоей программы выводит результаты знаешь?
12 ноября 2009 в 17:04
k[x^[i]]:=0;
for i:=1 to n do k[x^[i]]:=k[x^[i]]+1; { здесь накапливается количество}
writeln('koli4estvo sootvetstvyI0hix elementov v massive x');
for i:=1 to m do writeln(i,' = ',k[i],' htyk; ');{вот здесь резульат выводится}