Имеется N аудиокассет. Про каждую известно: количество (до 20) записанных на ней песен или композиций, название и продолжительность (в минутах) каждого произведения, жанр (рок, романс, песня). Напечатать: а) название и продолжительность самой длинной песни;
б) название, жанр и продолжительность самого короткого музыкального произведения.
PascalABC

mykmin001 mykmin001    3   11.12.2021 08:45    2

Ответы
12VikaSmirnova34 12VikaSmirnova34  17.01.2024 02:03
Хорошо, давайте решим данный вопрос.

Для начала, предлагаю создать структуру данных в PascalABC, которая будет содержать информацию о каждой аудиокассете. Для этого мы можем использовать следующую запись:

```
type
SongGenre = (rock, romance, song);

Cassette = record
title: string;
songsCount: integer;
songs: array [1..20] of record
name: string;
duration: real;
genre: SongGenre;
end;
end;

```

Теперь, создадим массив кассет с размерностью N и заполним его информацией о каждой аудиокассете.

```
var
cassettes: array [1..N] of Cassette;
i, j: integer;

begin
// Здесь ваш код для заполнения информации о каждой аудиокассете
end.
```

А) Для того чтобы найти название и продолжительность самой длинной песни, нам нужно пройти по всем аудиокассетам и сравнить продолжительности всех песен. Мы можем создать переменные для хранения самой длинной песни и ее продолжительности:

```
var
longestSongTitle: string;
longestSongDuration: real;
```

Затем мы проходим по всем кассетам и песням на каждой кассете, и если продолжительность песни больше, чем продолжительность самой длинной песни, мы обновляем значения переменных:

```
longestSongDuration := 0;

for i := 1 to N do
begin
for j := 1 to cassettes[i].songsCount do
begin
if cassettes[i].songs[j].duration > longestSongDuration then
begin
longestSongTitle := cassettes[i].songs[j].name;
longestSongDuration := cassettes[i].songs[j].duration;
end;
end;
end;
```

Теперь в переменных `longestSongTitle` и `longestSongDuration` будут храниться название и продолжительность самой длинной песни соответственно.

Б) Аналогичным образом, чтобы найти название, жанр и продолжительность самого короткого музыкального произведения, мы можем использовать ту же структуру логики. Создаем переменные для хранения самого короткого произведения:

```
var
shortestSongTitle: string;
shortestSongDuration: real;
shortestSongGenre: SongGenre;

shortestSongDuration := MAXINT; // Инициализация переменной значением максимально возможного числа
```

Затем мы проходим по всем кассетам и песням на каждой кассете, и если продолжительность песни меньше, чем продолжительность самого короткого произведения, мы обновляем значения переменных:

```
for i := 1 to N do
begin
for j := 1 to cassettes[i].songsCount do
begin
if cassettes[i].songs[j].duration < shortestSongDuration then
begin
shortestSongTitle := cassettes[i].songs[j].name;
shortestSongGenre := cassettes[i].songs[j].genre;
shortestSongDuration := cassettes[i].songs[j].duration;
end;
end;
end;
```

Теперь в переменных `shortestSongTitle`, `shortestSongGenre` и `shortestSongDuration` будут храниться название, жанр и продолжительность самого короткого произведения соответственно.

Наконец, мы можем напечатать результаты:

```
writeln('Название и продолжительность самой длинной песни:');
writeln('Название: ', longestSongTitle);
writeln('Продолжительность: ', longestSongDuration:0:2);

writeln('Название, жанр и продолжительность самого короткого музыкального произведения:');
writeln('Название: ', shortestSongTitle);
writeln('Жанр: ', shortestSongGenre);
writeln('Продолжительность: ', shortestSongDuration:0:2);
```

Это решение позволит нам найти и напечатать название и продолжительность самой длинной песни, а также название, жанр и продолжительность самого короткого музыкального произведения.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика