Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Подсчёт частоты появления каждого элемента., Посчитать cколько раз встречается каждое число (на Pascal )
 
Добрый час.
Дан набор чисел. Как посчитать сколько раз встречается каждое число (на Pascal)?
 
системное программирование?
не вижу проблемы в цикле for i:=1 to n do, операторе if и работе с массивом
 
0<=ai<=100, n<=100
Хочу понять логику, как ДЛЯ КАЖДОГО числа подсчитать сколько раз оно встречается.
Изменено: log_in - 09.11.2011 16:45:08
 
С такой постановкой вопроса (числа в массиве не превышают значения  100) эта задача решается так:

заводите массив целочисленных  от 0 до 100 (допустим назовем его A1)
в цикле от 0 до количество_элементов_исходного_массива -1
увеличить значение элемента [значение_элемента_исходного_массива ] массива А1 на 1:

вывести на экран примерно так
   for i:=0 to 100 do
      WriteLn('numeric '+i+'  count: '+A1[i]);

;)
 
Универсальный вариант:

заводим динамический массив целочисленных (все тот же А1)


for i:=0 to количество_элементов_исходного_массива -1 do
 begin
     if исходный_массив[i]> Length(A1) then SetLength(A1,исходный_массив[i]);
     inc(A1[исходный_массив[i]]);
 end;

for i:=0 to Length(A1)-1 do WriteLn('numeric '+i+' count: '+A1[i]);

способ рабочий но есть парочка подводных камней, вот каких - хочу это услышать от вас ув. Топикстартер. :)
Изменено: Александр * - 09.11.2011 17:08:33
 
Цитата
Александр Неимеетзначения пишет:
исходный_массив[i]> Length(A1) then SetLength(A1,исходный_массив[i]);
Почему?
 
Цитата
log_in пишет: Почему?
ну а вы как думаете?
 
Всё, я поняла это=) А о каких подводных камнях Вы говорили?
Изменено: log_in - 09.11.2011 17:26:16
 
ну а этот вариант  - вообще тогда взрыв мозга....

сразу уж исходником,  :(

Код
type TMyRec = packed record
                                            num:integer;
                                            count:integer;
                                         end;
var
      i,j:integer;
      MyMass:array of TMyRec;
      added:Boolean;
begin
 for i:=0 to  количество_элементов_исходного_массива -1 do
  begin
    added:=false;
    for j:=0 to length(MyMass)-1 do
    begin
       if MyMass[j].num = исходный_массив[i] then inc(MyMass[j].count);
       added:=true;
       break;
    end;
    if not added then
    begin
       setlength(MyMass,Length(MyMass)+1);
       MyMass[Length(MyMass)-1].num:=исходный_массив[i];
       MyMass[Length(MyMass)-1].count:=1;
    end;    
  end;
// вывод как уже писал
end;
Изменено: Александр * - 09.11.2011 17:35:31
 
Цитата
Александр Неимеетзначения пишет:
автору все равно не поможет
=)) Хороший стимул для развития. Спасибо.
P.S. Кстати по коду более понятно)
 
только учитывайте, что для вашей задачи в той постановке, это не самый оптимальный вариант решения, попробуйте написать самый первый мною предложенный вариант.
Страницы: 1
Читают тему