Zamiana wpisanego tekstu na wartość liczbową
Ostatnio zmodyfikowano 2015-11-23 20:56
Moras Temat założony przez niniejszego użytkownika |
Zamiana wpisanego tekstu na wartość liczbową » 2015-11-23 19:56:40 Od niedawna zacząłem uczyć się języka C++. Ostatnio udało mi się stworzyć program który liczy średnią z podanych ocen z sprawdzianów i kartkówek, ale chciałbym by program po wpisaniu przez użytkownika "+3" zamienił tą wartość na 3.75. Szukam w internetach, ale nie mogę znaleźć. Proszę o pomoc. |
|
Gibas11 |
» 2015-11-23 20:14:22 Po pobraniu stringa przeszukaj go pod kątem znaków '+' i '-' , zapamiętaj je, a następnie z ich pominięciem dokonaj konwersji na int . Gdy już będziesz miał liczbę, w wypadku znalezienia plusa dodaj 0.5 , minusa - 0.25 lub nie rób nic jeżeli nie podano znaku. Mogą przydać ci się funkcje string.find(...) , string.erase(...) i itoa(...) , informacje o nich na luzie znajdziesz w dokumentacji na tej stronie. |
|
Moras Temat założony przez niniejszego użytkownika |
» 2015-11-23 20:32:19 Jestem dość zielony i dopiero łapie podstawy. Mógłbyś zmodyfikować ten kod by zamieniał "+3" na 3.5? Może łatwiej by mi było to ogarnąć.
#include <iostream>
using namespace std;
int liczba_ocenS, liczba_ocenK; float suma_ocenS=0, suma_ocenK=0, srednia;
int main() { cout << "Program oblicza twoja srednia ocen" <<endl; cout<<endl<<"Podaj liczbe ocen z sprawdzianow: "; cin>>liczba_ocenS;
int ocenyS[liczba_ocenS];
for(int i=0;i<liczba_ocenS;i++) { cout<<endl<<"Podaj "<<i+1<<" ocene "; cin>>ocenyS; suma_ocenS+=ocenyS*2;
} cout<<endl<<"Podaj liczbe ocen jedno wagowych: "; cin>>liczba_ocenK;
int ocenyK[liczba_ocenK];
for(int i=0;i<liczba_ocenK;i++) { cout<<endl<<"Podaj "<<i+1<<" ocene "; cin>>ocenyK; suma_ocenK+=ocenyK;
}
srednia=(suma_ocenS+suma_ocenK)/(liczba_ocenS*2+liczba_ocenK);
cout<<endl<<"Srednia twoich ocen to "<<srednia; return 0; } |
|
Gibas11 |
» 2015-11-23 20:51:07 Wybacz, nie lubię przerabiać cudzego kodu. :/ Tu masz program dot. zagadnienia o które pytałeś, powinien rozwiać wszystkie twoje wątpliwości. c: #include <iostream> #include <string>
int atoi( char * s ) { int tmp = 0; for( int i = 0; s[ i ] != '\0'; i++ ) { tmp *= 10; tmp += s[ i ] - '\0'; } return tmp; }
int main() { char znak = '\0'; double wynik; int pozycjaZnaku; std::string ocena; std::cin >> ocena; pozycjaZnaku = ocena.find( '+' ); if( pozycjaZnaku != std::string::npos ) { znak = '+'; ocena.erase( ocena.begin() + pozycjaZnaku ); } else { pozycjaZnaku = ocena.find( '-' ); if( pozycjaZnaku != std::string::npos ) { znak = '-'; ocena.erase( ocena.begin() + pozycjaZnaku ); } } wynik = atoi( ocena.c_str() ); if( znak == '-' ) wynik -= 0.25; else if( znak == '+' ) wynik += 0.5; std::cout << wynik; return 0; }
EDIT: Program ma swoje wady i zalety: 1. Znaki '+' i '-' mogą być zarówno na początku, jak i na końcu oceny 2. M.in. "3+5" jest traktowane jak 35+ i daje wynik 35.5 |
|
Moras Temat założony przez niniejszego użytkownika |
» 2015-11-23 20:56:00 Dzięki za pomoc. Biorę się za przerabianie. |
|
« 1 » |