Моё меню Общее меню Пользователи Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > IT-индустрия > Софт > Программирование
Знаете ли Вы, что ...
...для каждой темы существует свой раздел. Изучите структуру форума. Если соответствующего раздела нет, то всегда есть раздел "Разное" :)
<< Предыдущий совет - Случайный совет - Следующий совет >>

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


Ответить

 
Опции темы Опции просмотра
Старый 11.11.2010 20:56   #1  
Real ID Group Ultimate ex-wild_John
Супермодератор
Аватар для German Stimban
Оффлайн
Центр программистов Bepro
Начальник отдела
Сообщений: 8,039
+ 4,910  6,509/2,845
– 298  135/90

UzbekistanОтправить сообщение для German Stimban с помощью ICQОтправить сообщение для German Stimban с помощью Skype™LiveJournal
Обучение программированию в ВУЗах

Наболело, открываю подобную тему. Больше крик души, нежели серьёзное обсуждение.

В современных ВУЗах программированию учат как науке, а не как искусству. И это очень плохо. На выходе получаются "машины", которые могут составить любую программу, не задумываясь о красоте или элегантности кода. Сейчас обучаю группу по С++ - все студенты различных ВУЗов, все знакомы с языком. Проблема в том, что люди абсолютно не учат алгоритмов. Мало того, студентов не учат думать над решением - любая программа начинается не с нажатия клавиш на клавиатуре, а рождается в голове. Этого, к сожалению в ВУЗах нет.

