mir Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 Занялся на досуге изучением С++. Есть ли кто, кто соображает, так как появляются вопросы, а ответы найти не могу. Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 попробуй как я выше написал #include <iostream.h> #include <iomanip.h> а книги всякие бывают... некоторые с примерами, которые работают только после доработки напильником попробовал, без изменений. Ссылка на комментарий Поделиться на другие сайты Поделиться
ACE Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 (изменено) я это решение задачи переписал один к одному из книги, но она почему то не идет. в книге может на другой компилятор решение расчитано - а разные компиляторы могу по-разному компилировать одинаковый код добавь using namespace std; после инклюдов - выдает вторую ошибку. какая ошибка-то появилась - мы ж не телепаты Изменено 26 августа, 2010 пользователем ACE Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 да на другой кампилятор написано, все верно. Но до этого все задачи прорешивались и после этой прорешиваютс, а на этой загвоздка. Хочу добить ее. Самому интересно в чем проблема. int main() { int total; // summa ocenok int gradeCounter; // chislo vvedennih ocenok int grade; // odna ocenka double average; // chislo c desytichnoi tochkoi dly ocenki using namespace std; так добавить? Ссылка на комментарий Поделиться на другие сайты Поделиться
ACE Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 да на другой кампилятор написано, все верно. Но до этого все задачи прорешивались и после этой прорешиваютс, а на этой загвоздка. Хочу добить ее. Самому интересно в чем проблема. так вот именно, что один код будет одинаково компилироваться, а другой - уже нет. На собственном опыте сталкивался с таким.int main(){int total; // summa ocenokint gradeCounter; // chislo vvedennih ocenokint grade; // odna ocenkadouble average; // chislo c desytichnoi tochkoi dly ocenki так добавить? нет, вот так #include <iostream> #include <stdlib> #include <iomanip> using namespace std; ... Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 поставил, сразу добавляет вторую ошибку. ошибки namespace name exepected indefined symbol 'fixed' Ссылка на комментарий Поделиться на другие сайты Поделиться
LoLka Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 каким компилятором пользуешься? напиши вместоcout << "srednyy ocenka ravna" << fixed << setprecision ( 2 ) << average <<"\n"; printf("srednyy ocenka ravna: %.2f", average); и будет счастье Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 Borland C++ каким компилятором пользуешься? напиши вместоcout << "srednyy ocenka ravna" << fixed << setprecision ( 2 ) << average <<"\n"; printf("srednyy ocenka ravna: %.2f", average); и будет счастье здесь проблема в том, что не хочу лезть вперед паровоза. Т.е. изучать постепенно. Ссылка на комментарий Поделиться на другие сайты Поделиться
LoLka Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 Borland C++здесь проблема в том, что не хочу лезть вперед паровоза. Т.е. изучать постепенно. ну это не то чтобы "вперед паровоза", это обычный С Ссылка на комментарий Поделиться на другие сайты Поделиться
ACE Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 да кстати, а cout, cin это уже С++ Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 вернул в исходное. Вот при таком решении ответ получается с четырьмя числами после запятой, например 33,3333 #include <iostream> #include <stdlib> #include <iomanip> int main() { int total; // summa ocenok int gradeCounter; // chislo vvedennih ocenok int grade; // odna ocenka double average; // chislo c desytichnoi tochkoi dly ocenki // faza inicializacii total = 0; // inicializaciy total gradeCounter = 0; // inicializaciy schetchika cikla // faza obrabotki // poluchit pervuu ocenku cout << "vvedite ocenku ili -1 dly zaversheniy\n"; cin >> grade; // vipolnenie cikla do polucheniy sentinel value ot polzovately while (grade != -1) { total = total + grade; gradeCounter = gradeCounter + 1; cout << "vvedite ocenku ili -1 dly zaversheniy\n"; cin >> grade; } // konec while // faza zaversheniy // esli polzovatel, po krainei mere odnu ocenku if (gradeCounter != 0) { // vichislenie srednei iz vseh vvedennih ocenok average = static_cast< double > (total) / gradeCounter; // otobragenie srednei ocenki s tochnostu do dvuh razrydov cout << "srednyy ocenka ravna" << average << "\n"; } else // esli ne vvedeni ocenki, vivod soobsheniy cout << "net dannih\n"; system ("pause"); return 0; } нужно написать так, чтобы оставалось две сотые, например 33,33 Ссылка на комментарий Поделиться на другие сайты Поделиться
LoLka Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 добавь просто точность, без всяких флагов fixed cout << "srednyy ocenka ravna" << setprecision(2) << average << "\n"; Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 если так, то выдает целым числом. Ссылка на комментарий Поделиться на другие сайты Поделиться
ACE Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 (изменено) а если сделать так? cout << "srednyy ocenka ravna" << setprecision(3) << average << "\n"; Изменено 26 августа, 2010 пользователем ACE Ссылка на комментарий Поделиться на другие сайты Поделиться
LoLka Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 если так, то выдает целым числом. setprecision(n)n - количество цифр в числе, т.е. если мы поставили setprecision(2), то 33,3333 выведется 33, если setprecision(4), то 33,33. Если нужно установить только кол-во цифр после запятой, то с библиотекой iostream (оператор cout) будет не так просто, как с stdio (как я уже предлагал функцию printf). Но сложнее, это не значит невозможно, просто надо подольше повозиться Удачи Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 setprecision(n)n - количество цифр в числе, т.е. если мы поставили setprecision(2), то 33,3333 выведется 33, если setprecision(4), то 33,33. ай молодца, пошло. Ссылка на комментарий Поделиться на другие сайты Поделиться
Delcatty Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 (изменено) average = double (total) / double (gradeCounter);Это стопудово, т.к. в вашей последней записи не происходит преобразования знаменателя в вещественный тип, и операция деления воспринимается как целочисленная.Сейчас бьюсь над точностью %)setprecision(n)n - количество цифр в числе, т.е. если мы поставили setprecision(2), то 33,3333 выведется 33, если setprecision(4), то 33,33.Сказать прикол? Если у вас среднее однозначное, то тогда останется 3 знака после запятой =)) Чтобы ВСЕГДА оставалось 2 знака:1. Умножаем полученное число на 1002. Переводим в int3. Переводим в double и делим на 1004. Выводим // vichislenie srednei iz vseh vvedennih ocenokaverage = double (total) / double (gradeCounter);int av=average*100;double a=(double)av/100.00;// otobragenie srednei ocenki s tochnostu do dvuh razrydovcout << "srednyy ocenka ravna" << a << "\n"; Изменено 26 августа, 2010 пользователем Delcatty Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 average = double (total) / double (gradeCounter);Это стопудово, т.к. в вашей последней записи не происходит преобразования знаменателя в вещественный тип, и операция деления воспринимается как целочисленная.Сейчас бьюсь над точностью %) не понял вот это решение работает. При введении чисел 33;34;35;-1 ответ выдает 33,33 #include <iostream>#include <stdlib>#include <iomanip> int main(){ int total; // summa ocenok int gradeCounter; // chislo vvedennih ocenok int grade; // odna ocenka double average; // chislo c desytichnoi tochkoi dly ocenki // faza inicializacii total = 0; // inicializaciy total gradeCounter = 0; // inicializaciy schetchika cikla // faza obrabotki // poluchit pervuu ocenku cout << "vvedite ocenku ili -1 dly zaversheniy\n"; cin >> grade; // vipolnenie cikla do polucheniy sentinel value ot polzovately while (grade != -1) { total = total + grade; gradeCounter = gradeCounter + 1; cout << "vvedite ocenku ili -1 dly zaversheniy\n"; cin >> grade; } // konec while // faza zaversheniy // esli polzovatel, po krainei mere odnu ocenku if (gradeCounter != 0) { // vichislenie srednei iz vseh vvedennih ocenok average = static_cast< double > (total) / gradeCounter; // otobragenie srednei ocenki s tochnostu do dvuh razrydov cout << "srednyy ocenka ravna" << setprecision ( 4 ) << average <<"\n"; } else // esli ne vvedeni ocenki, vivod soobsheniy cout << "net dannih\n"; system ("pause"); return 0;} сейчас попробовал другие числа 33; 33; 33; -1 ответ был 33, т.е. без сотых Ссылка на комментарий Поделиться на другие сайты Поделиться
Delcatty Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 Компилю в пятом билдере. average = static_cast< double > (total) / gradeCounter; //Эта строка выдает целочисленное деление. С твоим алгоритмом. Введи 3,4,5,6, -1 и посмотри, сколько знаков будет после запятой )) Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 Компилю в пятом билдере. average = static_cast< double > (total) / gradeCounter; //Эта строка выдает целочисленное деление. С твоим алгоритмом. Введи 3,4,5,6, -1 и посмотри, сколько знаков будет после запятой )) ответ 4,5 Ссылка на комментарий Поделиться на другие сайты Поделиться
Delcatty Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 Еще один тест. vvedite ocenku ili -1 dly zaversheniy 4 vvedite ocenku ili -1 dly zaversheniy 5 vvedite ocenku ili -1 dly zaversheniy 5 vvedite ocenku ili -1 dly zaversheniy 5 vvedite ocenku ili -1 dly zaversheniy 5 vvedite ocenku ili -1 dly zaversheniy 5 vvedite ocenku ili -1 dly zaversheniy 3 vvedite ocenku ili -1 dly zaversheniy 3 vvedite ocenku ili -1 dly zaversheniy 2 vvedite ocenku ili -1 dly zaversheniy -1 srednyy ocenka ravna4.111 Для продолжения нажмите любую клавишу . . . Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 Еще один тест.srednyy ocenka ravna4.111Для продолжения нажмите любую клавишу . . . точно Компилю в пятом билдере. average = static_cast< double > (total) / gradeCounter; //Эта строка выдает целочисленное деление. С твоим алгоритмом. Введи 3,4,5,6, -1 и посмотри, сколько знаков будет после запятой )) этот алгоритм взят из книги, я его не решал. Я только изучаю эту главу. А решение дано в учебнике как пример. Ссылка на комментарий Поделиться на другие сайты Поделиться
Delcatty Опубликовано 26 августа, 2010 Жалоба Поделиться Опубликовано 26 августа, 2010 В принципе, преобразование типов может меняться от компилера к компилеру, у меня надо каждый множитель преобразовать, чтобы поделилось адекватно. А что касается приведенного теста - код в самом вернем сообщении на этой странице позволяет выводить в любом случае ровно 2 знака после запятой. precision отсчитывает значащие цифры. Можно, конечно, написать формулу, которая определяет число значащих цифр, но оно надо? Имхо, легче умножить-поделить на 100. Переменных, правда, я наплодила. Окончательный результат можно и в ту же average кинуть %) Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 сейчас попробую обобщить в мозгах все написанное. Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 В принципе, преобразование типов может меняться от компилера к компилеру, у меня надо каждый множитель преобразовать, чтобы поделилось адекватно.А что касается приведенного теста - код в самом вернем сообщении на этой странице позволяет выводить в любом случае ровно 2 знака после запятой.precision отсчитывает значащие цифры. Можно, конечно, написать формулу, которая определяет число значащих цифр, но оно надо? Имхо, легче умножить-поделить на 100. Переменных, правда, я наплодила. Окончательный результат можно и в ту же average кинуть %) поменял, но при получении целого числа в ответе получается ответ без сотых, т.е. при ответе 4,00 пишет ответ 4.#include <iostream>#include <stdlib>#include <iomanip> int main(){ int total; // summa ocenok int gradeCounter; // chislo vvedennih ocenok int grade; // odna ocenka double average; // chislo c desytichnoi tochkoi dly ocenki // faza inicializacii total = 0; // inicializaciy total gradeCounter = 0; // inicializaciy schetchika cikla // faza obrabotki // poluchit pervuu ocenku cout << "vvedite ocenku ili -1 dly zaversheniy\n"; cin >> grade; // vipolnenie cikla do polucheniy sentinel value ot polzovately while (grade != -1) { total = total + grade; gradeCounter = gradeCounter + 1; cout << "vvedite ocenku ili -1 dly zaversheniy\n"; cin >> grade; } // konec while // faza zaversheniy // esli polzovatel, po krainei mere odnu ocenku if (gradeCounter != 0) { // vichislenie srednei iz vseh vvedennih ocenok average = double (total) / double (gradeCounter); int av=average*100; double a=(double)av/100.00; // otobragenie srednei ocenki s tochnostu do dvuh razrydov cout << "srednyy ocenka ravna" << a << "\n"; } else // esli ne vvedeni ocenki, vivod soobsheniy cout << "net dannih\n"; system ("pause"); return 0;} Ссылка на комментарий Поделиться на другие сайты Поделиться
mir Опубликовано 26 августа, 2010 Автор Жалоба Поделиться Опубликовано 26 августа, 2010 Но когда добавляю using namespace; то выдает ошибку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти