Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2020, 19:38   #1
Alikcool
Новичок
Джуниор
 
Регистрация: 21.01.2020
Сообщений: 6
Сообщение Помогите решить в паскале

3. Составьте алгоритм и опишите его графическим способом Ввести массив из 10 чисел. Удалить из него все отрицательные элементы. Полученный новый массив вывести на экран.
Alikcool вне форума Ответить с цитированием
Старый 22.01.2020, 19:45   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Цитата:
Сообщение от Alikcool Посмотреть сообщение
Удалить из него все отрицательные элементы.
В Pascal удалить элементы можно только из динамического массива, и то через одно место. А именно - сдвигать все правые элементы на один влево. Это если речь именно о массивах, так как есть еще динамические списки, вот там операцию удаления можно реализовать прямым способом.
Arigato вне форума Ответить с цитированием
Старый 24.01.2020, 13:58   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

можно на этапе ввода массив в цикле увеличивать переменную отрицательных чисел, дальше инициализировать новый массив размером исходный минус число отрицательных и записать в него все не отрицательные числа, а потом пересоздать исходный массив без отрицательных чисел :D
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.01.2020, 23:40   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
пересоздать исходный массив без отрицательных чисел
Это, опять же, прокатит только для динамического массива. Так как количество элементов статического массива не может изменяться (а удаление предполагает уменьшение числа элементов).
Arigato вне форума Ответить с цитированием
Старый 25.01.2020, 10:13   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
(а удаление предполагает уменьшение числа элементов).
Думаю, что это "как договоримся". Размер статического массива может быть рассчитан на максимально требуемое число элементов, а задействованной может быть часть, определяемая специально заведённым параметром N - число реальных элементов в массиве.
digitalis вне форума Ответить с цитированием
Старый 25.01.2020, 11:53   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Неэффективное использование памяти, плюс неэффективная процедура удаления элемента (сдвиг всех элементов, стоящих правее, на один влево). Все же лучше использовать динамические списки. Хотя условие задачи требует массив....
Arigato вне форума Ответить с цитированием
Старый 25.01.2020, 13:04   #7
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Динамический список вида
Код:
TItem=record
  fInfo: integer;
  pNext: ^TItem;
end;
Это такое же неэффективное использование памяти. И что дольше - копирование ссылки на следующий элемент + dispose или копирование одного элемента (можно и не сдвигать постоянно на 1 элемент).
Код:
A: array [0..Nmax-1] of integer;
N: integer;
.........
j:=0;
for i:=0 to N-1 do
  if A[i]>=0 then
  begin
    A[j]:=A[i];
    inc(j)
  end;
N:=j;
FPaul вне форума Ответить с цитированием
Старый 25.01.2020, 14:17   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

В таком варианте перезаписывается весь массив. А с динамическим списком действия выполняются лишь с отрицательными элементами.
По памяти да, динамическая структура тоже не очень оптимальна, так как надо хранить еще и указатели. А если копнуть глубже, то где-то ведь еще хранится и состояние памяти - занята она или свободна.
Arigato вне форума Ответить с цитированием
Старый 25.01.2020, 20:57   #9
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Думаю, что для чисел длительности выполнения программы будут близки и для списка и массива.
А вот для каких-то больших типов данных (строки) - списки будут более быстрым вариантом.
FPaul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите решить в паскале Natyska2 Помощь студентам 0 02.06.2009 19:24
привет всем! помогите пожалуйста решить две задачи на паскале. я в паскале полный ноль. Пищенок Саша Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 13:46
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! VisTBacK Помощь студентам 6 19.09.2008 13:44
Помогите решить на Паскале 010 Паскаль, Turbo Pascal, PascalABC.NET 8 13.04.2008 15:06