Russian Qt Forum
Ноябрь 24, 2024, 20:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6 7 ... 12   Вниз
  Печать  
Автор Тема: Тренировка навыков быстрого программирования  (Прочитано 81011 раз)
Hrundel
Гость
« Ответ #60 : Февраль 14, 2014, 21:40 »

Можете привести пример, где на практике это будет нужно? Пример из Вашей практики, так сказать.

Что, неужели не хватает фантазии? Элементарный пример - компьютерные сети и скорость соединений. Например выбор не самой короткой, а самой быстрой маршрутизации.
Да и вообще, с моей точки зрения,  если тебе приходится объяснять значимость графов в информатике - то лучше забей на это дело! Или иди переучиваться.
А почему тебя твоя профессия не устраивает? Зачем делать то, о чем ты не имешь представления?
« Последнее редактирование: Февраль 14, 2014, 21:47 от Hrundel » Записан
Hrundel
Гость
« Ответ #61 : Февраль 14, 2014, 21:44 »

[ОФТОП]
Мне кажется, или человек занимается какой-то хер...ей простите ? Из диалогов выше, я так понял, что чел на форуме решил обучиться программированию на задачках уровня 1-2 курс универа.

[ОФТОП]
Самое правильное замечание. Но еще ужастнее, что он хочет занять чье-то место и продуцировать слив.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #62 : Февраль 14, 2014, 21:46 »

Вот функция из предыдущего сообщения. Что о ней скажете? Не скупитесь в критике
Нет нужды перекладывать числа из исходного вектора в векторы odd и even, достаточно использовать два int для хранения min и max.
Для чего этот цирк с result, какую ошибку вы ждете от этой функции?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #63 : Февраль 14, 2014, 22:02 »

Вот функция из предыдущего сообщения. Что о ней скажете? Не скупитесь в критике
Та же ошибка - использование контейнеров без всякой на то необходимости. Вы видите что в std есть для этого тулзы - и применяете их, не подумав что есть решение проще, короче, лучше. Впрочем эта ошибка очень популярна. Почему бы просто не пробежаться по массиву "в стиле начинающего" на ходу определяя чет/нечет?
Записан
8Observer8
Гость
« Ответ #64 : Февраль 14, 2014, 22:10 »

Переделал. Сейчас как? Нормально?

Код
C++ (Qt)
/**
* Сумма максимума из чисел с чётными номерами и
* минимума из чисел с нечётными номерами
*
* @param arr Массив целых чисел
* @return Сумма максимума из чисел с чётными номерами и
* минимума из чисел с нечётными номерами
*/

int sumOfMaxAndMin(const std::vector<int>& arr) {
 
   // Размер входного массива
   std::size_t size = arr.size();
 
   int min, max;
 
   if (size == 0) {
       return 0;
   } else if (size == 1) {
       return arr[0];
   } else {
       min = arr[0];
       max = arr[1];
       for (int i = 0; i < size; ++i) {
           if ((i+1)%2 != 0) {
               if (arr[i] < min) {
                   min = arr[i];
               }
           } else {
               if (arr[i] > max) {
                   max = arr[i];
               }
           }
       }
   }
 
   return max + min;
}
 

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #65 : Февраль 14, 2014, 22:20 »

Переделал. Сейчас как? Нормально?
Классика советского кино
Цитировать
эээ - нэт, Торопытся не надо - Вы должны вернуть обществу полноценного чэловэка
Тщательнее с постами - здесь Ваши ошибки недостойны даже обсуждения
Записан
Hrundel
Гость
« Ответ #66 : Февраль 14, 2014, 22:24 »

8Observer8, еще раз тебе говорю, что не надо тебе за это браться. Тебя любой информатик на пустяке высмеит.
Это математическая задача, которая тупо решается формулой Гауса без всякого задр...тного пребора массивов. Единственное что нужно ввести в функцию чтобы получить ответ - это последнее число ряда.

Код:
n = n * (n+1) : 2

Все! это все  что нужно + немного фантазии, которой у тебя по ходу нет.

