Caso b == 0 il programma non funziona

di il
3 risposte

Caso b == 0 il programma non funziona

Questa è la consegna dell'esercizio:
In matematica, un’equazione diofantea lineare in due incognite è una equazione con coefficienti interi, ovvero ax + by = c, con a e b non entrambi nulli, di cui si ricercano le soluzioni intere. È possibile dare un semplice criterio di risolubilità: l’equazione diofantea ha soluzioni intere se e solo se c è divisibile per il massimo comun divisore di a e b.
La funzione prende come input i tre parametri a, b e c dell’equazione diofantea ax + by = c e ritorna 1 se l’equazione ammette soluzioni, 0 altrimenti. Nel caso in cui a e b siano entrambi nulli, la funzione ritorna 1 se c =0, 0 altrimenti. Ricordo che il massimo comune divisore di due numeri interi a e b, che non siano entrambi uguali a zero, è il più grande numero naturale di cui sia a sia b sono multipli. Per questa definizione, MCD(a,b)=MCD(|a|,|b|).
Il mio codice è il seguente:
main:
extern int ammette_soluzioni(int a, int b, int c);


int main(){


	int a = 5;
	int b = 2;
	int c = 3;

	int ris = ammette_soluzioni(a, b, c);

	return 0;


}
il mio file.c è questo:

#include <math.h>

int ammette_soluzioni(int a, int b, int c){


	if (a == 0 && b == 0 ){
		if (c == 0){
			return 1;
		}
		else
			return 0;
		}

	unsigned int m, n;




		m = abs(a);
		n = abs(b);

		unsigned int t, mcd;
		while (m != n){
			if (m < n){
				t = m;
				m = n;
				n = t;
			}
			m = m - n;
		}

		mcd = m;

		if (mcd % c == 0){
			return 1;
		}

		if (c % mcd == 0){
			return 1;
		}

		return 0;
	}
in alcuni va bene questo programma, però non capisco perchè diventa un ciclo continuo, cioè non funziona se gli passo dal main b == 0..
qualucuno ha capito perchè?

3 Risposte

  • Re: Caso b == 0 il programma non funziona

    Definisci una funzione MCD(int a,int b) che ti ritorna il MCD di due numeri e testa bene questa funzione.
    Quando MCD() funziona bene la richiami dall'interno di ammette_soluzioni().
  • Re: Caso b == 0 il programma non funziona

    Non esce mai da questo ciclo
    
    	while (m != n) {
    		if (m < n) {
    			t = m;
    			m = n;
    			n = t;
    		}
    		m = m - n;
    	}
    
    perché, nel caso di b=0 anche n=0 e la sottrazione non serve a nulla ...
  • Re: Caso b == 0 il programma non funziona

    Ahh adesso ho capito come risolvere il problema, grazie mille
Devi accedere o registrarti per scrivere nel forum
3 risposte