Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zamiana wpisanego tekstu na wartość liczbową

Ostatnio zmodyfikowano 2015-11-23 20:56
Autor Wiadomość
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.  
P-140662
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.
P-140663
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;
}
P-140665
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:

C/C++
#include <iostream>
#include <string>

int atoi( char * s ) //Funkcja dokonująca konwersji char* na int, nie wszystkie kompilatory ją mają, więc napisałem ją dla pewności od nowa.
{
    int tmp = 0;
    for( int i = 0; s[ i ] != '\0'; i++ )
    {
        tmp *= 10;
        tmp += s[ i ] - '\0';
    }
    return tmp;
}

int main()
{
    char znak = '\0'; //Zmienna na znak '+' lub '-'
    double wynik; //Końcowa ocena bez '+' i '-'
    int pozycjaZnaku; //Potrzebne do wyszukiwania znaków '+' i '-'
    std::string ocena; //String na ocenę z wejścia
   
    std::cin >> ocena; //Pobieranie oceny
   
    pozycjaZnaku = ocena.find( '+' ); //Szukanie '+'
    if( pozycjaZnaku != std::string::npos ) //Jeżeli znaleziono...
    {
        znak = '+'; //Ustawić znak na '+'
        ocena.erase( ocena.begin() + pozycjaZnaku ); //I usunąć '+' z ciągu
    }
    else //Jeżeli nie...
    {
        pozycjaZnaku = ocena.find( '-' ); //Szukanie '-'
        if( pozycjaZnaku != std::string::npos ) //Jeżeli znaleziono...
        {
            znak = '-'; //Ustawienie znak na '-'
            ocena.erase( ocena.begin() + pozycjaZnaku ); //Usunięcie '-' z ciągu
        }
    }
   
    wynik = atoi( ocena.c_str() ); //Konwersja ciągu znaków na int i zapisanie wyniku do zmiennej "wynik"
    if( znak == '-' )
         wynik -= 0.25; //Jeżeli znaleziono '-' odjąć 0.25
    else if( znak == '+' )
         wynik += 0.5; //Jeżeli znaleziono '+' dodać 0.5
   
    std::cout << wynik; //Wyświetlanie wyniku
   
    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
P-140667
Moras
Temat założony przez niniejszego użytkownika
» 2015-11-23 20:56:00
Dzięki za pomoc. Biorę się za przerabianie.
P-140668
« 1 »
  Strona 1 z 1