Università degli Studi di Brescia Fondamenti di Programmazione Docente: Alessandro Saetti A.A. 2012/2013 ESERCITAZIONE STRUTTURE DI CONTROLLO E VETTORI Università degli Studi di Brescia A.A. 2012/2013 Scrivere un programma C che - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) #include <stdio.h> #include <stdlib.h> int main() { // . . . Scrivere un programma C che - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) Impostiamo la solita struttura di partenza di un programma C system("pause"); return(0); } int N1,N2,D1,D2; printf("1^ frazione A/B: "); scanf("%d/%d",&N1,&D1); printf("2^ frazione C/D: "); scanf("%d/%d",&N2,&D2); Scrivere un programma C che - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) Scrivere un programma C che - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) int NS,DS; . . . NS=(N1*D2+N2*D1); DS=D1*D2; Scrivere un programma C che - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per prima cosa calcolare il MCD.) Per ridurre ai minimi termini ci basta dividere il numeratore N e il denominatore D per il MCD(N,D) Per determinare il MCD(N,D) posso seguire questa procedura: a) imposto d=min(N,D) b) provo a dividere N e D per d. c) Se N e D sono divisibili per d allora d è il MCD e termino. Altrimenti decremento d e ripeto il controllo b) d) Fine. START d=min(D,N) int d; d = (DS<NS ? DS : NS); for ( ; d>=1 ; d--) if ((NS % d == 0) && (DS % d == 0)) break; D e N sono divisibili per d ? NO d=d-1 d è il MCD SI Scrivere un programma C che printf("Somma (ridotta): %d/%d\n",NS/d,DS/d); - Acquisisca da tastiera 2 frazioni - Stampi a video la somma delle frazioni ridotta ai minimi termini. (Suggerimento: Per ridurre una frazione ai minimi termini per La soluzione definitiva è la seguente prima cosa calcolare il MCD.) #include <stdio.h> #include <stdlib.h> int main() { int N1,N2,D1,D2; int NS,DS, d; printf("1^ frazione A/B: "); // INPUT scanf("%d/%d",&N1,&D1); printf("2^ frazione C/D: "); scanf("%d/%d",&N2,&D2); NS=(N1*D2+N2*D1); // SOMMA DS=D1*D2; d=(DS<NS ? DS : NS); // MCD for ( ; d>=1 ; d--) if ((NS % d == 0) && (DS % d == 0)) break; printf("Somma (ridotta): %d/%d\n",NS/d,DS/d); system("pause"); return(0); }