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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2021, 17:04   #1
polj
Новичок
Джуниор
 
Регистрация: 23.01.2021
Сообщений: 1
Восклицание задача на одномерный массив

здравствуйте уважаемые программисты!
помогите пожалуйста написать код к задачи
условие :Имеются сведения о количестве проданных билетов в 17-ти вагонах поезда. Найти
наименее загруженный вагон, учитывая, что количество мест в вагоне зависит от типа
вагона: в мягком и купейном вагонах — по 36 мест, а в плацкартном — 46 мест.

нужно создать 3 одномерных массива(количество проданных билетов, количество мест в зависимости от типа вагона и третий массив для вычисления разницы между первыми 2-мя массивами) также при заполнении массива сделать проверку, чтобы кол-во проданных билетов не превышало кол-во мест
Нужно написать код с использованием данных процедур:
Заполнение массива
Вывод массива
Поиск максимума в 3 массиве

Это всё,что сделала сама
const n=17;
type massiv= array[1..n] of integer;
var
Place,ticket,difference:massiv;
max,m:integer;
procedure zapol(m1:integer;var B:massiv);
var i,key:integer;
flag:boolean;
begin
for i:=1 to m1 do
B[i]:= random(2) * 10 + 36;
readln(key);
flag:=TRUE;
i:=1;
While (i<=m1) and flag do begin
if key<=B[i] then flag:=FALSE
else i:=i+1;
if flag then writeln ('Введите занаво количество проданных билетов ')
else writeln ('Совпадение с элементом номер = ', i);

readln(B[i]);
end;
end;
procedure vivod(m1:integer;var B:massiv);
var i:integer;
begin
for i:=1 to m1 do
write(B[i]:5);
writeln;
end;

begin
repeat
writeln('Введите количество вагонов');
readln(m);
until(m>0) and(m<=17);
writeln('Введите количество проданных билетов');
zapol(m,ticket);
vivod(m,ticket);
end.
застряла на проверки в заполнении массива,не могу сообразить как это оформить
ПОЖАЛУЙСТА ,помогите!буду рада любой помощи!
polj вне форума Ответить с цитированием
Старый 23.01.2021, 22:04   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Сложно разбираться в таком коде, но используя его за основу и изменив алгоритм решил что-то изобразить.
Пользователь вводит число вагонов не более 17. Остальные вагоны получают тип -1 - без мест.
Функция случайным образом назначает тип вагона (число посадочных мест).
Генерируется число 0 <= N < 100. Если N меньше 50, то 46 мест, а иначе - 36.
Эта же функция подсчитывает общее число посадочных мест в поезде.
Пользователь вводит число проданных билетов, но не больше числа посадочных мест.
Следующая процедура, для каждого билета, генерирует номер вагона.
При этом проверяется оставшееся число мест.
Если в вагоне есть свободные места, то -1, а иначе вновь генерируем номер вагона.
Это не столь эффективно (повторная генерация), но это простое решение.
После этого в массиве остаются только свободные места.
Необходимо найти номер вагона с максимальным числом свободных мест.
Берёшь первый вагон за эталон. Далее просматриваешь по всем вагонам. Если в текущем вагоне больше свободных мест, то обновляешь переменные, которые отвечают за номер вагона и число свободных мест.
Код:
const n = 17;

type massiv= array[1..n] of integer;

function setPlace(n: integer; var mas: massiv): integer;
{n - число вагонов; mas - массив расстановки вагонов}
{если вагонов меньше 17, то у остальных тип ноль: -1 мест}
{возвращает число мест в поезде}
var i, k: integer; {i - номер вагона}
    sum: integer;
begin
   sum := 0;
   for i:=1 to 17 do
      if i <= n then begin
         k := random(100);
         if k >=50 then       {определи тип вагона}
            mas[i] := 36
         else
            mas[i] := 46;
         sum := sum + mas[i]; {число мест в поезде}
      end
      else mas[i] := -1;       {остальные вагоны}
      setPlace := sum;
end;

procedure setTicket(n: integer; var mas: massiv);
{n - продано билетов; mas - массив расстановки вагонов}
var i, k, m: integer; {i - номер вагона, m - число вагонов}
begin
   for m := 1 to 17 do    {число вагонов}
      if mas[m] < 0 then  {остальных вагонов нет}
         break;

   for i := 1 to n do               {каждый билет с номером вагона}
      while True do begin           {распределим билеты по вагонам}
         k := random(m) + 1;        {номер вагона}
         if mas[k] > 0 then begin   {вагон не заполнен}
            mas[k] := mas[k] - 1;   {осталось свободных мест}
            break;
         end;
      end;
end;

procedure vivod(var mas: massiv);
var i:integer;
begin
   for i:=1 to 17 do
      if mas[i] >= 0 then  {Заполняемость}
         write(mas[i]:5);
end;

var
    Place: massiv;
   ticket: massiv;
    delta: massiv;
   maxT, m: integer; {maxT - число мест в поезде,  m - вагонов в поезде}
   Tickets: integer; {продано билетов}
 max, nvag: integer; {max - свободных мест, nvag - номер вагона}

begin
   randomize;
   while True do begin   {Длина поезда}
      write('Введите число вагонов [0 < N <= 17]: ');
      readln(m);
      if (m > 0) and (m <= 17) then
         break;
   end;

   maxT := setPlace(m, Place);  {размещение типов вагонов}

   while True do begin   {Билетов продано}
      write('Введите число проданных билетов [0 < N <', maxT:5, ']: ');
      readln(Tickets);
      if (Tickets > 0) and (Tickets <= maxT) then
         break;
   end;

   setTicket(Tickets, Place); {Теперь в Place число свободных мест}

   vivod(Place);

   {В этом месте твой код. Необходимо найти вагон с наибольшим числом}
   {свободных мест: Просматриваем массив Place                       }
   {nvag := 1,  max := Place[1]. Далее, в цикле от 2 до 17           }
   {ищем подходящий вагон.                                           }
   {Поиск заканчиваем, если в вагоне -1 мест. См. функцию setPlace() }

end.
PS:
1. Для форматирования кода следует вставить код в форму
2. Выделить код и нажать кнопку [CODE], которая находится над формой ввода.

PSS: Так думаю, что этого достаточно для переделывания кода под свои нужды, так как в предложенном варианте массивов меньше.
ticket и delta (difference в оригинале) не использованы.
Как-то так, ...

Последний раз редактировалось ViktorR; 23.01.2021 в 22:51. Причина: Устранил ошибку в описании параметров процедуры procedure setTicket(n: integer; var mas: massiv);
ViktorR вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив A размером 3*3. Составить программу, записывающие положительные элементы этого массива A в одномерный массив B, а отрицательные - в одномерный массив C SkaNi Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2017 08:07
Задача на одномерный массив. MrRifleman Общие вопросы C/C++ 1 24.03.2012 17:04
Задача на одномерный массив kot__93 Помощь студентам 1 23.11.2010 23:18
Задача на одномерный массив kot__93 Общие вопросы C/C++ 0 23.11.2010 22:15