|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
||||||
Вывести на экран фамилии и имена трех худших по среднему баллу учеников26.02.2012, 22:00. Показов 2544. Ответов 17
Метки нет (Все метки)
задача
На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки: Иванов Петр 4 5 3 Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена. А вот мое "решение": Код:
0
|
||||||
| 26.02.2012, 22:00 | |
|
Ответы с готовыми решениями:
17
Вывести фамилии и имена трех худших по среднему баллу учеников
Вывести имена трех худших по баллу |
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
||||||
| 27.02.2012, 02:17 | ||||||
|
для начала так:
1
|
||||||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
||||||
| 27.02.2012, 11:19 [ТС] | ||||||
|
Спасибо! проглядел этот момент)
Подскажите еще, что в нижеприведенном коде не так?
Добавлено через 1 час 6 минут вот например, если после строки исходного когда: char *tmpData = new char[S] ; вставить : std::cin>>N; вылазит ошибка(
0
|
||||||
|
Полярный
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||
| 27.02.2012, 11:32 | ||
|
Нет ошибки:
http://liveworkspace.org/code/... f9cf10eafb И зачем вам stdafx.h? Добавлено через 1 минуту
0
|
||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
|||||||||||
| 27.02.2012, 11:45 [ТС] | |||||||||||
Но если я добавляю 2 сточки:
вылазят ошибки( Добавлено через 4 минуты во всяком случае, на моем компиляторе так.. Добавлено через 2 минуты после ввода "числа участников" вылазит "Необработанное исключение в "0x1027d2f3 (msvcr100d.dll)" в "EVILcooky.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000"."
0
|
|||||||||||
|
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
|
|
| 27.02.2012, 13:57 | |
|
Код вообще бередовый. У тебя есть массив с данными, под который ты выделяешь память. У тебя сначало N = 5, затем ты выделяешь память под 5! элементов, а затем вводишь N. Т.е. ты выделил память под 5! элементов, затем ввел N = 100, начал перебор всех, и когда у тебя i становится >= 5, то понятное дело вылезет исключение, ведь массив у тебя всего на 5 элементов.
Тебе надо сначало запрашивать ввод N, а уже после этого выделять память под массив.
0
|
|
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
||||||
| 27.02.2012, 14:09 [ТС] | ||||||
Добавлено через 3 минуты а если я нициализирую N(любым значением) в самой программе, то все идет отлично...
0
|
||||||
|
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
|
|
| 27.02.2012, 14:22 | |
|
Скинь заново весь подправленный код.
Добавлено через 5 минут Одна из твоих ошибок - ты неправильно используешь функцию strtok Добавлено через 4 минуты strcpy(pupin[i].user, strtok(tmpD," ")); Что тут получается? В строке tmpD ищется символ пробела, возращается на него указатель. А далее ты копируешь все, что стоит после пробела. А нужно наоборот копировать все что стоит до пробела. strtok(NULL," ") - Такая запись вообще не имее смысла, т.к. на месте NULL должна стоять строка, в которой выполняется поиск. А вообще советую читать MSDN! Добавлено через 45 секунд Я бы посоветовал сделать через потоки, либо используя функцию sscanf
1
|
|
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
|||||||||||||
| 27.02.2012, 14:41 [ТС] | |||||||||||||
Вот "исправленный вариант".. а можете привести в качестве примера фрагмен кода с ипользованием "потоков" или ф-ции сканф только условие следующее: данные о участнике(фамилия имя оценка оценка оценка) вводятся в одну строку, как указано в задании выше Добавлено через 11 минут
0
|
|||||||||||||
|
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
|
||||||
| 28.02.2012, 08:36 | ||||||
|
Приведи пример строки ввода.
Добавлено через 8 минут С использование sscanf получится вот так:
Ну и можешь попробовать через std::cin считать. Это тоже не сложно, писать пока не буду.
1
|
||||||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
|
| 28.02.2012, 08:37 [ТС] | |
|
Ремизова Валерия 5 4 3
0
|
|
|
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
|
|
| 28.02.2012, 08:45 | |
|
В моем примере, в строку имени занесется Валерия.
Вызов strtok(NULL," ") вызовет исключение(или просто вернет NULL) Эта функция ищет в строке первую встречу символов из другой строки. А то что ты написал, ты вместо строки передаешь NULL и ищешь пробел... В строке tmpD = "Ремизова Валерия 5 4 3" вызов char *a = strtok(tmpD, " ") Вернет указатель на пробел. Т.е. строка 'a' буде равна " Валерия 5 4 3" вызов a = strtok(a + 1, " ") Вернет указатель на второй пробел т.е. " 5 4 3". Пока все, потом смогу отписаться только вечером.
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||
| 28.02.2012, 09:11 | |||
|
Добавлено через 1 минуту
0
|
|||
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
||
| 28.02.2012, 09:19 [ТС] | ||
|
strtok(NULL, " "); -вторая лексема строки и работает моя программа именно так...выше есть рабочий вариант, проверь..
0
|
||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 28.02.2012, 09:21 | |
|
cooky, так я тебе ничего и не говорил. Я отвечал на необоснованные утверждения darkknight2008
0
|
|
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
||||||
| 28.02.2012, 09:33 [ТС] | ||||||
|
Nameless One, извиняюсь)
0
|
||||||
|
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
|
|
| 28.02.2012, 15:16 | |
|
Да, простите облажался(( После вызова std::cin >> N; в потоке ввода остается символ перевода строки. Поэтому при вызове std::cin.getline(tmpData,S); сразу ловится символ перевода строки и считается, что ввод закончен, т.е. строка остается пустой. Чтобы его отловить, можно после std::cin >> N; вставить getchar() либо std::cin.ignore();
1
|
|
|
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 9
|
|
| 28.02.2012, 15:29 [ТС] | |
|
Вот оно!))спасибо огромное)
0
|
|
| 28.02.2012, 15:29 | |
|
Помогаю со студенческими работами здесь
18
Вывести на экран фамилии и имена трех худших по среднему баллу учеников Вывести на экран фамилии и имена трех худших по среднему баллу учеников Вывести на экран фамилии и имена трех худших по среднему баллу учеников Вывести на экран фамилии и имена трех лучших по среднему баллу учеников Вывести на экран фамилии и имена трех лучших по среднему баллу учеников Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|