C, dodawanie pisemne

madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

C, dodawanie pisemne

Post autor: madaf007 »

Chciałbym się dowiedzieć jak mogę ten program wnieść do życia. Ciągle się ucze więc proszę o wyrozumiałość:)
#include<stdio.h>
#include<stdlib.h>
#define DLUGOSC 200
int vliDodaj(int A[], int B[], int C[])
{
int i,p,su;
p = 0; //przeniesienie
for (i=0;i<DLUGOSC;i++)
{
su = A+B+p;
C = su % 10;
p = su / 10;
}
return(p);
}
int main()
{
long int a,b,c;
long int wynik;
printf("Podaj pierwszą liczbę:
");
scanf("%d",&a);
printf("Podaj drugą liczbę:
");
scanf("%d",&b);
wynik=vliDodaj(a,b,c);
printf("Wynik:
",wynik);
system("PAUSE");
}


Moja część to od int main jest.Reszta była na wykładzie. Jak moge tą funkcje vliDodaj dać do main, żeby zadziałało? Proszę o pomoc:) Program ma liczyć dodawanie na bardzo dużych liczbach.
peterp
Użytkownik
Użytkownik
Posty: 30
Rejestracja: 27 sie 2008, o 13:29
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 3 razy
Pomógł: 5 razy

C, dodawanie pisemne

Post autor: peterp »

Funkcja vliDodaj przyjmuje jako parametry tablice integerów (czyli wskaźniki do typu int). Kompilator zgłasza błąd, bo w main jest wywołanie tej funkcji z błędnymi typami parametrów (long int zamiast tablica int).
Napisz co ten program ma robić, to się pomyśli.
Pozdrawiam.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

C, dodawanie pisemne

Post autor: kadiii »

Przekazujesz do funkcji tablice jako parametr - nie zmienną typu long int. Aby pobrać liczby od użytkownika musisz albo pobrać cyfra po cyfrze albo pobrać jako łańcuch znaków i potem pozamieniać na inty. Wynik uzyskujesz w tablicy C zwracana wartość przez funkcję vliraca jedynie przeniesienie z najstarszej pozycji.
peterp
Użytkownik
Użytkownik
Posty: 30
Rejestracja: 27 sie 2008, o 13:29
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 3 razy
Pomógł: 5 razy

C, dodawanie pisemne

Post autor: peterp »

To może tak:

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
#define DLUGOSC 76

int vliDodaj(int A[], int B[], int C[])
{
    int i, p, su;
    p = 0; //przeniesienie
    for(i = 0; i < DLUGOSC; i++)
    {
        su = A[i] + B[i] + p;
        C[i] = su % 10;
        p = su / 10;
    }
    return p;
}

wyswietl(int tab[])
{
    int i, start=0;
    for(i = DLUGOSC - 1; i >= 0; i--)
    {
        if(start || tab[i])   // nie wyświetlaj początkowych zer
        {
            printf("%d", tab[i]);
            start = 1;
        } else {
            printf(" ");
        }
    }
    printf("
");
}

int main()
{
    int a[DLUGOSC], b[DLUGOSC], c[DLUGOSC], i, p;
    srand(time(0));
    for(i = 0; i < DLUGOSC; i++) a[i] = ((double)rand()/RAND_MAX) * 10;
    for(i = 0; i < DLUGOSC; i++) b[i] = ((double)rand()/RAND_MAX) * 10;
    p = vliDodaj(a, b, c);
    if(p) printf(" ");
    printf(" ");
    wyswietl(a);
    if(p) printf(" ");
    printf("+");
    wyswietl(b);
    for(i = 0; i <= DLUGOSC + (p!=0); i++) printf("-");
    printf("
=");
    if(p != 0) printf("%d", p);
    wyswietl(c);
    printf("
");
    system("PAUSE");
}
Kod trochę pogmatwany, ale da się "ugryźć".
Pozdrawiam
ODPOWIEDZ