|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
Aiuto urgente programma C!!!
Una matrice sparsa è una matrice nella quale la maggior parte degli elementi valgono zero. Una matrice sparsa può essere convenientemente rappresentata utilizzando delle liste (relative alle righe o alle colonne) che riportano i valori non nulli, anziché un array bidimensionale.
Scrivere una libreria ANSI C che esporta le funzioni per la lettura da tastiera di una matrice sparsa, la stampa a video di una matrice sparsa, il calcolo della somma di due matrici sparse, e il calcolo del prodotto di due matrici sparse. Devo fare sto programma ma non so da dove iniziare, chi mi può aiutare??? Grazie dell'aiuto Toni |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
scusa, ma se la matrice inserita dall'utente con la tastiera non è sparsa...?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
la matrice deve essere sparsa per forza
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
e se l'utente non ne scrive una sparsa che fai, lo ammazzi?
![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Per prendere in input una matrice sparsa basta chiedere le coordinate di ogni elemento diverso da zero ed il rispettivo valore ![]() Nella lista memorizzerai le coordinate e il valore... Somma e prodotto sono banali... Ti do un suggerimento per la somma, che è la più facile (così il prodotto te lo studi da solo) : A + B = C C è formata dall'unione delle liste di A e di B se non hanno elementi con le stesse coordinate... In tal caso il nuovo elemento di C avrà valore pari alla somma dei rispettivi elementi di A e di B a quelle coordinate... |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
Grazie dell 'aiuto, il mio problema è che non ho idea di come deve essere scritta sta libreria che esporta le funzioni per la lettura di codesta matrice sparsa.
Per la somma e il prodotto non c'e problema |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Un libreria suppongo che sia intesa come un .h e un .cpp...
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
#include <stdio.h>
#include <stdlib.h> /*prototipo della funzione MATRICE_SPARSA */ int MATRICE_SPARSA(int m, int p, int *ALFA, int *V1, int *V2, int *V3); main( ) { /*dichiarazione di variabili */ int m, p, k, j, num; int Alfa [10] [10] , V1[15], V2[15], V3[16]; printf("Memorizzazione di una matrice sparsa \n"); printf("Digitare la dimensione della matrice (Righe Colonne)\n"); scanf("%d %d", &m, &p); printf("Digitare i %d elementi della matrice \n"); printf("Digitare i %d elementi della matrice \n"); for (k = 0; k < m; k++) { for (j = 0; j < p; j++) { scanf("%d", &Alfa[k][j]); } } /*chiamata della funzione MATRICE_SPARSA */ num = MATRICE_SPARSA(m, p,Alfa,V1,V2,V3); if (num == 0) printf("La matrice è nulla!\n"); else { printf("\n1°vettore: \n"); for (k = 0; k < V3[num-1]; k++) printf("%d ", V1[k]); printf("\n2°vettore: \n"); for (k = 0; k< V3[num -1]; k++) printf("%d ", V2[k]); printf("\n3°vettore: \n"); for (k = 0; k <= num; k++) printf("%d ", V3[k]); } } /*--------------------------------------*/ /* Inizio funzione della matrice sparsa */ /*--------------------------------------*/ int MATRICE_SPARSA (int m, int p, int *Alfa, int *V1, int *V2, int *V3) { typedef enum { true, false } logical; int Ind, Ind2, e, f; logical Trovato; /* "Ind" e "Ind2" sono due contatori che ci servono per riempire i 3 array: "Ind" viene utilizzato per i primi 2 e ci restituire il numero di elementi non nulli della matrice, "Ind2" viene utilizzato per il terzo, la cui dimensione (generalmente minore di quella degli altri 2) deve essere restituito come valore della funzione. */ Ind = Ind2 = 0; Trovato = false; for (e = 0; e < m; e++) { for (f = 0; f < p; f++) { if (*(Alfa +e*10+f) != 0) { *(V1 + Ind) = *(Alfa + e * 10 + f ); *(V2 + Ind) = f + 1; if (Trovato == false) { *(V3 + Ind2) = Ind + 1; Trovato = true; Ind2++; } Ind++; } } Trovato = false; } *(V3 + Ind2) = Ind + 1; return Ind2; } Potrebbe andare bene una roba cosi????? |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No...devi fare 2 file...
sparsa.h che contiene tutti i prototipi delle funzioni... sparsa.c che contiene le implementazioni delle funzioni dichiarate in sparsa.h Poi ovviamente ti serve un altro file .c in cui metterai il main con le istruzioni per testare la funzionalità delle matrici... Per usare le funzioni di sparse.h in questo file, basta fare #include "sparsa.h" Ma non dovevi implementarle con le liste ?!?!?!? E poi perchè fai inserire tutti gli elementi della matrice ???? |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Tanto epr cominciare... In input devi chiedere la dimensione della matrice, poi il numero di elementi diversi da zero... In base a questi con un solo for prendi in ingresso riga, colonna e valore di ogni elemento...
Quindi ti consiglio di implementare una struct "sparsa": Codice:
struct elem { int riga; int colonna; int valore; struct elem *next; }; struct sparsa { int righe; int colonne; struct elem *lista; } //alloca una struttura "sparsa" e la ritorna al chiamante (riempiendo le dimensioni) struct sparsa *crea_matrice_sparsa(int righe, int colonne); //distrugge la matrice sparsa deallocandone tutte le varie componenti, //alla fine deve andare a mettere NULL in *m void distruggi_matrice_sparsa(struct sparsa **m); //alloca e inserisce un elemento nella lista void inserisci_elemento(struct sparsa *m, int riga, int colonna, int valore); //input testuale di numero_elementi elementi della matrice void input(struct sparsa *m, int numero_elementi); //rende in output la matrice come se fosse non sparsa void output(struct sparsa *m); |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
Grazie mille dell'aiuto magico cionci ora vedo cosa posso fare
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
Scusa cionci se abuso del tuo tempo, è un mese che provo a fare sto programma e fra pochi giorni lo devo consegnare!!!
Non è che mi scriveresti una bozza te ne sarei grato per sempre!!! |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Per il calcolo matriciale, ti consiglio di dare un'occhiata alle librerie blas e lapack. Offrono delle funzioni ad hoc per il trattamento di matrici sparse, sia di tipo generico sia di particolari sottoclassi (come le tridiagonali cicliche o le pentadiagonali cicliche, ecc..) e contengono gli algoritmi che sono lo stato dell'arte in quanto a schemi risolutivi per l'inversione di queste matrici.
Tra l'altro, sui siti di Intel, AMD, IBM, ecc... trovi delle versioni particolari che sfruttano le istruzioni SIMD implementate nei rispettivi processori...
__________________
buy here |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
Non riesco a realizzare queste funzioni, il mio livello di C non è così alto come il vostro, ormai è tutto il pomeriggio che ci sbatto la testa, forse andrò a vedere l' italia!! Vi prego aiutatemi !!!!
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#18 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Noi ti possiamo aiutare, e come vedi lo facciamo volentieri: però l'esercizio lo devi svolgere tu, o non impari niente.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Sep 2005
Città: PROVINCIA PESARO-URBINO
Messaggi: 1237
|
Sta buttando giu il programma fra un po ve lo faccio vedere!!!
Spero che vada bene |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:22.