Простая задача:
Вывести на экран все чётные числа от 1 до 1000, которые являются квадратами.
Народ довольно бодро начал набивать код:
Код:
...
for (i=0;i<=1000;i++)
{
if (i%2==0 && ...
и тут зависает, ибо не знает как проверить является число квадратом или нет. Немного поговорили о том, что решение "в лоб" как правило является неверным, последовательно оптимизировали до вида
Код:
for (i=2;i<=14;i++)
    cout<<4*i*i<<"\n";
с разъяснением каждого шага. Прошло немного времени, студенты получили следующую задачу:
Компьютер просит ввести число, пользователь вводит. Компьютер проверяет, если оно одновременно делится на 3 и на 2, выводит какую-либо строку на экран.
Снова начинается тихий ужас:
Код:
int a; bool d,e;
cin>>a;
d=a%2;
e=a%3;
if (d!=true && e!=true)
{
...
При этом, народ не абсолютно обратил внимание на то, что можно было бы всё реализовать проще - достаточно было бы одной проверки делимости на 6.

Исходя из написанного - нужно что-то делать с учебными программами в ВУЗах, чтобы обучали не только языкам программирования, но и логике и красоте составления программ.
PS. Ну и для затравки задача (просьба реализовать на любом языке):
Пользователь вводит число. Если оно оканчивается на 2 или на 7, компьютер выводит строку "Вам повезло"
__________________
Герман - это не имя, это особое состояние души (Джим Анджер)
Ответить 
"+" от:
Старый 11.11.2010 21:06   #2  
Known ID Group uParty Member Ultimate
Аватар для JH
Оффлайн
Сообщений: 10,921
+ 3,666  10,931/4,676
– 584  286/214

Uzbekistan
Берем остаток от деления на 10, или есть еще более оптимальное решение?
Ответить 
Старый 11.11.2010 21:13   #3  
Real ID Group uParty Member Ultimate
Аватар для Eldar Fattakhov
Оффлайн
Сообщений: 11,845
+ 1,339  5,806/3,144
– 64  125/105

Uzbekistan
Цитата:
Сообщение от JH Посмотреть сообщение
Берем остаток от деления на 10, или есть еще более оптимальное решение?
А если это было дробное число (типа 6,5)?
__________________
DWBH
Ответить 
Старый 11.11.2010 21:34   #4  
Аватар для Georgick
Оффлайн
Navitas
Team Leader
Сообщений: 1,026
+ 488  582/279
– 1  8/8

UzbekistanОтправить сообщение для Georgick с помощью ICQОтправить сообщение для Georgick с помощью Skype™LiveJournal
Герман пустил народ по ложному следу своими примерами.

А на самом деле переводим число в строку (string)... Последний элемент в этой строке будет под номером = (длина строки минус 1). Дальше, думаю, понятно).

P.S:
Герман, попроси студентов назвать имя функции (любой язык), что превращает число в противоположное. По необъяснимой причине большинство пытается эту функцию найти. Меньшинство же просто умножает число на "минус 1" (и поступает верно)

Последний раз редактировалось Georgick; 11.11.2010 в 21:39.
Ответить 
Старый 11.11.2010 21:46   #5  
Pre Open ID Group
Аватар для Ilhom Teshaboyev
Оффлайн
OOO Saflor
преподаватель
AKA:milsum
Сообщений: 260
+ 48  91/57
– 0  0/0

UzbekistanОтправить сообщение для Ilhom Teshaboyev с помощью ICQОтправить сообщение для Ilhom Teshaboyev с помощью YahooОтправить сообщение для Ilhom Teshaboyev с помощью Skype™LiveJournal
прибавляем к числу 8 и проверяем целочисленное деление на 5 ..

p.s. быть может это еще одна из моих шуток?

Последний раз редактировалось Ilhom Teshaboyev; 11.11.2010 в 21:55.
Ответить 
2 "+" от:
Старый 11.11.2010 23:48   #6  
Аватар для iDead
Оффлайн
Сообщений: 3,206
+ 8,401  1,731/955
– 287  262/136

Uzbekistan
Цитата:
Сообщение от Ilhom Teshaboyev Посмотреть сообщение
прибавляем к числу 8 и проверяем целочисленное деление на 5 .. p.s. быть может это еще одна из моих шуток?
а если число отрицательное, то прибавляем восьмёрку к модулю этого числа...
Ответить 
"+" от:
Старый 12.11.2010 00:09   #7  
Real ID Group
Аватар для Rooslan Khayrov
Оффлайн
Google
software engineer
AKA:Y combinator
Сообщений: 418
+ 114  374/183
– 6  9/8

Switzerland
Цитата:
Сообщение от German Stimban Посмотреть сообщение
В современных ВУЗах программированию учат как науке, а не как искусству.
Судя по приведенным примерам, программированию в вузах учат как <самоцензура>, а не как искусству или тем более науке. Тем более элементарная математика и логика — лишь часть, того что должен знать и уметь программист.
Цитата:
Сообщение от German Stimban Посмотреть сообщение
for (i=2;i<=14;i++) cout<<4*i*i<<"\n";
Почему захардкодили, почему не while ( ... <= 1000)? Притом захардкодили неправильно, пропустив 900=30^2.
Ответить 
"+" от:
Реклама и уведомления
Старый 12.11.2010 11:01   #8  
uParty Member Known ID Group
Аватар для DarkUser
Оффлайн
Служу Его Божественной Тени!
Сообщений: 1,671
+ 4,505  1,372/657
– 164  33/27

Uzbekistan
Цитата:
Сообщение от German Stimban Посмотреть сообщение
В современных ВУЗах программированию учат как науке, а не как искусству.
а искусству и не обучить, имхо... либо человек сам научится, либо - не дано... разумеется хороший преподователь, может направить на правильный путь, подсказать где искать... но где, блин, взять такого специалиста, и в программировании и в обучении, который будет за преподавательскую з.п. этим заниматся...

И, к слову, о наболевшем - конечному пользователю, абсолютно пофик на красоту кода и оптимальность алгоритмов. Ему главное - чтоб покрасявше, и "а я вот тут в 1С такую прикольную штуку видел, а можно у нас её тоже сделать, это-ж не сложно, правда?"

Цитата:
Сообщение от Georgick Посмотреть сообщение
имя функции (любой язык), что превращает число в противоположное
можно, еще, попросить поменять местами значения двух числовых переменных, не используя 3-ю, но это уже совсем жестоко.

UPD. А можно, еще, не пускать за компьютер, пока на листочне блок-схему не нарисуют.
__________________
Are you my mommy?
Ответить 
Старый 12.11.2010 14:58   #9  
Real ID Group Ultimate ex-wild_John
Супермодератор
Аватар для German Stimban
Оффлайн
Центр программистов Bepro
Начальник отдела
Сообщений: 8,039
+ 4,910  6,509/2,845
– 298  135/90

UzbekistanОтправить сообщение для German Stimban с помощью ICQОтправить сообщение для German Stimban с помощью Skype™LiveJournal
Цитата:
Сообщение от Rooslan Khayrov Посмотреть сообщение
Цитата:
Сообщение от German Stimban Посмотреть сообщение
for (i=2;i<=14;i++) cout<<4*i*i<<"\n";
Почему захардкодили, почему не while ( ... <= 1000)? Притом захардкодили неправильно, пропустив 900=30^2.
На момент выдачи задачи цикл while не проходили.

Насчёт 900 (30^2) и 4 (2^2) - мой баг, писал вечером, уставший.
Правильнее будет.

Код:
for (i=1;i<=15;i++) 
cout<<4*i*i<<"\n";
__________________
Герман - это не имя, это особое состояние души (Джим Анджер)
Ответить 
Старый 12.11.2010 14:59   #10  
Real ID Group Ultimate ex-wild_John
Супермодератор
Аватар для German Stimban
Оффлайн
Центр программистов Bepro
Начальник отдела
Сообщений: 8,039
+ 4,910  6,509/2,845
– 298  135/90

UzbekistanОтправить сообщение для German Stimban с помощью ICQОтправить сообщение для German Stimban с помощью Skype™LiveJournal
Цитата:
Сообщение от JH Посмотреть сообщение
Берем остаток от деления на 10, или есть еще более оптимальное решение?
Достаточно взять остаток от деления на 5. И *7 и *2 дадут 2.
__________________
Герман - это не имя, это особое состояние души (Джим Анджер)
Ответить 
Ответить
Опции темы
Опции просмотра




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх