Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача... входные данные, Имя Фамилия 1 2 3 
V
    Опции темы
Master_
Дата 24.3.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Никак не въеду в задачу. Описание в самом низу. Программу начал писать, но что-то до алгоритмов так и не додумался.
Подскажите кто-нибудь, а? А то я уже привык с базами данных работать... а тут такая морока...

Код

<meta http-equiv="content-type" content="text/html; charset=utf8" /> 
<form action='' method='POST'>
<textarea rows='20' cols='30' name='ekz'>
Петров Иван 4 5 3
Фадеев Фадей 3 5 2
Иванов Коля 2 3 4
Дарява Дара 5 5 5
Колянова Ира 5 3 4
Борисов Ельцин 4 4 4
Птяшкова Юля 4 5 2
Ильина Галя 3 2 4
Гавренова Гаша 3 3 3
Елкин Сок 4 5 3
</textarea>
    <input type='submit' value='Отправить'></form>
<?php
if ( isset($_POST['ekz']) )
{
    $peoples = nl2br($_POST['ekz']); //переводим \n в <br />
    $peoples_array = explode('<br />', $peoples); //заносим все в массив, разделяя переводы бр 
    //print_r($peoples_array); //для отладки - массив учеников
    
    for ( $i=0; $i<=count($peoples_array); $i++ )
    {
        $array[$i]['
    }

}

?>


Код

   На вход программе подаются сведения о сдаче экзаменов учениками
   9-х классов некоторой средней школы. В первой строке сообщается
   количество учеников N, которое не меньше 10, но не превосходит 100,
   каждая из следующих N строк имеет следующий формат:
   <Фамилия> <Имя> <оценки>,
   где <Фамилия> – строка, состоящая не более чем из 20 символов,
   <Имя> – строка, состоящая не более чем из 15 символов, <оценки> –
   через пробел три целых числа, соответствующие оценкам по
   пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки>
   разделены одним пробелом. Пример входной строки:
   Иванов Петр 4 5 3
   Требуется написать как можно более эффективную программу (укажите
   используемую версию языка программирования, например, Borland Pascal
   7.0), которая будет выводить на экран фамилии и имена трех худших по
   среднему баллу учеников. Если среди остальных есть ученики,
   набравшие тот же средний балл, что и один из трех худших, то следует
   вывести и их фамилии и имена.


PM   Вверх
bars80080
Дата 24.3.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну, вопрос "написать как можно более эффективную программу" - чисто учебный, можно предложить рабочую прогу, но не максимально эффективную

а что тут собственно думать?

начало, в принципе покатит, хотя можно ведь и выкинуть лишнюю операцию с nl2br и резать символам перевода
первую строчку (ту что с кол-вом учеников) можно в утиль или для контроля
каждую следующую в массиве резать тем же explode и заносить в массив формата
Код

$k = explode(' ', $peoples_array[$i]);
$spisok['name'] = $k[0].' '.$k[1]; $spicok['asum'] = ($k[2] + $k[3] + $k[4]) / 3;

ну и поотдельности на всякий случай каждый параметр загнать в массив и затем вывести

три или больше учеников с минимальным asum - написать функцию сортировки массива usort() по нужному элементу, а затем сравнить, есть ли одинаковые с третьим [2] элементом и вывести всех на чистую воду
PM MAIL WWW   Вверх
awers
Дата 24.3.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Воть ) Твоя задача - выбрать первые 3 )
Код

<?php
$str = "Петров Иван 4 5 3
Фадеев Фадей 3 5 2
Иванов Коля 2 3 4
Дарява Дара 5 5 5
Колянова Ира 5 3 4
Борисов Ельцин 4 4 4
Птяшкова Юля 4 5 2
Ильина Галя 3 2 4
Гавренова Гаша 3 3 3
Елкин Сок 4 5 3";
$arr = explode("\n",$str);
$users = array();
foreach ($arr as $data){
    $elems = explode(' ',$data);
    $users[$elems[0].' '.$elems[1]] = round(($elems[2]+$elems[3]+$elems[4])/3,2);
}
$bad_users = array();

/* Сортируем по баллам */
array_multisort($users, SORT_ASC, SORT_STRING);

foreach ($users as $user=>$ball){
    $bad_users["$ball"][] = $user;
}
print_r($bad_users);
?>


Это сообщение отредактировал(а) awers - 24.3.2008, 18:53
PM MAIL WWW ICQ Skype   Вверх
Master_
Дата 24.3.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Вот пока что получилось... Может кто подскажет как это дело отсортировать и вывести три худших по оценкам? Надо по фамилиям... а после стандартных sort() фамилии пропадают...
Код

<meta http-equiv="content-type" content="text/html; charset=utf8" /> 
<form action='' method='POST'>
<textarea rows='20' cols='30' name='ekz'>
Петров Иван 4 5 3
Фадеев Фадей 3 5 2
Иванов Коля 2 3 4
Дарява Дара 5 5 5
Колянова Ира 5 3 4
Борисов Ельцин 4 4 4
Птяшкова Юля 4 5 2
Ильина Галя 3 2 4
Гавренова Гаша 3 3 3
Елкин Сок 4 5 3
</textarea>
    <input type='submit' value='Отправить'></form>
<?php
if ( isset($_POST['ekz']) )
{
    $peoples = nl2br($_POST['ekz']); //переводим \n в <br />
    $peoples_array = explode('<br />', $peoples); //заносим все в массив, разделяя переводы бр 
    //print_r($peoples_array); //для отладки - массив учеников
    
    for ( $i=0; $i<=count($peoples_array); $i++ )
    {
        $k = explode(' ', $peoples_array[$i]); //делаем новый массив путем обработки пробелом между фамилиями и оценками
        $ball[$k['0'].' '.$k['1']] = intval(($k['2'] + $k['3'] + $k['4']) / 3);
    }
    //while ( $i=0; 
    //sort($ball);
    foreach ($ball as $key=>$value)
    {
        echo $key . ' ' . $value . '<br />';
    }
    //print_r($ball);
    //ksort($ball);
    //print_r($ball);
}

?>


PM   Вверх
awers
Дата 24.3.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Master_, я вообще-то тебе дал рабочий пример. Что-то не устраивает?
PM MAIL WWW ICQ Skype   Вверх
awers
Дата 24.3.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



поставь перед print_r(...  array_splice($bad_users,3);
единственная проблема, это определение функцией array_splice string`овый ключ "3" - как числовой - 3
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.