Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 20.02.2020, 19:47   #1
Екатерина_________
Новичок
Джуниор
 
Регистрация: 20.02.2020
Сообщений: 5
Восклицание Объясните программу. За что отвечает каждая команда?

{Запись о товаре на складе представляет собой структуру с полями:
номер склада, код товара, наименование товара, дата поступления
на склад, срок хранения в днях, количество единиц товара,
цена за единицу товара. Поиск - по номеру склада.}
type
firm = record
number :integer ;
cod: integer;
title: string[50];
data : string[50];
shelflife: string[50];
count: integer;
price: integer;end;
arr = array [1..100] of firm;
procedure sort_n(var m: arr; n: integer); // процедура сортировки названия
var i, j: integer;
buf: firm; begin
for i := 1 to n - 1 do
for j := i + 1 to n do
if m[i].title > m[j].title then begin
buf := m[i];
m[i] := m[j];
m[j] := buf; end;
end;
procedure sort_s(var m: arr; n: integer); // процедура сортировки цены
var i, j: integer;
buf: firm; begin
for i := 1 to n - 1 do
for j := i + 1 to n do
if m[i].price > m[j].price then begin
buf := m[i];
m[i] := m[j];
m[j] := buf; end;
end;
var a: arr;
i, n, temp, j: integer;
s: string;
begin
writeln('Введите количество записей'); readln(n);
for i := 1 to n do begin
writeln('Введите номер склада '); readln(a[i].number);
writeln('Введите код товара '); readln(a[i].cod);
writeln('Введите наименование товара'); readln(a[i].title);
writeln('Введите дату поступления на склад'); readln(a[i].data);
writeln('Введите срок хранения'); readln(a[i].shelflife);
writeln('Введите кол-во едениц товара '); readln(a[i].count);
writeln('Введите цену '); readln(a[i].price);
writeln; end;
sort_n(a, n);
sort_s(a, n);
writeln('Отсортированный список товаров');
for j := 1 to n do
begin
writeln(a[j].number);
writeln(a[j].title);
writeln;
end;

end.
Екатерина_________ вне форума Ответить с цитированием
Старый 21.02.2020, 09:16   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,554
По умолчанию

Ну для начала текст исходника следовало бы отформатировать - глядишь, и структура проги немного прояснится. Не знаешь как - посмотри хотя бы в этом форуме нормальные вопросы и ответы. А вопрос "За что отвечает каждая команда?" вообще убивает всякое желание отвечать - видимо, для ТС Паскаль - как для меня хинди+бенгали.
Код:
for i := 1 to n - 1 do
, например, отвечает за организацию цикла. Дальше продолжать? Какие слова непонятны: for, to, do ?
Стесняюсь спросить - книжка по Паскалю хоть раз в руках была ?

Последний раз редактировалось digitalis; 21.02.2020 в 09:40.
digitalis вне форума Ответить с цитированием
Старый 21.02.2020, 09:51   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,062
По умолчанию

Код:
  firm = record // наша запись будем иметь следующие параметры (смотри запросы на ввод данных)
     number :integer ; //  какой-то номер
     cod: integer; // -"- код
     title: string[50]; // -"- название
     data : string[50]; // -"- дата
     shelflife: string[50]; // -"-
     count: integer; 
     price: integer;
  end;
Код:
procedure sort_n(var m: arr; n: integer); // процедура сортировки названия
var 
  i, j: integer;
  buf: firm; 
begin // классический "пузырек"
  for i := 1 to n - 1 do // проверяем все места от начала до предпоследнего (последний просто не с чем будет сравнивать)
  for j := i + 1 to n do // и сравниваем его(текущий) со всеми последующими (у последнего последующих просто нет) 
   // выбираем среди всех этих самый лучший 
    if m[i].title > m[j].title then begin // если проверяемый(из второго цикла) < текущего(из первого цикла) ПО ВЫБРАНОМУ параметру, то ... 
      buf := m[i];  // ... переставляем 1.сначала запомним где-нибудь текущий(по первому циклу)
      m[i] := m[j]; // 2. поставим на его место последующий (из второго цикла)
      m[j] := buf;  // 3. а вместо него(на место последующего) поставим то что запомнили (см.1)
    end; //  и так поступим с каждой парой элементов (если тот что дальше лучше то меняем их местами)
end;
Код:
procedure sort_s(var m: arr; n: integer); // процедура сортировки цены
var 
  i, j: integer;
  buf: firm; 
begin // то же самое ( смотри выше) но по другому параметру
  for i := 1 to n - 1 do
  for j := i + 1 to n do
    if m[i].price > m[j].price then begin
      buf := m[i];
      m[i] := m[j];
      m[j] := buf; 
    end;
end;
Код:
var 
  a: arr;
  i, n, temp, j: integer;
  s: string;
begin
  writeln('Введите количество записей'); readln(n); // исключительно запрос на ввод данных (вывод(writeln) что программа хочет получить и получение(readln) оного
  
  for i := 1 to n do begin // повторение ввода данных указанное ранее число раз
    writeln('Введите номер склада '); readln(a[i].number); // ввод одного из параметров какой-либо записи
    writeln('Введите код товара '); readln(a[i].cod); // и так далее каждый из параметров ...
    writeln('Введите наименование товара'); readln(a[i].title);
    writeln('Введите дату поступления на склад'); readln(a[i].data);
    writeln('Введите срок хранения'); readln(a[i].shelflife);
    writeln('Введите кол-во едениц товара '); readln(a[i].count);
    writeln('Введите цену '); readln(a[i].price);
    writeln; // вывод "разделительной" строки между записями
  end; // и так для каждой из заданного количества записей

  sort_n(a, n); // сортируем записи по одному из параметров (но не выводим)
  sort_s(a, n); // забываем о прошлой сортировке и сортируем снова но по другому параметру

  writeln('Отсортированный список товаров'); // выводим то что написано
  for j := 1 to n do begin // повторение вывода для каждой записи
    writeln(a[j].number); // выводим один из параметров записи
    writeln(a[j].title); // выводим другой параметр записи
    writeln; // выводим "разделительную" строку
  end; // и так для каждой записи
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.02.2020, 14:31   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,554
По умолчанию

Ну вот, есть на форуме добрые люди - всё разжуют, так что не надо ни на занятия ходить, ни книжки, так-их-разэтак, читать
digitalis вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Демонстрация фрактальной графики. Поле из одуванчиков. Напишите пожалуйста что выполняет каждая строчка и за что отвечает Viksa123 Паскаль, Turbo Pascal, PascalABC.NET 5 08.03.2015 10:47
объясните эту программу Zulfat 22 Общие вопросы C/C++ 3 22.11.2012 09:31
Команда System: запуск программы в свёрнутом режиме, Не работает команда /min Me777 Общие вопросы C/C++ 0 12.07.2011 10:49
Объясните, что значит каждая строка в программе *natali* Помощь студентам 5 07.11.2009 15:17
Напишите пожалуйста за что отвечает каждая строчка Saaashka Помощь студентам 1 02.07.2008 07:34


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840