Перейти к содержанию
Форум Челябинских Автомобилистов

программирование С++


Рекомендуемые сообщения

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

  • Ответов 52
  • Создана
  • Последний ответ

Топ авторов темы

Популярные дни

Топ авторов темы

Популярные дни

Незакрепленные сообщения

попробуй как я выше написал

#include <iostream.h>
#include <iomanip.h>
а книги всякие бывают... некоторые с примерами, которые работают только после доработки напильником :D

 

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

я это решение задачи переписал один к одному из книги, но она почему то не идет.

 

в книге может на другой компилятор решение расчитано - а разные компиляторы могу по-разному компилировать одинаковый код :)

 

добавь using namespace std; после инклюдов - выдает вторую ошибку.

 

какая ошибка-то появилась - мы ж не телепаты :) Изменено пользователем ACE
Ссылка на комментарий
Поделиться на другие сайты

да на другой кампилятор написано, все верно. Но до этого все задачи прорешивались и после этой прорешиваютс, а на этой загвоздка. Хочу добить ее. Самому интересно в чем проблема.

 

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;

 

 

так добавить?

Ссылка на комментарий
Поделиться на другие сайты

да на другой кампилятор написано, все верно. Но до этого все задачи прорешивались и после этой прорешиваютс, а на этой загвоздка. Хочу добить ее. Самому интересно в чем проблема.

 

так вот именно, что один код будет одинаково компилироваться, а другой - уже нет. На собственном опыте сталкивался с таким.

int main()

{

int total; // summa ocenok

int gradeCounter; // chislo vvedennih ocenok

int grade; // odna ocenka

double average; // chislo c desytichnoi tochkoi dly ocenki

 

 

 

так добавить?

 

 

нет, вот так

 

#include <iostream>
#include <stdlib>
#include <iomanip>
using namespace std;

...
Ссылка на комментарий
Поделиться на другие сайты

поставил, сразу добавляет вторую ошибку.

 

ошибки

namespace name exepected

indefined symbol 'fixed'

Ссылка на комментарий
Поделиться на другие сайты

каким компилятором пользуешься?

 

напиши вместо

cout << "srednyy ocenka ravna" << fixed << setprecision ( 2 ) << average <<"\n";
printf("srednyy ocenka ravna: %.2f", average);
и будет счастье :)
Ссылка на комментарий
Поделиться на другие сайты

Borland C++

 

каким компилятором пользуешься?

 

напиши вместо

cout << "srednyy ocenka ravna" << fixed << setprecision ( 2 ) << average <<"\n";
printf("srednyy ocenka ravna: %.2f", average);
и будет счастье :)

 

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

Borland C++

здесь проблема в том, что не хочу лезть вперед паровоза. Т.е. изучать постепенно.

 

ну это не то чтобы "вперед паровоза", это обычный С :)
Ссылка на комментарий
Поделиться на другие сайты

вернул в исходное.

 

Вот при таком решении ответ получается с четырьмя числами после запятой, например 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

Ссылка на комментарий
Поделиться на другие сайты

а если сделать так?

 

cout << "srednyy ocenka ravna" << setprecision(3) << average << "\n";
Изменено пользователем ACE
Ссылка на комментарий
Поделиться на другие сайты

если так, то выдает целым числом.

 

setprecision(n)

n - количество цифр в числе, т.е. если мы поставили setprecision(2), то 33,3333 выведется 33, если setprecision(4), то 33,33.

 

Если нужно установить только кол-во цифр после запятой, то с библиотекой iostream (оператор cout) будет не так просто, как с stdio (как я уже предлагал функцию printf). Но сложнее, это не значит невозможно, просто надо подольше повозиться :) Удачи ;)

Ссылка на комментарий
Поделиться на другие сайты

setprecision(n)

n - количество цифр в числе, т.е. если мы поставили setprecision(2), то 33,3333 выведется 33, если setprecision(4), то 33,33.

 

 

 

ай молодца, пошло.
Ссылка на комментарий
Поделиться на другие сайты

average = double (total) / double (gradeCounter);

Это стопудово, т.к. в вашей последней записи не происходит преобразования знаменателя в вещественный тип, и операция деления воспринимается как целочисленная.

Сейчас бьюсь над точностью %)

setprecision(n)

n - количество цифр в числе, т.е. если мы поставили setprecision(2), то 33,3333 выведется 33, если setprecision(4), то 33,33.

Сказать прикол? Если у вас среднее однозначное, то тогда останется 3 знака после запятой =))

 

Чтобы ВСЕГДА оставалось 2 знака:

1. Умножаем полученное число на 100

2. Переводим в int

3. Переводим в double и делим на 100

4. Выводим

 

// 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";

Изменено пользователем Delcatty
Ссылка на комментарий
Поделиться на другие сайты

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, т.е. без сотых

Ссылка на комментарий
Поделиться на другие сайты

Компилю в пятом билдере.

average = static_cast< double > (total) / gradeCounter; //Эта строка выдает целочисленное деление.

 

С твоим алгоритмом. Введи 3,4,5,6, -1 и посмотри, сколько знаков будет после запятой ))

Ссылка на комментарий
Поделиться на другие сайты

Компилю в пятом билдере.

average = static_cast< double > (total) / gradeCounter; //Эта строка выдает целочисленное деление.

 

С твоим алгоритмом. Введи 3,4,5,6, -1 и посмотри, сколько знаков будет после запятой ))

 

ответ 4,5 :wall:
Ссылка на комментарий
Поделиться на другие сайты

Еще один тест.

 

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

Для продолжения нажмите любую клавишу . . .

Ссылка на комментарий
Поделиться на другие сайты

Еще один тест.

srednyy ocenka ravna4.111

Для продолжения нажмите любую клавишу . . .

 

точно :wall:

 

Компилю в пятом билдере.

average = static_cast< double > (total) / gradeCounter; //Эта строка выдает целочисленное деление.

 

С твоим алгоритмом. Введи 3,4,5,6, -1 и посмотри, сколько знаков будет после запятой ))

 

этот алгоритм взят из книги, я его не решал. Я только изучаю эту главу. А решение дано в учебнике как пример.
Ссылка на комментарий
Поделиться на другие сайты

В принципе, преобразование типов может меняться от компилера к компилеру, у меня надо каждый множитель преобразовать, чтобы поделилось адекватно.

А что касается приведенного теста - код в самом вернем сообщении на этой странице позволяет выводить в любом случае ровно 2 знака после запятой.

precision отсчитывает значащие цифры. Можно, конечно, написать формулу, которая определяет число значащих цифр, но оно надо? Имхо, легче умножить-поделить на 100. Переменных, правда, я наплодила. Окончательный результат можно и в ту же average кинуть %)

Ссылка на комментарий
Поделиться на другие сайты

В принципе, преобразование типов может меняться от компилера к компилеру, у меня надо каждый множитель преобразовать, чтобы поделилось адекватно.

А что касается приведенного теста - код в самом вернем сообщении на этой странице позволяет выводить в любом случае ровно 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;

}

Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Сейчас на странице   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...