|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.02.2013, 22:56 | #1 |
Регистрация: 04.06.2010
Сообщений: 5
|
Может кто объяснит
Задача для школьника
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int n,i; float s; cin >> n; for (i=1;i<=n;i++) { s=s+1/i; } cout << s; system("PAUSE"); return EXIT_SUCCESS; } Если ввести 6 - результат 1. А если #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { float s; int n,i; cin >> n; for (i=1;i<=n;i++) { s=s+1/i; } cout << s; system("PAUSE"); return EXIT_SUCCESS; } то ответ 1.79522. Но если добавить #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { float s; int n,i; s=0; cin >> n; for (i=1;i<=n;i++) { s=s+1/i; } cout << s; system("PAUSE"); return EXIT_SUCCESS; } то опять 1. Все это в Dev-C++ 4.9.9.2 |
04.02.2013, 23:14 | #2 |
БНТУ ФИТР
Форумчанин
Регистрация: 20.05.2012
Сообщений: 315
|
В первых 2х случаях вы используете s без инициализации. Там по умолчанию какое-то значение.
Код:
1.7 - маловато , хотя бы потому, что: 1 + 0.5 + 0.333 ... А на счёт последнего. Ответ 1, т.к 1/1 = 1 , но 1/2 != 0.5 а равно 0. И дальше каждое частное равно 0. Т.е предполагается, что частное 2х целях чисел тоже целое число. Но если это не так - автоматически округляется в меньшую сторону (в данном случае до 0.) Проследить это можно добавив в цикл cout << 1/i << endl;
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты kventin_zhuk@live.com Последний раз редактировалось kventin_zhuk; 04.02.2013 в 23:22. |
04.02.2013, 23:33 | #3 |
Регистрация: 04.06.2010
Сообщений: 5
|
Тогда не понятно, почему, если в первых двух случаях только меняем местами декларацию переменных - результат разный.
А в третьем случае - почему "предполагается, что частное 2х целых чисел тоже целое число" что надо сделать, что бы 1/i было действительное число. Или это от кампилятора зависит? |
04.02.2013, 23:47 | #4 | |
БНТУ ФИТР
Форумчанин
Регистрация: 20.05.2012
Сообщений: 315
|
revlar, Скомпилировал - у меня один ответ получается. + по ходу выполнения вылезает предупреждение.
Цитата:
Кста: Код оформляется кнопочкой решеточка
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты kventin_zhuk@live.com Последний раз редактировалось kventin_zhuk; 04.02.2013 в 23:55. |
|
05.02.2013, 03:38 | #5 |
Регистрация: 04.06.2010
Сообщений: 5
|
Спасибо за ответы, но я инициализирую всегда, а тут тупо убрал, потому что увидел разницу. Но когда переставил местами описывание переменных - вообще сполз. Какая разница в их порядке? Скорее всего это в кампиляторе дело. Я столько программ на с++ написал - впервые столкнулся с тем, что ответы 1/і и 1.0/і разные. Вся соль, что эта неожиданность вылезла, когда я давал урок ученикам. Видели бы Вы меня тогда - на уроке. Может посоветуйте компилятор простенький для Windows. Но что бы не такой "умный" как Dev-C++
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Где и как скачать программу Delphi. Может кто нибудь может помочь мне - без скачивания из интернета. | IZOPGRAM | Общие вопросы Delphi | 4 | 16.06.2012 18:12 |
Где можно скачать Borland C++ или может кто-то может скинуть | dani6 | C++ Builder | 11 | 19.02.2011 14:01 |
Кто мне объяснит,в чем отличие процессоров Intel от AMD????И по видюшкам вопросик!!! | Alexij | Свободное общение | 1 | 14.11.2008 14:39 |
Не ясная постановка задачи. Может кто объяснит? | Prowler | Помощь студентам | 2 | 25.03.2007 23:04 |