|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2002
Messaggi: 220
|
[C] problema con matrice!!!!
Devo creare un programma che, acquisita una matrice dinamica, verifica se il primo elemento di una riga è divisibile per la somma della riga stessa....
Ho buttato giu qualcosa.......ma nn so come fare la parte finale. Chi mi aiuta?? #include <stdio.h> #include <conio.c> #include <stdlib.h> void inserisci (int **,int,int); void visualizza (int **,int,int); int elemento_somma (int **,int,int); int main(void) { int rig,col,i,j,ok; int **mat; printf ("Inserisci il numero delle righe: "); scanf ("%d",&rig); printf ("Inserisci il numero delle colonne: "); scanf ("%d",&col); mat=(int**)malloc(rig*sizeof(int*)); for(i=0;i<rig;i++) mat[i]=(int*)malloc(col*sizeof(int)); inserisci(mat,rig,col); visualizza(mat,rig,col); ok=elemento_somma(mat,rig,col); printf("vettore somma=%d", ok); getch(); system("PAUSE"); } void inserisci (int **mat,int rig,int col) {int i,j; clrscr(); printf("Inserisci per righe la matrice"); for(i=0;i<rig;i++) for(j=0;j<col;j++) {gotoxy(30+3*j,3+i); scanf("%d",&mat[i][j]); } } void visualizza (int **m,int rig,int col) {int i,j; for (i=0;i<rig; i++) for(j=0;j<col;j++) {gotoxy(30+3*j,15+i); printf("%d",m[i][j]); } } int elemento_somma (int **mat, int rig, int col) {int i,j,elemento_somma; for (i=0;i<rig; i++) elemento_somma=0; for (j = 1; j < col; j++) elemento_somma = mat [rig][j]; return (elemento_somma); }
__________________
Athlon xp 2500@2300mhz, abit nf7-s, creative geforce4 ti 250@300-500@600, 256x2 ddr 400 samsung dual channel, H.D. maxtor diamond plus 60gb, soundblaster live 5.1, mast.dvd piooner 105, mast.cd liteon 40125S, creative inspire 5+1..... |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Sep 2002
Messaggi: 220
|
ma cosa devo cercare in quel sito che mi hai dato??
__________________
Athlon xp 2500@2300mhz, abit nf7-s, creative geforce4 ti 250@300-500@600, 256x2 ddr 400 samsung dual channel, H.D. maxtor diamond plus 60gb, soundblaster live 5.1, mast.dvd piooner 105, mast.cd liteon 40125S, creative inspire 5+1..... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2003
Città: Regno Unito
Messaggi: 5714
|
clicca col destro e fai salva con nome
![]()
__________________
3090 FE & Ryzen 5700x - Legion 7 5800h 32gb - 3080 16gb |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
scusa ma il primo numero di una riga non può essere diviso per la somma dei numeri di quella riga, a meno che gli altri elementi non siano tutti nulli, ma in questo caso non vedo l'utilità del programma. ti puoi spiegare meglio su cosa deve fare il programma? se hai il testo puoi incollarlo qui?
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Sep 2002
Messaggi: 220
|
Il programma deve acquisire da tastiera una matrice in modo dinamico e dire se il primo numero della riga è divisibile per la somma della riga stessa.
Esempio: 3 7 8 ----------> la somma è 18 ed è divisibile per il primo numero 3.
__________________
Athlon xp 2500@2300mhz, abit nf7-s, creative geforce4 ti 250@300-500@600, 256x2 ddr 400 samsung dual channel, H.D. maxtor diamond plus 60gb, soundblaster live 5.1, mast.dvd piooner 105, mast.cd liteon 40125S, creative inspire 5+1..... Ultima modifica di Rikka : 08-01-2005 alle 19:24. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 673
|
Quote:
infatti se leggi nel programma che ho scritto ho specificato nei commenti questo fatto ![]() Alla fine per logica ho deciso di fare arbtrariamente somma % primo elemento ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
Quote:
|
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
l'ho fatto in 5 minuti e senza ricontrollarlo cmq dovrebbe essere una cosa del genere
Codice:
#include <stdlib.h> #include <stdio.h> int main () { int righe, colonne, **matrice, i, j, el, somma; printf("Inserisci il numero di righe: "); scanf("%d", &righe);printf("\nInserisci il numero di colonne: "); scanf("%d", &colonne); if (righe<=0 || colonne<=0) { printf("\n\nInserire numeri positivi!!"); exit(-1); } matrice=(int **) calloc (righe, sizeof(int **)); for (i=0; i< righe; ++i) matrice[i]= (int *) calloc (colonne, sizeof(int *)); for (i=0; i< righe; ++i) { for (j=0; j< colonne; ++j) { printf("\nInserisci l'elemento in posizione %d, %d: ", i, j); scanf ("%d", &el); matrice[i][j]= el; } } somma=0; for (i=0; i< righe; ++i) { for (j=0; j< colonne; ++j) somma+= matrice[i][j]; if (!(somma%matrice[i][0])) printf("La riga %d (somma= %d) e' divisibile per il primo elemento %d\n", i, somma, matrice[i][0]); else printf("La riga %d (somma= %d) non e' divisibile per il primo elemento %d\n", i, somma, matrice[i][0]); } system("pause"); } Ultima modifica di VegetaSSJ5 : 08-01-2005 alle 21:04. |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 673
|
se tu scrivi un programma (nel vero senso della parola) complesso.
Se tu fai tutto nel main e' un lavoro immenso se tu dividi il problema in tanti sottoinsiemi e ne analizzi uno alla volta e poi una soluzione. Quando compili e non ti gira ci metti poco a debuggare lavori sulle funzioni. Cio' ti rende tutto piu' facile. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
e quello ti sembra un programma su cui effettuare un complesso debugging??
![]() e cmq come ho detto l'ho fatto in poco tempo e non ho pensato per niente alla ottimizzazione e manutenzione futura, era solo per fare un esempio funzionante da mettere a disposizione di Rikka |
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Sep 2002
Messaggi: 220
|
grazie a tutti!!!!!
__________________
Athlon xp 2500@2300mhz, abit nf7-s, creative geforce4 ti 250@300-500@600, 256x2 ddr 400 samsung dual channel, H.D. maxtor diamond plus 60gb, soundblaster live 5.1, mast.dvd piooner 105, mast.cd liteon 40125S, creative inspire 5+1..... |
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Sep 2002
Messaggi: 220
|
Ho un altro problema......questo programma acquisisce da tastiera un vettore e dovrebbe visualizzare un altro vettore con gli elementi che si ripetono nel primo vettore.
Sembra che funzioni ma quando lo stesso numero si ripete per piu di 1 volta es.( 345323 compare tre volte il numero 3) nn visualizza il numero 3 che si ripete, ma 333!!!!! Dovè l errore????? Poi come faccio a visualizzare i numeri che si ripetono cosi: 3 4 5 anziche cosi 3 4 5 Grazie!!! #include <stdio.h> #include <conio.c> #include <stdlib.h> void leggi(int*,int); void stampa_vettore(int*,int); int ripetuti(int*,int); //void nuovo void main(void) { int n,*v,c; printf("Inserisci il numero degli elementi del vettore (Numero Intero)\n"); scanf("%5d",&n); v =(int*)malloc(n*sizeof(int)); leggi(v,n); stampa_vettore(v,n); ripetuti(v,n); getch(); system("PAUSE"); } void leggi(int*p,int l) { int i; printf("inserisci i numeri nel vettore\n\n"); for( i = 0 ; i<l ; i++) scanf("%d",&p[i]); } void stampa_vettore(int*p, int l) { int i; printf("il vettore è....\n"); printf ("\n\n"); for( i=0;i<l;i++) printf("%3d\n",p[i]); printf("\n\n"); } int ripetuti(int*p, int l) { int i,j,c; c=0; for (i=0; i<l; i++) { for (j=i+1; j<l; j++){ if (p[i]==p[j]){ c=c+1; printf ("L'elemento che si ripete è: "); printf("%d", p[i]); } } } }
__________________
Athlon xp 2500@2300mhz, abit nf7-s, creative geforce4 ti 250@300-500@600, 256x2 ddr 400 samsung dual channel, H.D. maxtor diamond plus 60gb, soundblaster live 5.1, mast.dvd piooner 105, mast.cd liteon 40125S, creative inspire 5+1..... |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
Codice:
#include <stdlib.h> #include <stdio.h> int esiste (int *vet, int dim, int num); int main (void) { int dim, i, j, *vet, *rip; printf("Inserisci la dimensione del vettore: "); scanf("%d", &dim); if (dim<=0) { printf("La dimensione del vettore deve essere positiva!"); exit(-1); } vet= (int *) calloc (dim, sizeof(int)); rip= (int *) calloc (dim, sizeof(int)); j=0; for (i=0; i<dim; ++i) { printf("\nInserisci il numero %d: ", i+1); scanf("%d", &vet[i]); if (esiste(vet, i, vet[i]) && !esiste(rip, j, vet[i])) { rip[j]=vet[i]; ++j; } } if (j>0) { printf("\n\nGli elementi che si ripetono sono:"); for (i=0; i<j; ++i) printf("\n%d", rip[i]); } else printf("\n\nNon ci sono elementi che si ripetono\n"); system("pause"); } int esiste (int *vet, int dim, int num) { int i; for (i=0; i<dim; ++i) if (vet[i]==num) return 1; return 0; } |
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Sep 2002
Messaggi: 220
|
Ringrazio tutti per i consigli.
Ma l'ultimo programma.......quello del vettore......si puo fare con le funzioni modificando quello che avevo postato??? Prendendo i programmi che mi avete fatto vedere ho rifatto quello con la matrice inserendoci le funzioni.......pero cè un problemino.......ad ogni riga mi memorizza anche il totale della riga precedente....... Grazie veramente a tutti!!!!!!!! #include <stdio.h> #include <conio.c> void inserisci (int **,int,int); void visualizza (int **,int,int); int elemento_somma (int **,int,int); int main(void) { int rig,col,i,j,ok; int **mat; printf ("Inserisci il numero delle righe: "); scanf ("%d",&rig); printf ("Inserisci il numero delle colonne: "); scanf ("%d",&col); mat=(int**)malloc(rig*sizeof(int*)); for(i=0;i<rig;i++) mat[i]=(int*)malloc(col*sizeof(int)); inserisci(mat,rig,col); visualizza(mat,rig,col); ok=elemento_somma(mat,rig,col); getch(); system("PAUSE"); } void inserisci (int **mat,int rig,int col) {int i,j; clrscr(); printf("Inserisci per righe la matrice"); for(i=0;i<rig;i++) for(j=0;j<col;j++) {gotoxy(30+3*j,3+i); scanf("%d",&mat[i][j]); } } void visualizza (int **m,int rig,int col) {int i,j; for (i=0;i<rig; i++) for(j=0;j<col;j++) {gotoxy(30+3*j,15+i); printf("%d",m[i][j]); } } int elemento_somma (int **mat, int rig, int col) {int i,j,elemento_somma; elemento_somma=0; for (i=0;i<rig; i++) { for (j=0; j<col; j++) elemento_somma += mat [i][j]; {gotoxy(30+3*j,15+i); if (!(elemento_somma%mat[i][0])) printf("La riga %d (somma= %d) e' divisibile per il primo elemento %d\n", i, elemento_somma, mat[i][0]); else printf("La riga %d (somma= %d) non e' divisibile per il primo elemento %d\n", i, elemento_somma, mat[i][0]); } } }
__________________
Athlon xp 2500@2300mhz, abit nf7-s, creative geforce4 ti 250@300-500@600, 256x2 ddr 400 samsung dual channel, H.D. maxtor diamond plus 60gb, soundblaster live 5.1, mast.dvd piooner 105, mast.cd liteon 40125S, creative inspire 5+1..... |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Dec 2002
Città: Mantova & Milano
Messaggi: 86
|
Sto studiando anch'io informatica (in particolare C) e ti faccio una domanda... Cosa ti ha spinto a definire una matrice come **matrice e non come matrice[][]?
Ho l'impressione che puntatori e vettori non siano così interscambiabili come sembra... La matrice che crei con due puntatori non ha una dimensione finita (magari mi dirai che questo è il bello) né i suoi elementi sono consecutivi...
__________________
No! Provare no! Fare, o non fare. Non c'è provare. Feedback positivi per: vortex99, 10ruicosta10, lera757. |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:25.