Задать вопрос
9 марта, 22:46

Написать программу подведения итогов олимпийских игр, программу пользователь должен ввести кол-во медалей разного достоинства заваёваной каждой командой участниц, а программа должна посчитать общее число медалей и соотвествующие число очков, после чего упорядочить список в соответствии с набранным кол-ом очков за золотую 7 очков, серебряная 6 очков, бронзовая 5 очков.

+4
Ответы (1)
  1. 9 марта, 23:38
    0
    Program Olympic;

    const

    nMax = 50; { максимум 50 команд }

    cGold = 7;

    cSilver = 6;

    cBronze = 5;

    type

    cName = string[20];

    RC = record

    position: byte;

    name: cName;

    nGold: byte;

    nSilver: byte;

    nBronze: byte;

    cTotal: byte

    end;

    tM = array[1 ... nMax, 1 ... 2] of byte;

    procedure Shell (var a: tM; n: integer) ;

    { Сортировка методом Шелла массива a[1 ... n, 1 ... 2]

    по убыванию значений элементов второго столбца. }

    var

    i, j, step, t1, t2: integer;

    begin

    step : = n div 2;

    while step > 0 do

    begin

    for j : = n - step downto 1 do

    begin

    i : = j;

    while i < = n - step do

    begin

    if a[i, 2] < a[i + step, 2] then

    begin

    t1 : = a[i, 1]; t2 : = a[i, 2];

    a[i, 1] : = a[i + 1, 1]; a[i, 2] : = a[i + 1, 2];

    a[i + 1, 1] : = t1; a[i + 1, 2] : = t2

    end;

    i : = i + step

    end

    end;

    step : = step div 2

    end

    end;

    { Основная программа }

    var

    f: file of RC;

    a: tM;

    i, n: byte;

    s: cName;

    t: RC;

    begin

    { Организуем ввод данных }

    Assign (f, 'Olympic. in') ;

    Rewrite (f) ;

    n : = 0;

    repeat

    Writeln ('Введите наименование команды или * для окончания ввода') ;

    Readln (s) ;

    if s[1] '*' then

    begin

    n : = n + 1;

    Write ('Количество медалей: золото, серебро, бронза: ') ;

    Readln (t. nGold, t. nSilver, t. nBronze) ;

    t. position : = n;

    t. name : = s;

    t. cTotal : = t. nGold * cGold + t. nSilver * cSilver + t. nBronze * cBronze;

    Write (f, t) ;

    a[n, 1] : = t. position; a[n, 2] : = t. cTotal

    end

    until s[1] = '*';

    Reset (f) ;

    { Выполняем сортировку заполненного массива a,

    определяя положение записей в файле }

    Shell (a, n) ;

    { Выводим результаты, используя прямой доступ к файлу }

    Writeln ('Результаты олимпиады') ;

    for i : = 1 to n do

    begin

    seek (f, a[i, 1] - 1) ;

    Read (f, t) ;

    Writeln (i, ': ', t. name, ' (', t. nGold, ' зол, ', t. nSilver, ' сер, ',

    t. nBronze, ' бронз), очков - ', t. cTotal)

    end;

    Close (f) ;

    end.

    Тестовое решение:

    Введите наименование команды или * для окончания ввода

    Веселые медузы

    Количество медалей: золото, серебро, бронза: 4 6 10

    Введите наименование команды или * для окончания ввода

    Юные сурки

    Количество медалей: золото, серебро, бронза: 2 0 5

    Введите наименование команды или * для окончания ввода

    Черепашки-ниндзя

    Количество медалей: золото, серебро, бронза: 3 7 11

    Введите наименование команды или * для окончания ввода

    *

    Результаты олимпиады

    1: Черепашки-ниндзя (3 зол, 7 сер, 11 бронз), очков - 118

    2: Веселые медузы (4 зол, 6 сер, 10 бронз), очков - 114

    3: Юные сурки (2 зол, 0 сер, 5 бронз), очков - 39
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Написать программу подведения итогов олимпийских игр, программу пользователь должен ввести кол-во медалей разного достоинства заваёваной ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы