Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 3
Регистрация: 27.12.2014
Сообщений: 68

Определение победителей

01.03.2015, 15:54. Показов 2238. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Только недавно начал изучать Delphi. Требуется помощь в следующей задаче.
Кликните здесь для просмотра всего текста
Каждый участник регистрируется на сайте игры под определённым игровым именем. Имена участников не повторяются.
Чемпионат проводится в течение определённого времени. В любой момент этого времени любой зарегистрированный участник может зайти на сайт чемпионата и начать зачётную игру. По окончании игры её результат (количество набранных очков) фиксируется и заносится в протокол.
Участники имеют право играть несколько раз. Количество попыток одного участника не ограничивается.
Окончательный результат участника определяется по одной игре, лучшей для данного участника.
Более высокое место в соревнованиях занимает участник, показавший лучший результат.
При равенстве результатов более высокое место занимает участник, раньше показавший лучший результат.
В ходе соревнований заполняется протокол, каждая строка которого описывает одну игру и содержит результат участника и его игровое имя. Протокол формируется в реальном времени по ходу проведения чемпионата, поэтому строки в нём расположены в порядке проведения игр: чем раньше встречается строка в протоколе, тем раньше закончилась соответствующая этой строке игра.
Напишите эффективную, в том числе по памяти, программу, которая по данным протокола определяет победителя и призёров. Гарантируется, что в чемпионате участвует не менее трёх игроков.
Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию.
Описание входных данных
Первая строка содержит число N- общее количество строк протокола. Каждая из следующих N строк содержит записанные через пробел результат участника (целое неотрицательное число, не превышающее 100 миллионов) и игровое имя (имя не может содержать пробелов). Строки исходных данных соответствуют строкам протокола и расположены в том же порядке, что и в протоколе.
Гарантируется, что количество участников соревнований не меньше 3.
Описание выходных данных
Программа должна вывести имена и результаты трёх лучших игроков по форме, приведённой ниже в примере.
Пример входных данных:
9
69485 Jack
95715 qwerty
95715 Alex
83647 М
197128 qwerty
95715 Jack
93289 Alex
95715 Alex
95710 M
Пример выходных данных для приведённого выше примера входных данных:
1 место. qwerty (197128)
2 место. Alex (95715)
3 место. Jack (95715)

Я реализовал эту задачу на Pascal'е. В Lazarus я набросал интерфейс. В memo1 нужно записывать список участников и их очки, потом сохранять в файл (я попробовал сделать с возможностью сохранять, даже если в пути есть русские буквы), открывать с отображением в том же memo1, а по нажатию "Выполнить" в memo2 должны быть отобраны 3 победителя.
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
var i, j, k, posName, N:longint;
    res0: integer;
    name0: string;
    name:array[1..3] of string;
    res: array[1..3] of integer;
begin
readln(N);
for i:=1 to 3 do res[i]:=0;
for i:=1 to N do begin
  readln(res0, name0);
    { ищем участнка в списке }    
  posName:= 1;
  while (posName < 3) and (name[posName] <> name0) do
    inc(posName);
    { ищем результат меньше, чем новый }    
  k:= 1;
  while (k < posName) and (res[k] >= res0) do
    inc(k);
    { если получен лучшй результат,... }    
  if res[k] < res0 then begin
    for j:=posName downto k+1 do begin
      res[j]:= res[j-1];
      name[j]:= name[j-1];
    end;
    res[k]:= res0;
    name[k]:= name0;
  end;
end;
for i:=1 to 3 do
  writeln(i,' место. ', name[i], ' (', res[i], ')');
