[C] Najmniejsza wspólna wielokrotność

matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

Muszę napisać program (a w nim funkcję) oliczająca najmniejszą wspólną wielokrotność liczb w języku C.

Chodzi o to że najpierw użytkownik ma podać dla ilu liczb chce liczyć nww a następnie podać te liczby.
Ostatnio zmieniony 10 mar 2013, o 10:21 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
pawellogrd
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 19 lis 2009, o 15:03
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 121 razy
Pomógł: 156 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: pawellogrd »

A w czym dokładniej jest problem, aby ten program napisać? Spróbuj przynajmniej, w internecie jest dużo informacji o tym jak wczytywać dane z klawiatury, no i sam algorytm na obliczanie NWW również jest. Jak w trakcie pisania natkniesz się na problemy, to pisz.
matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
int NWW(int, int);
int main(int argc, char *argv[])

{ 


    int z;
    printf("Podaj dla ilu liczb chcesz policzyc NWW");
    scanf("%d", &z);
    int a;
    printf("Podaj liczbe calkowita");
    scanf("%d", &a);    
    if(z==1)
            printf("NWW=%d", a);
    else 
        {
          int b,i;
          for(i=1; i<z; i++)
            {
             printf("Podaj liczbe calkowita");
             scanf("%d", &b);
             a*k=NWW(a, b);
         }
printf("NWW=%d", a*k);     
         }
  
  system("PAUSE");	
  return 0;
}


int NWW (int a, int b)
{
    while ((a*k)%b!=0)
    {
          if(a<b)
           x=a
           a=b
           b=x
     }
          return a;
}

Napisałam coś takiego tylko mam problem gdzie zdeklarować k=1, żeby działało
Ostatnio zmieniony 9 mar 2013, o 20:47 przez Althorion, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
dexter90
Użytkownik
Użytkownik
Posty: 391
Rejestracja: 11 lis 2011, o 09:48
Płeć: Mężczyzna
Pomógł: 32 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: dexter90 »

w funkcji głównej main();
matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

A tak dokładniej jak to ma wyglądać? wogóle to co napisałam jest dobrze?
dexter90
Użytkownik
Użytkownik
Posty: 391
Rejestracja: 11 lis 2011, o 09:48
Płeć: Mężczyzna
Pomógł: 32 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: dexter90 »

Dobrze wiesz, że to nawet się nie kompiluje.... W ogóle za ten kod powinnaś dostać mistrza.
matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

No to własnie dlatego proszę o pomoc
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10217
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: Dasio11 »

matfka pisze:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

int NWW(int, int);

int main(int argc, char *argv[])
{ 
    int z;
    printf("Podaj dla ilu liczb chcesz policzyc NWW");
    scanf("%d", &z);
    
    int a;
    printf("Podaj liczbe calkowita");
    scanf("%d", &a);    
    
    if(z==1) printf("NWW=%d", a);
    else 
    {
        int b,i;
        for(i=1; i<z; i++)
        {
            printf("Podaj liczbe calkowita");
            scanf("%d", &b);
            a*k=NWW(a, b);
        }
        printf("NWW=%d", a*k);     
    }
  
    system("PAUSE");   
    return 0;
}
Ta część kodu jest poprawna, tylko po co to *k ? Przecież w instrukcji a*k=NWW(a, b); chcesz tak naprawdę przypisać zmiennej \(\displaystyle{ a}\) wartość \(\displaystyle{ \mathrm{NWW}(a, b),}\) więc po prostu chcesz napisać a=NWW(a, b);. Podobnie, w instrukcji printf("NWW=%d", a*k); chcesz wypisać wartość zmiennej \(\displaystyle{ a,}\) więc napisz po prostu printf("NWW=%d", a);.


Druga część kodu - definicja funkcji NWW - na razie nie jest poprawna składniowo ani logicznie, ale trudno coś doradzić, bo nie wiem, jak chciałabyś, żeby ta funkcja działała.
matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

chciałam dać i wtedy, żeby \(\displaystyle{ k}\) się zwiększało o \(\displaystyle{ 1}\) do momentu aż reszta z dzielenia \(\displaystyle{ \frac{ak}{b}}\) będzie równa zero. A i jeszcze zapomniałam tam napisać
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10217
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: Dasio11 »

Ale te operacje chcesz wykonać w celu obliczenia wartości NWW, tak? Jeśli tak, to powinno się to dziać w ciele funkcji NWW, a w tej drugiej części (tej, którą cytowałem) zmienna \(\displaystyle{ k}\) jest niepotrzebna.
A metodę obliczania NWW, którą napisałaś, można zakodować tak:

Kod: Zaznacz cały

int NWW (int a, int b)
{
    int k=1;

    while((a*k)%b != 0)
    {
        ++k;
    }

    return a*k;
}
Najpierw jest deklaracja zmiennej \(\displaystyle{ k}\) typu int, żeby kompilator wiedział, że będziesz jej używać. Tej zmiennej od razu przypisana jest początkowa wartość \(\displaystyle{ 1}\). Potem wartość \(\displaystyle{ k}\) jest zwiększana tak długo, aż liczba \(\displaystyle{ a \cdot k}\) będzie dzielić się przez \(\displaystyle{ b.}\) Wówczas wyrażenie \(\displaystyle{ a \cdot k}\) będzie równe \(\displaystyle{ \mathrm{NWW}(a, b),}\) a więc to wyrażenie zostaje zwrócone instrukcją return.
matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

No i wtedy w tej pierwszej części ma być

Kod: Zaznacz cały

a=NWW(a,b)
, czy

Kod: Zaznacz cały

a*k=NWW(a,b)
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: Althorion »

Druga linijka jest nonsensowna składniowo (i wątpliwa logicznie) — przypisać coś (do tego służy operator =) możesz zmiennej, nie ich iloczynowi. Jak by to, Twoim zdaniem, miało działać? Gdzie znalazłaby się wartość NWW(a, b)?
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10217
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: Dasio11 »

Twoje wątpliwości być może biorą się z powtórzenia nazwy. W obu kodach:
Kod 1:    
oraz
Kod 2:    
występuje zmienna \(\displaystyle{ a,}\) a w tym drugim kodzie zwracana jest wartość \(\displaystyle{ a \cdot k,}\) i ta właśnie wartość pojawia się po prawej stronie w instrukcji ?=NWW(a, b); w pierwszym kodzie.
Musisz wiedzieć, że oprócz nazw, te zmienne nie mają ze sobą nic wspólnego. Jest tak dlatego, że w tym przypadku zasięg każdej zmiennej ogranicza się tylko do funkcji, w której ta zmienna była zadeklarowana (instrukcją int a), a wszystkie wystąpienia zmiennych o tej samej nazwie poza tym zasięgiem nie oznaczają już tej zmiennej, ale inną lokalną. Kod 2 równie dobrze mógłby wyglądać tak:
Nowy kod 2:    
i działałoby to tak samo.
matfka
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 19 sty 2013, o 11:45
Płeć: Kobieta
Lokalizacja: polska
Podziękował: 31 razy
Pomógł: 3 razy

[C] Najmniejsza wspólna wielokrotność

Post autor: matfka »

Już kapuje. Dziękuję bardzo Dasio11
ODPOWIEDZ