Ты хотя бы условие своей задачи понимаешь?

Код:
Сумма максимума из чисел с чётными номерами и минимума из чисел с нечётными номерами

Мининмун нечетных чисел равен еденице! Его вообще считать не надо! Это ненужная операция!
« Последнее редактирование: Февраль 14, 2014, 22:30 от Hrundel » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #67 : Февраль 14, 2014, 22:36 »

Все! это все  что нужно + немного фантазии, которой у тебя по ходу нет.
Зачем так жестко? Я тоже "не во всем" согласен с ТС, считаю что многие вещи нужно осознать, пережить, причем глубоко (нахрапом ничего не сделаешь), а для этого нужно время, опыт, желание - да многое. Но в целом он показывает деловой, конструктивный и корректный подход. Давайте и мы будем корректны
Записан
8Observer8
Гость
« Ответ #68 : Февраль 14, 2014, 23:05 »

Ты хотя бы условие своей задачи понимаешь?

Код:
Сумма максимума из чисел с чётными номерами и минимума из чисел с нечётными номерами

Мининмун нечетных чисел равен еденице! Его вообще считать не надо! Это ненужная операция!

Здесь речь идёт о не нечётных числах, а о числах с нечётными номерами в массиве.

На входе может быть такой массив: 2, 4, -5, 8. Нечётным тут является номер и в задаче номера начинаются с единицы. В данном примере, минимум из нечётных - это -5, а максимум из чётных - это 8. Сумма равна: 3.
« Последнее редактирование: Февраль 14, 2014, 23:19 от 8Observer8 » Записан
Hrundel
Гость
« Ответ #69 : Февраль 14, 2014, 23:18 »

Значит, отсортируй и снова решай Гаусом. Гаус одной формулой не заканчивается.
Записан
BuRn
Гость
« Ответ #70 : Февраль 14, 2014, 23:20 »

Цитировать
чтобы сделать их универсальными.
М.б. меня щас закидают поносом, но судя из практики, всегда универсальные вещи ведут к оч. плохим последствиям в дальнейшем. ИМХО решение задачи не должно быть универсальным. Лично я всегда стараюсь сделать определенный функционал для определенных вещей, ибо кучу раз натыкался на то, что если и делать что - то универсальное, в итоге получается фейл, ибо:"в одном месте правишь, в другом отваливается". Хотя мб это я такой не удачник... Не сторонник универсальных вещей, каждая задача должна выполнять только тот функционал, который на нее возложен, не более...
Записан
8Observer8
Гость
« Ответ #71 : Февраль 15, 2014, 07:58 »

Можете привести пример, где на практике это будет нужно? Пример из Вашей практики, так сказать.

Что, неужели не хватает фантазии? Элементарный пример - компьютерные сети и скорость соединений. Например выбор не самой короткой, а самой быстрой маршрутизации.
Да и вообще, с моей точки зрения,  если тебе приходится объяснять значимость графов в информатике - то лучше забей на это дело! Или иди переучиваться.
А почему тебя твоя профессия не устраивает? Зачем делать то, о чем ты не имешь представления?

Зря Вы обобщаете всех программистов. Есть математики-программисты (которых готовит мех-мат и книт (факультет компьютерных наук и информационных технологий)), а есть инженеры-программисты (которых выпускает политех). Есть тысячи областей программирования, где нужны совершенно разные знания, навыки и умения (к примеру, возьмите разработку сайтов на PHP, jQuery, JavaScript). Как я понимаю, в разработку игровых движков вообще не стоит соваться, если не знаешь мат. анализа, аналитическую геометрию, векторную алгебру, физику, OpenGL (или DirectX) и т.д. Хорошо, конечно же, когда математик-программист сочетается с инженером-программистом и работает в соответствующей области. Но далеко не во всех областях программирования нужен Дональд Кнут. Такие знания нужны в узких кругах. Откройте любой фрилансерный сайт и посмотрите какие там предложения. Вы практически не найдёте тех задач о которых говорите. Там в 99% случаев - заказы для инженеров-программистов. Судя из Ваших обобщений - у Вас очень узкий кругозор. Большинство разработчиков не использует в своей повседневной практики графы. К примеру, возьмите этот крупный международный фрилансерный сайт http://www.freelancer.com/ и убедитесь сколько заказов для инженеров-программистов (я имею ввиду разделы: C++, Java, C#, PHP)

