Skocz do zawartości


Zdjęcie

[C++] Printf - zaokrąglanie liczb


  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 piotrek080

piotrek080

    Początkujący

  • 20 postów

Napisano 24 10 2010 - 12:18

Witam, mam takie zadanie:

9) Wyznacz warości funkcji trygonometrycznych sinus, cosinus oraz tangens dla kątów w stopniach: 0, 45,60, 90, 180


Zrobiłem coś takiego:
#include "stdafx.h"#include <iostream>#include <cstdlib>#include <math.h>#using <mscorlib.dll>using namespace System;using namespace std;void Zadanie9(){	//podaje sinusy, cosinusy, tangensy	double katPierwszy;	double katDrugi;	double katTrzeci;	double katCzwarty;	double katPiaty;	katPierwszy = 0;	katDrugi = 45;	katTrzeci = 60;	katCzwarty = 90;	katPiaty = 180;	cout << "Wartosci sinusa:" <<endl<<endl;	cout << "Sinus kata " << katPierwszy << " stopni wynosi " << Math::Sin(katPierwszy * Math::PI/180) <<endl;	cout << "Sinus kata " << katDrugi << " stopni wynosi " << Math::Sin(katDrugi * Math::PI/180) <<endl;	cout << "Sinus kata " << katTrzeci << " stopni wynosi " << Math::Sin(katTrzeci * Math::PI/180) <<endl;	cout << "Sinus kata " << katCzwarty << " stopni wynosi " << Math::Sin(katCzwarty * Math::PI/180) <<endl;	cout << "Sinus kata " << katPiaty << " stopni wynosi " << Math::Sin(katPiaty * Math::PI/180)<<endl<<endl; 		cout << "Wartosci cosinusa:" <<endl<<endl;	cout << "Cosinus kata " << katPierwszy << " stopni wynosi " << Math::Cos(katPierwszy * Math::PI/180) <<endl;	cout << "Cosinus kata " << katDrugi << " stopni wynosi " << Math::Cos(katDrugi * Math::PI/180) <<endl;	cout << "Cosinus kata " << katTrzeci << " stopni wynosi " << Math::Cos(katTrzeci * Math::PI/180) <<endl;	cout << "Cosinus kata " << katCzwarty << " stopni wynosi " << Math::Cos(katCzwarty * Math::PI/180) <<endl;	cout << "Cosinus kata " << katPiaty << " stopni wynosi " << Math::Cos(katPiaty * Math::PI/180) <<endl<<endl;		cout << "Wartosci tangensa:" <<endl<<endl;	cout << "Tangens kata " << katPierwszy << " stopni wynosi " << Math::Tan(katPierwszy * Math::PI/180) <<endl;	cout << "Tangens kata " << katDrugi << " stopni wynosi " << Math::Tan(katDrugi * Math::PI/180) <<endl;	cout << "Tangens kata " << katTrzeci << " stopni wynosi " << Math::Tan(katTrzeci * Math::PI/180) <<endl;	cout << "Tangens kata " << katCzwarty << " stopni wynosi " << Math::Tan(katCzwarty * Math::PI/180) <<endl;	cout << "Tangens kata " << katPiaty << " stopni wynosi " << Math::Tan(katPiaty * Math::PI/180) <<endl<<endl; 	system("pause");}void Zadanie10(){}  void Zadanie11(){}void Zadanie12(){}void Zadanie13(){} void Zadanie14(){} void Zadanie15(){}void Zadanie16(){}int _tmain(){	int numerzadania;	bool koniec=false;	while (!koniec)	{		cout << "wybierz zadanie (9-16):\n\n";		cout << " 9. podaje sinusy, cosinusy, tangensy\n10. podaje sume i srednia 5 podanych liczb\n11. podaje najwieksza liczbe z podanych\n12. podaje wpisane liczby w kolejnosci malejacej\n13. podaje wpisane liczby w kolejnosci rosnacej\n14. wyznacza pierwiastek rownania kwadratowego\n15. sprawdza czy podany rok jest przestepny\n16. podaje mozliwe kombinacje wyplaty kwoty w banknotach 20, 50 i 100 PLN\n\n 0. wylacza program\n\n\nktore zadanie wybierasz? "; 		cin >> numerzadania;	switch (numerzadania)	{		case 0: koniec=true; break; 		case 9: Zadanie9(); break;		case 10: Zadanie10(); break;		case 11: Zadanie11(); break;		case 12: Zadanie12(); break;		case 13: Zadanie13(); break;		case 14: Zadanie14(); break;		case 15: Zadanie15(); break;		case 16: Zadanie16(); break;		default: cout << "nie wpisales liczby z zakresu 9-16!\n";		system ("pause");	}	}	return 0;}

Chodzi ładnie, ale mam jeszcze zaokrąglić te wszystkie sin, cos, tg do 2 miejsc po przecinku za pomocą printf.
cout << "Sinus kata " << katDrugi << " stopni wynosi " << Math::Sin(katDrugi * Math::PI/180) <<endl;
Jak zamienić cout'y na printf? Może coś mnie naprowadzicie? Trochę sam kombinowałem, ale zbytnio nie wychodziło.

  • 0

#2 Kazeeny

Kazeeny

    Stały użytkownik

  • 209 postów

Napisano 24 10 2010 - 13:04

Musisz napisać coś takiego:
printf("Sinus kata %lf stopni wynosi %0.2lf\n", katDrugi, Math::Sin(katDrugi*(Math::PI/180)) );
Gdzie %lf to oznaczenie formatowania dla double, z kolei 0.x oznacza, do którego miejsca po przecinku zaokrąglić liczbę (w linijce wyżej mamy 0.2 czyli do drugiego).

Kombinowałeś podobnie? ;)

Użytkownik Katarina edytował ten post 24 10 2010 - 13:04

  • 0

#3 piotrek080

piotrek080

    Początkujący

  • 20 postów

Napisano 24 10 2010 - 14:10

Trochę inaczej próbowałem. Kojarzę mniej więcej o co chodzi z % i tym wszystkim, ale nie szło mi złożyć do kupy. Nie jestem fachowcem w tej dziedzinie ;) Dzięki za szybką pomoc.
  • 0

#4 Kazeeny

Kazeeny

    Stały użytkownik

  • 209 postów

Napisano 24 10 2010 - 18:24

Nie dziwię się, w końcu cout trochę upraszcza życie w wyświetlaniu danych ;) Ponadto w C++ jest biblioteka funkcji (iomanip), która też pozwala na formatowanie danych.
Generalnie w miejscu %typ_danej jest wstawiana wartość zmiennej albo wyniku funkcji, które są "wyliczone" zaraz za tekstem w cudzysłowach.

Użytkownik Katarina edytował ten post 24 10 2010 - 18:25

  • 0

#5 fernandez

fernandez

    150% normy

  • 1 866 postów

Napisano 25 10 2010 - 08:15

w C++ w bibliotece iostream jest cos takiego jak precision


http://www.cplusplus.com/reference/iostream/ios_base/precision/

  • 0

Zobacz więcej tematów z tagiem: język C++



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych