Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по setiosflags() и double 
:(
    Опции темы
Mastodont
Дата 25.12.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



У Дейтлов есть код
Код

// Рис. 2.9: fig02_09.cpp
// Использование повторения с пометкой для вычисления среднего
#include<iostream.h>
#include<windows.h>
 
int rustext(char str[])
{
 char buffer[1024];
 CharToOem(str,buffer);
 cout << buffer;
}
 
using std::cout;
using std::cin;
using std::endl;
using std::ios;
 
#include<iomanip.h>;
 
using std::setprecision;
using std::setiosflags;
 
int main()
{
 int total, // сумма оценок
     gradeCounter, // число введенных оценок
     grade; // одна оценка
 double average; // число с десятичной точкой для оценки
 
 // фаза инициализации
 total = 0;
 gradeCounter = 0;
 
 // фаза обработки
 rustext("Введите оценку или -1 для завершения: ");
 cin >> grade;
 
 while (grade != -1)
 {
  total = total + grade;
  gradeCounter = gradeCounter + 1;
  rustext("Введите оценку или -1 для завершения: ");
  cin >> grade;
 }
 
 // фаза завершения
 if (gradeCounter != 0)
 {
  average = static_cast < double > (total) / gradeCounter;
  rustext("Средняя оценка равна ");
  cout << setprecision(3) << setiosflags(ios::fixed | ios::showpoint) << average << endl;
 }
 else
  rustext("Нет введенных оценок");
  cout << endl;
 
  system("pause");
  return 0; // признак успешного завершения
}

Во-первых, почему они связались с static_cast < double >? Можно было сразу для переменных total и gradeCounter задать тип double. Догадываюсь, что для них определен int, а позднее с помощью static_cast временно задан double из соображений экономии памяти? Я прав? Ведь можно было сразу им double задать:
Код

// Рис. 2.9: fig02_09.cpp
// Использование повторения с пометкой для вычисления среднего
#include<iostream.h>
#include<windows.h>
 
int rustext(char str[])
{
 char buffer[1024];
 CharToOem(str,buffer);
 cout << buffer;
}
 
#include<iomanip.h>;
 
int main()
{
 double total, // сумма оценок
     gradeCounter, // число введенных оценок
     grade, // одна оценка
  average; // число с десятичной точкой для оценки
 
 // фаза инициализации
 total = 0;
 gradeCounter = 0;
 
 // фаза обработки
 rustext("Введите оценку или -1 для завершения: ");
 cin >> grade;
 
 while (grade != -1)
 {
  total = total + grade;
  gradeCounter = gradeCounter + 1;
  rustext("Введите оценку или -1 для завершения: ");
  cin >> grade;
 }
 
 // фаза завершения
 if (gradeCounter != 0)
 {
  average = total / gradeCounter;
  rustext("Средняя оценка равна ");
  cout << setprecision(2) << setiosflags(ios::fixed | ios::showpoint) << average << endl;
 }
 else
  rustext("Нет введенных оценок");
  cout << endl;
 
  system("pause");
  return 0; // признак успешного завершения
}

Во-вторых, я не пойму, зачем нужен параметр ios::showpoint в setiosflags. Вводил значения 9 и 6, как с showpoint получаю 7.50, так и без него также.

В-третьих, зачем писать using std::cout; и прочие using... Когда я учил С++ по Подбельскому, там этого не было, и у меня и без них все работает.
PM MAIL   Вверх
mrbrooks
Дата 25.12.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Mastodont @  25.12.2009,  10:41 Найти цитируемый пост)
Во-первых, почему они связались с static_cast < double >?

в с++ - это стандартное приведение типов.

Цитата(Mastodont @  25.12.2009,  10:41 Найти цитируемый пост)
Я прав?

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

Цитата(Mastodont @  25.12.2009,  10:41 Найти цитируемый пост)
Во-вторых, я не пойму, зачем нужен параметр ios::showpoint в setiosflags.

курим

Цитата(Mastodont @  25.12.2009,  10:41 Найти цитируемый пост)
В-третьих, зачем писать using std::cout; и прочие using... 

это что бы постоянно не писать std::cout, std::cin etc
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.