end.
Прикрепил то, что сделал в Lazarus. Помогите разобраться.
Вложения
Тип файла: rar Задача.rar (124.5 Кб, 8 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2015, 15:54
Ответы с готовыми решениями:

Из списка участников конкурса, с их количеством баллов, выбрать 3-х победителей
Добрый день. Нужна помощь в решении задачи. Нужно из списка участников конкурса с их количеством баллов выбрать 3 победителей. Вот...

Определение победителей в соревнованиях по яйцеводству
в двух разных деревнях проходят соревнования по яйцеводству. Известно, что в каждом хозяйстве имеется по 500 кур. В день несут от 10 до 20...

Непростой запрос на определение победителей
Уважаемые гуру sql, прошу вашей помощи в написании запроса. В общем суть такая, --проводится выставка собак, выставляются очки за...

1
1 / 1 / 3
Регистрация: 27.12.2014
Сообщений: 68
03.03.2015, 17:10  [ТС]
Лучший ответ Сообщение было отмечено Ovenvan как решение

Решение

Написал код на Delphi. Только вот программа работает некорректно. Не могли бы вы помочь с решение этой проблемы.
Delphi
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Menus;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    MainMenu1: TMainMenu;
    Memo1: TMemo;
    Memo2: TMemo;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Splitter1: TSplitter;
    procedure MenuItem1Click(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
 
procedure TForm1.MenuItem1Click(Sender: TObject); {close}
begin
  Form1.Close;
end;
 
procedure TForm1.MenuItem3Click(Sender: TObject);{make}
var
    i, j, k, posName, n:longint;
    ires, iname, res0: integer;
    copyresult, name0: string;
    name1:array[1..3] of string;
    res1: array[1..3] of integer;
begin
n := 0;
for i := 0 to Memo1.Lines.Count-1 do
  if Trim(Memo1.Lines[i]) <> '' then Inc(n);
for i:=1 to 3 do res1[i]:=0;
for i:=1 to n do
  begin
  for ires := 0 to Memo1.Lines.Count - 1 do
    if Pos(#32, Memo1.Lines.Strings[ires]) <> 0 then
    begin
      res0 := strtoint(Copy(Memo1.Lines.Strings[ires], Pos( ' ', Memo1.Lines.Strings[ires] ) + 1, Length(Memo1.Lines.Strings[ires]) ));
      Break;
    end;
  begin
  for iname := 0 to Memo1.Lines.Count - 1 do
    if Pos(#32, Memo1.Lines.Strings[iname]) <> 0 then
    begin
      name0 := Copy(Memo1.Lines.Strings[iname], Pos(' ',Memo1.Lines.Strings[iname] ), Length(Memo1.Lines.Strings[iname]));
      Break;
    end;
  end;
    { ищем участнка в списке }
  posName:= 1;
  while (posName < 3) and (name1[posName] <> name0) do
    inc(posName);
    { ищем результат меньше, чем новый }
  k:= 1;
  while (k < posName) and (res1[k] >= res0) do
    inc(k);
    { если получен лучшй результат,... }
  if res1[k] < res0 then
  begin
    for j:=posName downto k+1 do
      begin
      res1[j]:= res1[j-1];
      name1[j]:= name1[j-1];
      end;
    res1[k]:= res0;
    name1[k]:= name0;
  end;
  end;
for i:=1 to 3 do
  begin
  Memo2.Lines.Add(name1);
  Memo2.Lines.Add(res1);
  end;
end;
 
procedure TForm1.MenuItem4Click(Sender: TObject); {open}
begin
  if OpenDialog1.Execute then
  Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
 
procedure TForm1.MenuItem5Click(Sender: TObject); {save}
 begin
   if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2015, 17:10
Помогаю со студенческими работами здесь

Количество победителей по классам
В условиях предыдущей задачи (https://www.cyberforum.ru/turbo-pascal/thread1684276.html) определите количество школьников, ставших...

Вывести победителей заплыва
Pascal ABC 1)В ЭВМ поступают результаты соревнований по плаванию для трех спортсменов. Составить программу, которая выбирает лучший...

Найти количество победителей олимпиады
По школам района(№15,181,211,213,215,367,1115,1125,1560,1820) собирается информация об участниках олимпиады: 'Номер Школы','Название...

Определить победителей в соревновании по стрельбе
В системе координат X, Y «нарисована» мишень на 10 кругов с центром в начале координат и шагом радиуса 10 единиц. Кругу с радиусом 10...

Задача про пары победителей
Дана корзина, в которой размещены и случайно перемешаны M шариков N цветов: M = s1+s2+...+sN, где sk – количество шариков цвета k. Ведущий...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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