NWW i NWD z wczytywaniem do tablicy ?

0

Witam, zrobiłem sobie takie coś , że podaje liczby i wczytuje mi je do tablicy:

 #include <stdio.h>

    int main()

        {

           #define  ROZMIAR  5

           int  tab[ ROZMIAR ];

           int i;

    
           for( i = 0 ; i < ROZMIAR ; i++ )              

               {

                   printf( "Tab[%2d] = ", i+1 );

                   scanf( "%d" , &tab[ i ] );

               }
               

getchar();
return 0;
}

I jak przekształcić ten algorytm, żeby mi liczył

 int NWD (int a, int b)
{
    int c;
    while (b != 0)
    {
          c = a % b;
          a = b;
          b = c;
 
    }
    return a;
} 

Tylko, żeby pobierał dane z tablicy ? I to samo jak zrobić NWW, w taki sam sposób ;0 prosze o pomoc, bo jutro mam kolosa

0

chodziło mi dla C, nigdzie nie moge znaleŹć, a dużo sie oczukałem.... jak dokleić NWW i NWD do mojego kodu

0

Ale jak dokleić?

puts("NWW");
puts("NWD");

Doklejone :P

Z czego masz te NWW i NWD liczyć? Podaj dokładnie. Ma to być liczenie parami czy od razu dla całego ciągu. NWW dla kilku liczb (wklepanych przez człowieka) najprawdopodobniej nie zmieści się w long longu.

NWW(a, b) = a / NWD(a, b) * b;
NWD(a1, a2, a3, ..., an) = NWD(NWD(a1, a2), a3, ...., an); // jak widać jest to rekurencja, oczywiście przypadek brzegowy to NWD dla list złożonej z dwóch liczb i ten przypadek już masz zakodowany
NWW(a1, a2, a3, ..., an) = a1 / NWD(a1, a2, a3, ...., an) * a2 * a3 * .... * an;

Dlaczego w NWW dzielenie jest jako pierwsze działanie, a nie (niby intuicyjniej) jako ostatnie? Po to, aby algorytm zwracał poprawny wynik, jeżeli wynik mieści się w wybranym typie danych. W przeciwnym wypadku, jeśli dzieliłbym na końcu, to przed dzieleniem mogłoby dojść do przepełnienia, mimo iż poprawny wynik mieściłby się w wybranym typie danych.

0

już napisałem ,jakby ktoś potrzebował

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

int NWD(int a, int b)
{
	while(a!=b)
	{
		if (a>b)
			a-=b;
		else
		b-=a;

	}
				return a;
}
int NWW(int a, int b)
{
	int wynik;
	wynik=(a*b)/(NWD(a,b));
	return wynik;
}

    int main()

        {

           #define  ROZMIAR  5

           int  tab[ ROZMIAR ];

           int i,wynik;

    
           for( i = 0 ; i < ROZMIAR ; i++ )               //--------- wczytanie liczb z klawiatury

               {

                   printf( "Tab[%2d] = ", i+1 );

                   scanf( "%d" , &tab[i] );

               }



wynik = tab[0];
for (i = 1; i < ROZMIAR; i++)
{
  wynik = NWD(wynik, tab[i]);
}
printf("%d", wynik);
printf("\n");


for (i = 1; i < ROZMIAR; i++)
{
  wynik = NWW(wynik, tab[i]);
}
printf("%d", wynik);
printf("\n");



               
    
system("PAUSE");
return 0;
} 
0

Zapomniałeś jednego "wynik = tab[0]". Poza tym nie stosujesz kolejności liczenia, o której napisałem w moim poście. No i stosujesz wolną wersję NWD, zamiast szybkiej którą miałeś w pierwszym poście. Ogólnie to rozwiązanie jest marne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1