Я закончил физический факультет универа (по специальности: радиофизик). У нас было программирование, но мало. Но все курсовые у меня были связаны с программированием. Плюс 3.5 года в КБ (http://kbep.ru/) инженером-конструктором (там очень большой круг должностных обязанностей, в основном разработка документации (ТУ), написание методик проведения испытаний на стендах и т.д.). Я участвовал в модульном тестировании ПО на ассемблере для микроконтроллера c167. Этот МК в составе СУДГ-20 (система управления и диагностики генератора) управлял генератором на военном самолёте. Потом участвовал в модульном тестировании того же МК, который был в составе КРД-142 (комплексный регулятор двигателя). Этот МК управлял авиационным газотурбинным двигателем на другом военном самолёте. Я знаю, как работают разработчики ПО в том КБ, что они делают и что никакие графы им не были нужны на практике. Это были выпускники политеха, книта, физ. фака. Дома вдоль и поперёк освоил простой МК 8052 и его программирование на ассемблере и Си. Писал ПО для пк на WinAPI и Си, которое принимает (по RS-232), обрабатывает и отображает данные от мк. Посути, инженерное программирование сводится к сборке, обработке, хранении и выдачи информации пользователю. Вот в этой области я и хочу работать. В области инженерной разработки ПО.
« Последнее редактирование: Февраль 15, 2014, 08:10 от 8Observer8 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #72 : Февраль 15, 2014, 10:32 »

Я закончил физический факультет универа
Конечно Вы не рассказали ничего плохого, но чем меньше таких "лирических опусов" - тем лучше. Здесь надо говорить о программировании, большие отступления неуместны.

Тщательнее с постами - здесь Ваши ошибки недостойны даже обсуждения
Тут я был неправ - не понял условия, думал что чет/нечет определяется по числу (а надо по индексу). Тогда да, нормально, но все-таки немного неряшливо.
Код
C++ (Qt)
int sumOfMaxAndMin(const std::vector<int>& arr) {
 
   // Размер входного массива
   std::size_t size = arr.size();
 
   int min, max;
 
   if (size == 0) {
       return 0;
   } else if (size == 1) {
       return arr[0];
   } else {
       min = arr[0];
       max = arr[1];
       for (int i = 0; i < size; ++i) {
           if ((i+1)%2 != 0) {
               if (arr[i] < min) {
                   min = arr[i];
               }
           } else {
               if (arr[i] > max) {
                   max = arr[i];
               }
           }
       }
   }
 
   return max + min;
}
 
Замечания

- лишние скобки
- else после return - ну и так пишут, дело вкуса, но необходимости нет
- цикл начинается с 2 (а не с 0)
- min, max лучше описать позже, перед их использованием
- как я понял по условию индекс "1-based". Тогда это надо оформить и чуть откомментить, напр
Код
C++ (Qt)
bool even = (i & 1);  // inverted odd/even (index is one-based)
if (even) {
...
 

Что-то задачки - ну прямо "ниже травы", замахнитесь на покрупнее, а то интереса ноль  Улыбающийся
Записан
Hrundel
Гость
« Ответ #73 : Февраль 15, 2014, 11:06 »

Из всего сказанного, я так и не понял - а чем радиофизика не устраивает? Почему надо вдруг разработчиком становиться?
Записан
BuRn
Гость
« Ответ #74 : Февраль 15, 2014, 11:11 »

Из всего сказанного, я так и не понял - а чем радиофизика не устраивает? Почему надо вдруг разработчиком становиться?
Могу предположить, это все тот устой, который сложился лед эдак 10 назад, что :"О программист круто же"
Записан
Страниц: 1 ... 3 4 [5] 6 7 ... 12   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.162 секунд. Запросов: 23.