Суббота, 25.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Задача на массив
resisterДата: Суббота, 20.12.2008, 04:32 | Сообщение # 1
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
Среди элементов массива Z(m) найти k (k<<m) наибольших. Поиск осуществить за один проход (просмотр) массива Z.

:shubizsetisforuma:
 
AlexanderДата: Суббота, 20.12.2008, 05:42 | Сообщение # 2
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
И в чём проблем-то? Задачка очень простая, ждём ваши наработки или конкретные вопросы.

Скажем дружно- нафиг нужно!
 
resisterДата: Суббота, 20.12.2008, 08:54 | Сообщение # 3
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
Мне момент нахождения наибольших значений не до конца понятен.

:shubizsetisforuma:
 
AlexanderДата: Суббота, 20.12.2008, 09:04 | Сообщение # 4
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
создаём массив из k элементов, туда копируем k первых элементов массива Z и сортируем. Затем в цикле от k+1 до m проверяем больше ли проверяемый элемент минимального из вспомогательного массива, и если да, то заменяем и сортируем.

Скажем дружно- нафиг нужно!
 
resisterДата: Воскресенье, 21.12.2008, 07:33 | Сообщение # 5
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
Code

begin
   vvod(z,m);
   k:= m div 2;
   l[k]:=z[m];
   for I := k+1 to m do
     begin
       while l[k]<z[i] do l[k]:=z[i];
     end;
    writeln('naibolshie elementi',' ',l[k]);
    readln;
end.

Добавлено (21.12.2008, 00:33)
---------------------------------------------
И чето не работает. Подскажите что здесь подправить?


:shubizsetisforuma:
 
AlexanderДата: Воскресенье, 21.12.2008, 07:46 | Сообщение # 6
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
В условии сказано найти k наибольших элементов(а тут я вообще не понял что делается, но на выводе только один). Можно вообще просто сделать, найти максимум k раз, главное предыдущий максимум не учитывать.

Скажем дружно- нафиг нужно!

Сообщение отредактировал Alexander - Воскресенье, 21.12.2008, 07:46
 
resisterДата: Воскресенье, 21.12.2008, 21:15 | Сообщение # 7
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
Ээээм а можете кодом помочь? А то чето я не понял куда тогда складывать эти k элементов? Или для каждого надо новый массив?

:shubizsetisforuma:
 
SeqularДата: Воскресенье, 21.12.2008, 21:24 | Сообщение # 8
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Ну можно на крайняк k объявить в константах, и выделить массив размером в k элементов дополнительно.

Поддерживаю также проект сообщество молодых сисадминов
 
AlexanderДата: Воскресенье, 21.12.2008, 21:55 | Сообщение # 9
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Ну тупо пузырьковую сортировку до катого элемента:
Code

    for i:=1 to k do
       for j:=m-1 downto i do
          if z[j+1]>z[j] then
             begin
                temp:=z[j];
                z[j]:=z[j+1];
                z[j+1]:=temp;
             end;
    {=================}
    for i:=1 to k do
       write(z[i]:4);   {это уже вывод результата}


Скажем дружно- нафиг нужно!
 
resisterДата: Понедельник, 22.12.2008, 02:25 | Сообщение # 10
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
Чет выдает она только первые k элементов.

:shubizsetisforuma:
 
AlexanderДата: Понедельник, 22.12.2008, 03:10 | Сообщение # 11
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (resister)
Чет выдает она только первые k элементов.

не первые, а наибольшие.


Скажем дружно- нафиг нужно!
 
resisterДата: Понедельник, 22.12.2008, 03:26 | Сообщение # 12
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
У меня по данному коду k первых.

:shubizsetisforuma:
 
AlexanderДата: Понедельник, 22.12.2008, 08:12 | Сообщение # 13
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Приведи весь программный код.

Скажем дружно- нафиг нужно!
 
resisterДата: Понедельник, 22.12.2008, 20:38 | Сообщение # 14
Старый знакомый
Группа: Пользователи
Сообщений: 25
Репутация: 0
Замечания: 0%
Статус: Offline
А все заработала. Я фиг знает мб глюк был.
Code
begin
    writeln('kolichestvo');
        readln(m);
        writeln('elementi');
        for i := 1 to m do
          readln(z[i]);
k:= 3;
     for i := 1 to m do
         l[i]:=z[i];
   for i := 1 to k do
        for j:= m -1 downto i do
           if l[j+1]>z[j] then
              begin
                 b:=z[j];
                 z[j]:=z[j+1];
                 z[j+1]:=b;
              end;
        writeln('naibolshie elementi massiva');
             for I := 1 to k do
        write(z[i]:4);
   readln;
end.

Добавлено (22.12.2008, 13:38)
---------------------------------------------
Огромное спасибо! Это мне на зачет просто))))


:shubizsetisforuma:
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;