Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
10 / 10 / 2
Регистрация: 09.08.2010
Сообщений: 321

Три торта

14.12.2011, 21:08. Показов 909. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такая задача. Есть три торта. Есть пакет. Пользователем задается масса и радиус каждого торта. Нужно положить эти три торта в пакет так, чтобы положение тортов в пакете удовлетворяло условию задачи. А условие такое: на торте с меньшей массой и с меньшим радиусом не может лежать торт с большей массой и большим радиусом. Допускается, что массы и радиусы тортов могут быть одинаковыми, в таком случае торты могут быть положены в пакете друг на друга в любом порядке. Допускается, что если, например, у вас есть два торта массой по 100 единиц массы и по 100 единиц радиуса, то на всем этом может лежать торт с меньшим радиусом и такой же массой или с меньшей массой и таким же радиусом или с такой же массой и таким же радиусом. Вот, что получилось у меня.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
uses CRT;
var massa, radius:array[0..2] of real;
i, flag1, flag2, indexBigMassa, indexBigRadius, indexSmallMassa, indexSmallRadius, indexAverageMassa, indexAverageRadius:integer;
massa1, radius1:real;
procedure Arrangement(a1,a2,a3,b1,b2,b3: real);
begin
   writeLN('Торты расставлены:');
   writeLN('Торт массой ', a1, ' и радиусом ', b1, ' находится внизу пакета;');
   writeLN('Торт массой  ', a2, ' и радиусом', b2, ' находится сверху предыдущего торта;');
   writeLN('Торт массой ', a3, ' и радиусом', b3, ' находится сверху всех остальных тортов.');
end;
function Average(a,b: integer): integer;
   var averagevalue: integer;
begin
   if ((a+b) = 1) then averagevalue:=2;
   if ((a+b) = 2) then averagevalue:=1;
   if ((a+b) = 3) then averagevalue:=0;
   Average := averagevalue;
end;
BEGIN
writeLN('Введите массу каждого торта и радиус каждого торта:');
writeLN('------------------------');
for i:= 0 to 2 do
Begin
write('Масса торта №', i+1,': ');
read(massa[i]);
write('Радиус торта №', i+1,': ');
read(radius[i]);
writeLN('------------------------');
End;
writeLN('=======================================================================');
for i:= 0 to 2 do
writeLN('Торт №', i+1, ': масса равна ', massa[i],',' , ' радиус равен ', radius[i], '.');
writeLN('=======================================================================');
for i:= 0 to 2 do
if ((massa[0] = massa[i]) and (radius[0] = radius[i])) then flag1:=flag1+1;
if (flag1 = 3) then Begin writeLN('Все торты имеют равные массы и радиусы, следовательно, можно ставить их друг на друга в любом порядке.'); exit; End
else
Begin
flag1:=0;
massa1:= massa[0];
radius1:=radius[0];
for i:= 0 to 2 do
if(massa[i] > massa1) then Begin massa1:= massa[i]; indexBigMassa:=i; End;
for i:= 0 to 2 do
if(radius[i] > radius1) then Begin radius1:=radius[i]; indexBigRadius:=i; End;
for i:= 0 to 2 do
if(massa[i] < massa1) then Begin massa1:=massa[i]; indexSmallMassa:=i; End;
for i:= 0 to 2 do
if(radius[i] < radius1) then Begin radius1:=radius[i]; indexSmallRadius:=i; End;
End;
indexAverageMassa:=Average(indexBigMassa,indexSmallMassa);
indexAverageRadius:=Average(indexBigRadius,indexSmallRadius);
for i:= 0 to 2 do
if (massa[0] = massa[i]) then flag1:=flag1+1;
if (flag1=3) then Begin Arrangement(massa[0],massa[1],massa[2],radius[indexBigRadius],radius[indexAverageRadius],radius[indexSmallRadius]); exit; End;
flag1:=0;
for i:= 0 to 2 do
if (radius[0] = radius[i]) then flag1:=flag1+1;
if (flag1=3) then Begin Arrangement(massa[indexBigMassa],massa[indexAverageMassa],massa[indexSmallMassa],radius[0],radius[1],radius[2]); exit; End;
if (radius[indexBigMassa] >= radius[indexAverageMassa]) then Begin if(radius[indexAverageMassa] >= radius[indexSmallMassa]) then flag2:=flag2+1; End;
if (massa[indexBigRadius] >= massa[indexAverageRadius]) then Begin if(massa[indexAverageRadius] >= massa[indexSmallRadius]) then flag2:=flag2+1; End;
if (flag2 = 2) then
Arrangement(massa[indexBigMassa],massa[indexAverageMassa],massa[indexSmallMassa],radius[indexBigRadius],radius[indexAverageRadius],radius[indexSmallRadius])
else
writeLN('Торты не могут быть расставлены согласно с условиями данной задачи.');
END.
Но я уверен, что все это можно сделать в разы проще. Так же считаю, что у меня где-то есть ошибка. Пожалуйста, помогите всю эту лабуду усовершенствовать. Ну или, по крайней мере, найти ошибку.
Ах да, масса и радиусы могут быть только целыми положительными числами.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2011, 21:08
Ответы с готовыми решениями:

Сдвинуть на три позиции влево, заменив последние три единицами
Сдвинуть на три позиции влево, заменив последние три единицами.

Переставить первые три и последние три элемента массива местами, сохраняя их следование
Дан массив целых чисел (n = 15), заполненный случайным образом числами из промежутка . Переставить первые три и последние три элемента...

Дан вектор D(n). Сдвинуть на три позиции влево, заменив последние три единицами
паскаль

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2011, 21:08
Помогаю со студенческими работами здесь

Переставить первые три и последние три элемента местами сохраняя порядок их следования
PascalABC

Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования
Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования. Задачу решить двумя способами: а) без...

Переставить первые три и последние три элемента массива
Помогите решить пожалуйста пару задач.... буду очень признателен....) 1. Дан одномерный массив из 20 элементов. Переставить первые три...

Найдите за один проход по массиву три его различных элемента,которые меньше всех остальных(три минимума)
const n=10; type myarray=array of integer; var a:myarray; m,k:integer; function minimum (m:myarray):integer; var i,min:integer; ...

Введите с клавиатуры три числа. Если числа равны, то увеличьте их в три раза и выведите результаты на экран
помогите пожалуйста Введите с клавиатуры три числа: X, У, Z, если числа равны, то увеличьте их в три раза и выведите результаты на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru