Помощь - Поиск - Пользователи - Календарь
Полная версия: задачка про конкурс в Москве.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Nfsmaster
конкурс песни в Москве. Там выступают 10 участников. каждый пел по 3 песни: новую песню о Москве, старую песню о Москве и песню московского композитора. каждая песня оценивалась жюри сообща целым числом из 10 баллов и выводился средний балл все 3 песен(вещественное число) Эти 4 результата выявлялись на табло кроме того зрители в зале отдавали артисту какое-либо место и это было 5 результатом. зрители конкурса после выступления в течении 5 минут могли позвонить дежруному и отдать свой голос. при подведении итогов подсчитывалось общее число позвонивших в течении концерта и расчитывался округленный до целого процент голосов телезрителей отданных каждому участнику который являлся 6 результатом. артист являлся победителем конкурса если: а) средний былл жюри не нижу 6 б) место определенное зрителями не больше пятого в) кол=во % позвонивших телезрителей не ниже семи. если артист становился победителем он получал приз от мэра, если новая песня о москве составляет не менее 30% от суммы баллов за 3 песни.
volvo
Ну, и где, собственно вопрос? Информации много, а вот вопроса-то не видно... Что сделать-то надо??? И, заодно, что ТЫ уже сделал тоже расскажи...
Nfsmaster
в том то и дело что вопроса нет а я и решить то и не могу. да вы меня и так знаете. не рублю я полностью в паскале! поэтому и приходится вас просить чтобы вы мне либо вдолбили хоть каплю либо решили и всеsad.gif
Altair
То, что там написанно - "сказка", "легенда" smile.gif

Определи типы данных свои (в задании все это указанно).
И начальные алгоритмы обработки ( в задании что-то сказанно о оценивании и округлении).
Потом поставь точную задачу.

Вобщем - формализуй задачу! Потом посмотрим, что дальше делать
Nfsmaster
алгоритмы обработки? это что? mega_chok.gif
volvo
Nfsmaster, тебе же сказали, твой пост пока напоминает "иди туда, не знаю куда, и принеси то, не знаю, что..."

Это даже задачей назвать сложно, потому как нету задания... Вот поставь правильно задание, потом будем продолжать...
Nfsmaster
мдяяя...с удовольствием если бы знал...
Гость
nfsmaster - я
ну может тама надо узнать кто победил?
Altair
Цитата
ну может тама надо

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

Цитата
ну может тама надо узнать кто победил?

а может базу составить кто сколько набрал, а ? dry.gif
Гость
мне бы хотя бы что-то. еще и по екселю задали такую задачку! ужасsad.gif
Altair
Цитата
мне бы хотя бы что-то

да ты понимашь, мы бы рады чем то помочь, мы здесь для этого, но чем ? Если ты сам не знаешь что тебе надо сделать, то откуда мы знаем ? Мы же не телепаты!
Гость
понимаю. ну ладно. пусть будет мой первый вариант. кто выиграл
Altair
Для начала вот тебе таблица, показывающая модель данных.
Нажмите для просмотра прикрепленного файла

определи типы в паскале, и как-то заполняй данные.
Рекомендую использовать что-то типа такого
type
tint= integer;
tfloat = single;
tdata = record
old,new,users:tint;
average: tfloat;
end;
tdb = array[0..9] of tdata;

Реши откуда данные беруться. (файл или вводяться с клавиатуры.)


ну вот с чтением из файла можно примерно так...
const
user_count = 9;
type
tint= integer;
tfloat = single;
tdata = record
_old,_new,_users:tint;
_average: tfloat;
end;
tdb = array[0..user_count] of tdata;

function read_data (fn:string; var data:tdb; var count:tint) : boolean;
var
f:text;
begin
count:=0;
assign (f,fn);
{$I-} reset(f); {$I+}
if ioresult<> 0 then read_data:=false else begin
read_data:=true;
while not eof(f) do begin
with data[count] do readln(f,_old,_new,_users,_average);
end;
end;
close(f);
end;

var
i:tint;
d:tdb;
begin
if not read_data('d:\r.txt',d,i) then begin
writeln('error')
end else begin
get_win(d,i);
end;
end.


ну тебе осталось только добавить get_win процедуру...
и все.
klem4
В моем представлении это выглядит следующим образом, пока без вывода тыблицы на экран, и надо потестировать еще

uses crt;
const
n = 3;
m = 3;
type

TSinger = record
songs : array [1..m] of byte; // old, new, compose
sr : single;
usersPos : byte;
usersPrs : byte;
end;

TTable = array [1..n] of TSinger;

procedure ReadTable(var T : TTable; usrs : word);
var
i,j : byte;
onePrs : single;
begin
onePrs := usrs / 100;
for i := 1 to n do
with T[i] do begin
writeln('Артист N ',i);
writeln;
sr := 0;
writeln('Введите оцники за старую, новую, и песню М. копозитора о Москве :');
for j := 1 to m do begin
write('points[',j,']='); readln(songs[j]);
sr := sr + songs[j];
end;

writeln;

sr := sr / m;

write('На какое место артиста определила публика : '); readln(usersPos);

if usrs > 0 then begin
write('Сколько человек проголосовало по телефону : '); readln(usersPrs);
usrs := usrs - usersPrs;
usersPrs := round(usersPrs / onePrs);
end
else usersPrs := 0;
writeln;
end;
end;

function FindWinner(T : TTable) : byte;
var
i,j : byte;
win : boolean;
begin
win := false;
FindWinner := 0;
i := 1;
while (i <= n) and not(win) do
with T[i] do begin
win := true;
win := (sr > 6);
if win then begin
win := (usersPos <= 5);
if win then win := (usersPrs >= 7);
end;
if not(win) then inc(i) else FindWinner := i;
end;
end;

function GetPrize(T : TTable; win : byte) : boolean;
var
all,j : byte;
prs : byte;
prize : boolean;
begin
all := 0;
with T[win] do begin
for j := 1 to m do
all := all + songs[j];
prize := ((all / 100) * songs[2] >= 30);
end;
end;

var
Table : TTable;
users : word;
winner : byte;

begin

clrscr;

write('Сколько зрителей пишло на концерт :'); readln(users);

ReadTable(Table, users);

winner := FindWinner(Table);

if winner <> 0 then begin
write('Победитель - участник N ',winner);
if GetPrize(Table, winner) then write(' и он получает приз мэра');
end;

readln;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.