LegendKiller Posted March 24, 2010 Report Posted March 24, 2010 Nu stiu ce am patit , dar nu imi iese nicio problema ..Se citesc de la tastatura 2 multimi de numere intregi. Afisati intersectia, reuniunea si diferenta dintre cele doua multimi. Quote
loki Posted March 24, 2010 Report Posted March 24, 2010 (edited) apropo, in general precizeaza la probleme cam la ce materie ai ajuns? Sunt 3 metode citirea si pentru memorarea datelor:1) iti cere alocare dinamica - pointeri (inclusiv liste, stive, cozi etc)?2) cunosti numarul de elemente al multimilor, M si N (nu le citesti de la tastatura) si folosesti tablouri array mul1[M] mul2[N]?3) declari 2 tablouri de un numar maxim de elemente, sa zic mul1[10000], mul2[10000] si citesti de la tastatura dimensiunea multimii M<10000 si N<10000?O rezolvare (3) Folosesc o functie de validare a multimilor care elimina elementele care se repeta. Modificat cu optimizari:Am scos validarile de pe rezultat. Erau necesare la reuniunea M1 U M2 dar am folosit o formula mai utila, M1 U M2 = M1 U (M2-M1). (elementele din M1 + elementele care sunt in M2 si nu in M1)Prima data calculam in 2 bucle intersectia M1^M2, diferenta M1-M2 si copiem M1 in vectorul reuniunii.Apoi calculam diferenta M2-M1 si in paralel in aceeasi bucla reuniunea dupa formula M1 U M2 = M1 U (M2-M1).Daca presupui ca multimile sunt introduse corect fara ca elementele sa se repete, atunci poti scoate de tot functia validare.#include <stdio.h>int mul1[10000];int mul2[10000];int reuniune[20000];int intersectie[10000];int diferenta12[10000];int diferenta21[10000];int n1,n2,nu=0,ni=0,nd12=0,nd21=0;int i,j;int validare(int *, int);int main(){// citim datele printf("n1="); scanf("%d",&n1); printf("Baga elementele multimii\n"); for(i=0;i<n1;i++) scanf("%d",&mul1[i]); printf("Baga elementele celei de a doua multimi\n"); printf("n2="); scanf("%d",&n2); for(i=0;i<n2;i++) scanf("%d",&mul2[i]);// eliminam ce se repeta n1=validare(mul1,n1); n2=validare(mul2,n2);// punem in reuniune prima multime// calculam intersectia: elementele comune// calculam diferenta 1-2: elementele din 1 care nu sunt in 2 for(i=0;i<n1;i++) { int gasit=0; reuniune[nu]=mul1[i]; nu++; for(j=0;(j<n2)&&(!gasit);j++) if(mul1[i]==mul2[j]) { intersectie[ni]=mul1[i]; ni++; gasit=1; } if(!gasit) { diferenta12[nd12]=mul1[i]; nd12++; } }// calculam diferenta 2-1: elementele din 2 care nu sunt in 1// completam reuniunea cu diferenta 2-1 for(j=0;j<n2;j++) { int gasit=0; for(i=0;(i<n1)&&(!gasit);i++) if(mul1[i]==mul2[j]) gasit=1; if(!gasit) { reuniune[nu]=diferenta21[nd21]=mul2[j]; nd21++; nu++; } }//afisam printf("\nReuniune: "); for(i=0;i<nu;i++) printf("%d ",reuniune[i]); printf("\nIntersectie: "); if(ni) for(i=0;i<ni;i++) printf("%d ",intersectie[i]); else printf("M. Vida"); printf("\nDiferenta Mul1-Mul2: "); if(nd12) for(i=0;i<nd12;i++) printf("%d ",diferenta12[i]); else printf("M. Vida"); printf("\nDiferenta Mul2-Mul1: "); if(nd21) for(i=0;i<nd21;i++) printf("%d ",diferenta21[i]); else printf("M. Vida"); return 0;}int validare(int *multime, int n){ for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) if(multime[i]==multime[j]) { n--; multime[j]=multime[n]; } return n;} Edited March 24, 2010 by loki Quote
Nytro Posted March 24, 2010 Report Posted March 24, 2010 Daca mai vi cu astfel de cereri ai ban. Quote
Vio88mm Posted May 25, 2011 Report Posted May 25, 2011 inseamna ca ar trebui sa-ti dai ban tie insuti."Vii" se scrie cu 2 de " i ". pr0tipPostul meu este ulti. Quote
Moderators Dragos Posted May 25, 2011 Moderators Report Posted May 25, 2011 inseamna ca ar trebui sa-ti dai ban tie insuti."Vii" se scrie cu 2 de " i ". pr0tipPostul meu este ulti.gay gay train, everybody fucks everybody Quote
Flubber Posted May 26, 2011 Report Posted May 26, 2011 inseamna ca ar trebui sa-ti dai ban tie insuti."Vii" se scrie cu 2 de " i ". pr0tipPostul meu este ulti.Ai inviat thread din 2010. Quote