Форум программистов, компьютерный форум CyberForum.ru

С++ программирование, цикл - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
luiza-05
1 / 1 / 0
Регистрация: 04.04.2011
Сообщений: 12
01.05.2011, 19:38     С++ программирование, цикл #1
Найти 10 первых натуральных чисел, оканчивающихся на цифру 7, кратных числу 9 и больших 100
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 19:42     С++ программирование, цикл #2
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main(){
    for (int i = 107, c=0;  c< 10; i+=10) {
        if (i%9==0) {
            std::cout << i << ' ';
            c++;
        }
    }
    return 0;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
01.05.2011, 19:48     С++ программирование, цикл #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
bool is_corr(const int &a){
  return a % 10 == 7 && !(a % 9);
}
 
int main(){
  size_t cnt = 0;
  for(int i = 101; cnt != 10; ++i)
    if(is_corr(i)){
      std::cout << i << ' ';
      ++cnt;
    }
  return 0;
}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 20:29     С++ программирование, цикл #4
Хотя еще быстрее будет так
C++
1
2
3
4
5
6
7
8
#include <iostream>
int main(){
    for (short i = 117, c=0;  c< 10; i+=90) {
        std::cout << i << ' ';
        c++;
    }
    return 0;
}
Добавлено через 34 минуты
Есть небольшой вопросик...
Ради интереса я прогнал код от asics и справнил его скорость со своим.
И, собственно, я не недоумении.
Теоретически моя программа должна выигрывать по скорости более чем в 100 раз, но на деле оказалось, что скорость программ практически равна.
Почему?...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 20:33     С++ программирование, цикл #5
diagon, Потому что компы сейчас мощные и выполняют такие операции очень быстро. Откуда ж тут разнице то взяться? Всего-навсего цикл + проверка на совпадение условию..
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 20:35     С++ программирование, цикл #6
Я поставил условие на первые 100000 чисел.
И у asics цикл проверяет каждое число на кратность девяти и последнюю цифру, у меня же банально увеличивает i на 90 и выводит ее.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 20:38     С++ программирование, цикл #7
diagon, Ну и на сколько разница? Чем проверяли? Да и какой смысл зацикливаться на оптимизации, которая в данном случае уж точно никому не нужна?

Знаете закон преждевременной оптимизации? Он звучит просто.
Не делай этого!
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 20:39     С++ программирование, цикл #8
Секундумером на наручных часах=) В обоих случаях приблизительно 8 секунд, разницы нету.
Я сейчас динамическое программирование изучаю. Какой от него смысл в таком случае?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
01.05.2011, 20:46     С++ программирование, цикл #9
Цитата Сообщение от diagon Посмотреть сообщение
Я сейчас динамическое программирование изучаю. Какой от него смысл в таком случае?
Это отдельный способ решения задач в олимпиадном программировании, причем очень полезный.
Только я не пойму, зачем вы привели это сюда.
Зачем рекурсия ? (подобный вопрос).
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 20:49     С++ программирование, цикл #10
Ну смотри, казалось бы, в первое случае одна итерация цикла выполняется меньше времени, во втором больше. В первом случае итераций происходит в 90 раз меньше, чем во втором. И тем не менее, скорость работы программ равна. Зачем нужно оптимизировать программу по времени, если нету эффекта?
Насчет рекурсии интересный вопрос, я могу сказать только, что это красивее, так как по скорости значительно проигрывает линейному перебору.
Цитата Сообщение от neske Посмотреть сообщение
Только я не пойму, зачем вы привели это сюда.
Ну это есть не что иное, как динамическое программирование. Зачем выполнять проверку для каждого числа больше ста, если все эти числа-арифметическая последовательность?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
01.05.2011, 20:49     С++ программирование, цикл #11
diagon, тут еще вот какое дело - не факт, что компилятор скомпилировал код именно в таком виде, как он выглядет в С (компилятор мог оптимизировать код, по своему усмотрению, в т.ч. сделать ф-цию inline). Нужно посмотреть ассемблерный код, что бы понять в чем дело.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 20:51     С++ программирование, цикл #12
diagon, Олимпиадные задачи обычно не столь тривиальны и там действительно нужно динамическое программирование или другие пути, но никак не в лоб.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 20:53     С++ программирование, цикл #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
diagon, тут еще вот какое дело - не факт, что компилятор скомпилировал код именно в таком виде, как он выглядет в С (компилятор мог оптимизировать код, по своему усмотрению, в т.ч. сделать ф-цию inline). Нужно посмотреть ассемблерный код, что бы понять в чем дело.
Компиляторы, конечно, нынче умные пошли, но в данном случае практически разные алгоритмы.
diagon, Олимпиадные задачи обычно не столь тривиальны и там действительно нужно динамическое программирование или другие пути, но никак не в лоб.
Знаю, бывал на таких=)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
01.05.2011, 20:58     С++ программирование, цикл #14
Цитата Сообщение от diagon Посмотреть сообщение
но в данном случае практически разные алгоритмы.
Ну и что? Тут вообще цикл с заранее известными константами, компилятор мог это все превратить в :
C
1
2
3
4
5
printf(...);
printf(...);
printf(...);
printf(...);
//и так 10 раз
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 21:01     С++ программирование, цикл #15
Т.е. он самостоятельно нашел последовательность? Забавно...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
01.05.2011, 21:04     С++ программирование, цикл #16

Не по теме:

Реальный случай: люди проверяли 2 разных компилятора, написали длинный код, с кучей математических вычислений, скомпилировали и в результате, программа скомпилированная на одном из компиляторов работала мнгновенно (чего не могло быть вообще). Когда посмотрели ассемблерный код, выяснялось, что по скольку вычисления были с константами, компилятор из длинного кода сделал одну строку - вывод конечного результата )))



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
Т.е. он самостоятельно нашел последовательность? Забавно...
Это предположение... Я не занимался глубоко подобными вещами.

diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.05.2011, 22:02     С++ программирование, цикл #17
Специально скачал Devcpp, отключил там всю оптимизацию... Обе проги работают в 2 раза быстрее чем на билдере(о_О), но тоже одинаковое количество времени.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2011, 22:06     С++ программирование, цикл
Еще ссылки по теме:

Задание на цикл с параметром и цикл с постусловием C++
C++ Программирование на C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 22:06     С++ программирование, цикл #18
diagon, Откровенно говоря компилятор вообще многое может сделать на стадии компиляции. Факториал посчитать к примеру.
Yandex
Объявления
01.05.2011, 22:06     С++ программирование, цикл
Ответ Создать тему
Опции темы

Текущее время: 07:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru