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

Duże liczby

Ostatnio zmodyfikowano 2017-06-16 14:55
Autor Wiadomość
michal11
» 2017-06-14 22:23:04
W ramach ćwiczeń
C/C++
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string num1 = "23";
    std::string num2 = "14";
   
    auto misPair = std::mismatch( num1.cbegin(), num1.cend(), num2.cbegin() );
   
    if( misPair.first == num1.cend() )
    {
        std::cout << "Equals" << std::endl;
    }
    else
    {
        std::cout << num1 << " ";
        std::cout <<(( * misPair.first < * misPair.second ) ? "<"
            : ">" );
        std::cout << " " << num2 << std::endl;
    }
   
    return 0;
}

+ lektura
http://www.cplusplus.com​/reference/algorithm/mismatch/
http://www.cplusplus.com​/reference/utility/pair/
http://www.cplusplus.com​/reference/string/string/cbegin/
http://www.cplusplus.com​/reference/string/string/cend/

Edit.
Wstawię 3 linijki z elsa bo formater coś to rozjeżdża
std::cout << num1 << " ";
std::cout << ( ( *misPair.first < *misPair.second )?"<":">" );
std::cout << " " << num2 << std::endl;

Bardziej staromodne podejście
C/C++
std::string num1 = "1223";
std::string num2 = "1224";

int mismatchIndex = 0;

while( num1[ mismatchIndex ] == num2[ mismatchIndex ] )
{
    ++mismatchIndex;
}

std::cout << mismatchIndex << std::endl;

w zasadzie to samo co std::mismatch tylko zrobione ręcznie.
P-162561
bartinio07
Temat założony przez niniejszego użytkownika
» 2017-06-15 01:52:07
C/C++
if( diff < 0 ) {
    a.insert( a.begin(), - diff, '0' ); //uzupełnianie zerami do równej długości
} else if( diff > 0 ) {
    b.insert( b.begin(), diff, '0' );

Nie rozumiem do końca tego zapisu, za co odpowiada insert i begin? Poza tym, nie dałoby się tego zrobić w jakiś prostszy sposób? Jest to jedno z zadań do tematu o pętli for i funkcjach.
P-162564
pekfos
» 2017-06-15 02:13:45
C/C++
if( a.length() > b.length() && znak == ">" || znak == ">=" || znak == "!=" )
     cout << "TAK";
else if( a.length() < b.length() && znak == "<" || znak == "<=" || znak == "!=" )
     cout << "TAK";
else
     cout << "NIE";
Ten fragment zawsze podaje jakąś odpowiedź.
P-162565
Chowan
» 2017-06-15 12:44:38
Mam pytanko. Czy ta funkcja insert jest po to aby wyrównać długość tablic(wstawiasz dif '0' na początku stringa), żeby przy porównaniu nie wychodzić poza zakres tablicy, bo tam może coś być i zaburzy to wynik​?
P-162570
bartinio07
Temat założony przez niniejszego użytkownika
» 2017-06-15 12:57:53
No przecież ma zawsze podawać odpowiedź Tak lub Nie, w zależności od tego, czy nierówność jest prawdziwa.
P-162572
pekfos
» 2017-06-15 13:36:51
No przecież ma zawsze podawać odpowiedź Tak lub Nie, w zależności od tego, czy nierówność jest prawdziwa.
No właśnie ma nie zawsze podawać. Jeśli sam ten fragment podaje odpowiedź, reszta kodu nie ma znaczenia.

Dla uproszczenia kodu i warunków, napisz funkcję, która zwraca signum różnicy dwóch liczb. Aktualnie na siłę utrudniasz sobie życie z tymi wszystkimi operatorami.
C/C++
if( oper == ">=" )
     std::cout << porownaj( liczba1, liczba2 ) >= 0 ? "TAK"
    : "NIE";

Nie musisz implementować odejmowania, po prostu zwracaj ręcznie wartości -1/0/1 jeśli wykryjesz, że któraś z liczb jest większa.
P-162575
mateczek
» 2017-06-15 17:54:02
Mam pytanko. Czy ta funkcja insert jest po to aby wyrównać długość tablic(wstawiasz dif '0' na początku stringa),

jeśli na wejście trafią stringi "123" i "12345" to pierwszy z nich będzie przerobiony na "00123" Porównanie wówczas jest banalne bo wystarczy posłużyć się operatorem już zdefiniowanym do sortowania napisów 
P-162579
pekfos
» 2017-06-15 19:22:45
jeśli na wejście trafią stringi "123" i "12345" to pierwszy z nich będzie przerobiony na "00123" Porównanie wówczas jest banalne bo wystarczy posłużyć się operatorem już zdefiniowanym do sortowania napisów
Jeśli na wejście trafią stringi "123" i "12345", to nie trzeba nawet sprawdzać ich zawartości.
P-162580
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona