Pobieranie danych

Tykis

Użytkownik
Dołączył
Luty 27, 2007
Posty
32
no widzę, że dyskusja się rozwinęła dość mocno;-) no a ja może wyjaśnie sprawę do końca, bo myślałem , że będę miał problem tylko z wczytaniem danych. No więc rozchodzi się o program sprawdzający NIP, ale po tym co mi poradziliście potem jeszcze napotkałem kilka problemów. Więc po pierwsze rozchodzi się tu o 10 cyfr, a nie 9 - mój błąd :-/ A oto moje wypociny:
Kod:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;

int a[10];

string nip;
float wynik;
int i, suma;
int main()
{

cout << "Podaj NIP ";
cin >> nip;

for(i = 0; i < 10; i++);
{
a[i] = nip[i];
}
suma=(a[1]*6)+(a[2]*5)+(a[3]*7)+(a[4]*2)+(a[5]*3)+(a[6]*4)+(a[7]*5)+(a[8]*6)+(a[9]*7);
wynik=suma%11;
if (wynik==a[10])
{
cout<<"Twoj nip jest prawidlowy";
}
else 
{
cout<<"Twoj nip jest nieprawidlowy";
}
getchar();
}

Jakby ktoś nie pamiętał ja to działa:
Program sprawdzający NIP. Ostatnie pozycja to suma kontrolna. Sumujemy 9 pierwszych liczb pomnożonych przez określone współczynniki: 657234567. Wynik dzielimy przez 11 i wyznaczamy resztę z dzielenia. Reszta powinna być identyczna z ostatnią cyfra NIP.

No i jest teraz tak, że odpala, ale nie liczy jak trzeba i jeszcze na koniec pokazuje się windowsowe okienko o raportowaniu błędów. A poza tym wypisując kontrolnie sume albo wynik za każdym razem pokazuje 0.
PODKREŚLAM - dopiero zaczynam z c++, więc wybaczcie proste błędy.
Z góry dziękuję za pomoc.
Pozdrawiam
 

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
Tablice indeksujesz od 0, więc ostatni element to a[9]. Pisałem Ci, żeby traktować cyfry ascii jako typ int trzeba odjąć od nich 48.
 

Tykis

Użytkownik
Dołączył
Luty 27, 2007
Posty
32
Rzeczywiście, zapomniałem o tym:p spróbuje później to poprawić i zobaczę co z tego wyjdzie
 

Tykis

Użytkownik
Dołączył
Luty 27, 2007
Posty
32
Poprawiłem, ale...
wygląda to teraz tak:
Kod:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;

int a[10];

string nip;
float wynik;
int i, suma;
int main()
{
cout << "Podaj NIP ";
cin >> nip;

for(i = 0; i < 10; i++);
{
a[i] = nip[i]-48;
}
suma=(a[0]*6)+(a[1]*5)+(a[2]*7)+(a[3]*2)+(a[4]*3)+(a[5]*4)+(a[6]*5)+(a[7]*6)+(a[8]*7);
wynik=suma%11;

if (wynik==a[9])
{
cout<<"Twoj nip jest prawidlowy";
}
else 
{
cout<<"Twoj nip jest nieprawidlowy";
}
getchar();
}

Błędy są te same, czyli sumę i wynik pokazuje jako 0 i nie końcu windowsowy raport błędu.
Nie mam pojęcia co z tym zrobić
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
1. Nie używaj zmiennych globalnych bez potrzeby.
2. Miałeś średnik przy pętli for.
3. Wynik dzielenia modulo to zawsze liczba całkowita.
4. IMHO przed sprawdzaniem, czy NIP jest poprawny trzeba by sprawdzić, czy ma odpowiednią długość, można by podać tylko 1 liczbę a w pamięci, która zajmuje tablica mogły by być śmieci, które po przemnożeniu i wydzieleniu modulo mogły by dać pozytywny wynik. To b. mało prawdopodobne.

Kod:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;


int main() {
    int a[10];
    string nip;
    int wynik;
    int i, suma;

    cout << "Podaj NIP ";
    cin >> nip;

    for(i = 0; i < 10; i++) {
        a[i] = nip[i]-48;
    }


    suma=(a[0]*6)+(a[1]*5)+(a[2]*7)+(a[3]*2)+(a[4]*3)+(a[5]*4)+(a[6]*5)+(a[7]*6)+(a[8]*7);
    wynik=suma%11;

    if (wynik==a[9]) {
        cout<<"Twoj nip jest prawidlowy";
    }
    else {
        cout<<"Twoj nip jest nieprawidlowy";
    }

    getchar();
}
 

Tykis

Użytkownik
Dołączył
Luty 27, 2007
Posty
32
nie działa :wacko: Nie mam już siły do tego. Próbowałem jeszcze pozmieniać parę rzeczy, ale nic z tego, tzn. po wpisaniu nawet prawidłowej długości nip'u wywala program. Nie wiem, może to ja mam źle zainstalowany kompilator??? albo coś z systemem nie tak, bo w sumie kompiluje bez błędów... Działa ten powyższy kod u was??
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Dla moich danych testowych działa (przykład poniżej):
1. Spróbuj dla poniższych NIPów
2. Podaj, jakie NIPy testowałeś?
3. Wkleiłeś *dokładnie* ten kod, który podałem?
4. Jak wywala się program jest jakiś komunikat?
5. Wyświetlają Ci się jakieś ostrzeżenia (ostrzeżenia!=błędy) w czasie kompilacji?

Kod:
rgawron@foo:/tmp$ ./a.out 
Podaj NIP 7680002466           
Twoj nip jest prawidlowyrgawron@foo:/tmp$ ./a.out 
Podaj NIP 7680002462
Twoj nip jest nieprawidlowyrgawron@foo:/tmp$
 

Tykis

Użytkownik
Dołączył
Luty 27, 2007
Posty
32
No właśnie wkleiłem kod prosto z forum. Żadnych ostrzeżeń, błędów kompilacji, systemowych, po prostu wywala program.
Ja próbowałem na tych nipach: 8722219232, 8722219233
Spróbuje dziś te nipy, i wieczorem też będę miał okazję przetestować to na innym kompie, także może się wszystko wyjaśni. Napiszę wieczorem co i jak

Niet.
Na obu kompach nie działa, program się po prostu wysypuje po wpisaniu dowolnej liczby cyfr i naciśnięciu enter.
dev C++ ver 4.9.9.2

Skopiowałem jeszcze raz dla pewności kod prosto z forum, ale to samo, wywala i żadnych błędów kompilacji itp.
Z tego co zrozumiałem to u Ciebie działa RobertG? Jeśli tak to coś u mnie byłoby nie tak, ale co??


Nie mam pomysłu na dalsze działanie:confused:



MAM!!!
wystarczyło zmienić
Kod:
getchar()
na
Kod:
system("pause")
i działa nareszcie:D

Dziękuję wszystkim za pomoc.
Temat uważam za zamknięty.
Pozdrawiam
 
Ostatnia edycja:
Do góry Bottom