Autore |
Discussione  |
|
tipo85
Utente giovane

|
Inserito il - 01/02/2008 : 09:11:53
|
salve ragazzi, sono uno studente di fisica che deve sostenere un esame di programmazione con un vostro professore. Come ben sapete noi di fisica non sappiamo una cicca di programmazione e volevo chiedere a voi che ne sapete sicuramente più di me. La traccia dice:
Costruire un programma in C in grado di risolvere un sistema di equazioni di primo grado in due variabili con coefficienti nell’insieme dei numeri razionali. Usare il metodo di Cramer. In particolare si chiede di: 1. Definire “tipoRazionale” come struttura i cui campi sono “numeratore” e “denominatore”, entrambi dichiarati di tipo “intero”. 2. Dichiarare una matrice equazioneLineare (2×3) di tipo “tipoRazionale” che rappresenta un sistema di due equazioni lineari in due variabili. Esempio: Assegnata la coppia di equazioni lineari nelle variabili x e y ax + by = c dx + ey = f con a, b,c, d, e, f di tipo “TipoRazionale”. 3. Definire e implementare una procedura per l’inizializzazione della matrice equazioneLineare. 4. Definire e implementare una procedura per la stampa della matrice equazioneLineare. 5. Definire e implementare la procedura somma (tre argomenti) che ha in input “v1” e “v2” di tipo “tipoRazionale” e costruisce “v” di tipo “tipoRazionale” con v.numeratore=v2.denominatore×v1.numeratore + v1.denominatore×v2.numeratore v.denominatore=v1.denominatore×v2. denominatore 6. Definire e implementare la procedura differenza che ha in input “v1” e “v2” di tipo “tipoRazionale” e costruisce “v” di tipo “tipoRazionale” con v.numeratore=v2.denominatore×v1.numeratore - v1.denominatore×v2.numeratore v.denominatore=v1.denominatore×v2. denominatore 7. Definire e implementare la funzione prodotto che ha in input “v1” e “v2” di tipo “tipoRazionale” e restituisce “v” di tipo “tipoRazionale” con v.numeratore=v1. numeratore × v2.numeratore v.denominatore=v1.denomintore× v2.denominatore 8. Definire e implementare la procedura divisione che ha in input “v1” e “v2” di tipo “tipoRazionale” e costruisce “v” di tipo “tipoRazionale” con v.numeratore=v1. numeratore × v2.denominatore v.denominatore=v1.denominatore × v2. numeratore 9. Definire e implementare la procedura determinanteQuadrato che ha in input una matrice equazioneLineare (2×3) di tipo “tipoRazionale”, gli indici i e j di tipo intero e costruisce determinante di “tipoRazionale”. Suggerimento: Utilizzare le procedure prodotto e differenza definite ai punti7-6. 10. Definire e implementare la procedura cramer che ha in input una matrice equazioneLineare (2×3) di tipo “tipoRazionale” costruisce un vettore soluzione di dimensione 2 di tipo “tipoRazionale” che descrive le soluzioni x e y del sistema di equazioni lineari. Suggerimento usare la procedura determinanteQuadrato definita al punto 9 e divisione definita al punto 8 11. Definire e implementare la procedura stampaSoluzione che stampa il vettore soluzione calcolato al passo 10. 12. Costruire un main di test.
Non vi chiedo di risolvermelo tutto ma almeno fino al punto 5 o 6 almeno che riesco a realizzare le stutture poi per le operazioni ci sbatto io la testa...grazie mille
|
|
feeb
Cantù Che Conta Col Cayenne
  

Prov.: Zara
|
Inserito il - 01/02/2008 : 13:34:08
|
Citazione: Messaggio inserito da tipo85
Non vi chiedo di risolvermelo tutto ma almeno fino al punto 5 o 6 almeno che riesco a realizzare le stutture poi per le operazioni ci sbatto io la testa...grazie mille
#include <stdio.h>
#include <stdlib.h>
typedef struct t_tipoRazionale {
int numeratore;
int denominatore;
} tipoRazionale;
void inizializza(tipoRazionale equazioneLineare[2][3], tipoRazionale a,
tipoRazionale b, tipoRazionale c, tipoRazionale d,
tipoRazionale e, tipoRazionale f) {
equazioneLineare[0][0] = a;
equazioneLineare[0][1] = b;
equazioneLineare[0][2] = c;
equazioneLineare[1][0] = d;
equazioneLineare[1][1] = e;
equazioneLineare[1][2] = f;
}
void stampa(tipoRazionale equazioneLineare[2][3]) {
printf("%d/%d x + %d/%d y = %d/%d\n", equazioneLineare[0][0].numeratore,
equazioneLineare[0][0].denominatore, equazioneLineare[0][1].numeratore,
equazioneLineare[0][1].denominatore, equazioneLineare[0][2].numeratore,
equazioneLineare[0][2].denominatore);
printf("%d/%d x + %d/%d y = %d/%d\n", equazioneLineare[1][0].numeratore,
equazioneLineare[1][0].denominatore, equazioneLineare[1][1].numeratore,
equazioneLineare[1][1].denominatore, equazioneLineare[1][2].numeratore,
equazioneLineare[1][2].denominatore);
}
tipoRazionale somma(tipoRazionale v1, tipoRazionale v2) {
tipoRazionale v;
v.numeratore = v2.denominatore * v1.numeratore + v1.denominatore * v2.numeratore;
v.denominatore = v1.denominatore * v2. denominatore;
return v;
}
tipoRazionale differenza(tipoRazionale v1, tipoRazionale v2) {
tipoRazionale v;
v.numeratore = v2.denominatore * v1.numeratore - v1.denominatore * v2.numeratore;
v.denominatore = v1.denominatore * v2. denominatore;
return v;
}
int main(void) {
tipoRazionale equazioneLineare[2][3];
tipoRazionale a;
a.numeratore = 1;
a.denominatore = 2;
inizializza(equazioneLineare, a, a, a, a, a, a);
stampa(equazioneLineare);
return EXIT_SUCCESS;
}
|
http://www.avaaz.org/it/ - http://www.flickr.com/photos/dimethyltryptamine/ |
 |
|
Chilavert
admin
    

Regione: Puglia
Prov.: BA
Città: Bari
|
Inserito il - 01/02/2008 : 14:08:16
|
Proporrei di aggiungere una funzione MCD che restituisce il massimo comune divisore, per ridurre le frazioni. |
E' un bene per il Prof. Xxxxxxx che sappia con chi ha a che fare. Pensa a studiare e non agli esempi, o ad altre strade per così dire, che questa volta mi sa che non attacca. [cit.]
Tutti professori dall'esterno, e poi parlano persone che per prendere un voto decente ripetono l'esame 30 volte e poi fanno i sapientoni con chi segue la prima volta vedi chilavert [cit.] |
 |
|
feeb
Cantù Che Conta Col Cayenne
  

Prov.: Zara
|
|
Chilavert
admin
    

Regione: Puglia
Prov.: BA
Città: Bari
|
Inserito il - 01/02/2008 : 14:15:57
|
Dovrebbe essere così;
int mcd(int num1, int num2){
int v1, v2;
if (num1 > num2){
v1 = num1;
v2 = num2;
} else {
v1 = num2;
v2 = num1;
}
int resto = v1 % v2; //modulo
while (resto != 0) {
v1 = v2;
v2 = resto;
resto = v1 % v2;
}
return v2;
}
E quindi, prima di ritornare v nelle varie funzioni, richiami mcd(v.numeratore, v.denominatore) e li dividi per ciò che ti viene fuori. |
E' un bene per il Prof. Xxxxxxx che sappia con chi ha a che fare. Pensa a studiare e non agli esempi, o ad altre strade per così dire, che questa volta mi sa che non attacca. [cit.]
Tutti professori dall'esterno, e poi parlano persone che per prendere un voto decente ripetono l'esame 30 volte e poi fanno i sapientoni con chi segue la prima volta vedi chilavert [cit.] |
 |
|
tipo85
Utente giovane

|
Inserito il - 01/02/2008 : 18:24:55
|
salve ragazzi, vi ringrazio per l'aiuto. Sto prendendo spunto da quello che mi avete proposto voi e lo sto adattando per renderlo più dinamico possibile Questo è quello che ho prodotto ma quando lo avvio nn mi dà errori ma nel Borland sembra quasi che non entra nel main perchè l'istruzione printf("vediamo se esce") nn me la fa. Come mai??? aiutooooooo....grazie ancora
#include <stdio.h>
#include <stdlib.h>
struct tipoRaz{
int numeratore;
int denominatore;
};
typedef struct tipoRaz TipoRazionale;
void inizializza(TipoRazionale [2][3], TipoRazionale , TipoRazionale ,
TipoRazionale , TipoRazionale , TipoRazionale ,
TipoRazionale );
void assegnaeqLin(TipoRazionale [2][3]);
main()
{
TipoRazionale eqLin[2][3];
TipoRazionale a, b, c, d, e, f;
printf("vediamo se esce");
inizializza(eqLin, a, b, c, d, e, f);
assegnaeqLin(eqLin);
printf("%d", eqLin[0][0].numeratore);
system("PAUSE");
return 0;
}
void inizializza(TipoRazionale eqLin[2][3], TipoRazionale a, TipoRazionale b,
TipoRazionale c, TipoRazionale d, TipoRazionale e,
TipoRazionale f){
eqLin[0][0]= a;
eqLin[0][1]= b;
eqLin[0][2]= c;
eqLin[1][0]= d;
eqLin[1][1]= e;
eqLin[1][2]= f;
}
void assegnaeqLin(TipoRazionale eqLin[2][3])
{
int i,j;
for(i=0;i<=1;i++){
for(j=0;j<=2;j++){
printf("Inserire il numeratore\n");
scanf("%d", &eqLin[i][j].numeratore);
printf("Inserire il denominatore\n");
scanf("%d", &eqLin[i][j].denominatore);
printf("\n");
}
}
} |
 |
|
Galgantur
Utente medio
 

Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 01/02/2008 : 18:44:03
|
Citazione: Messaggio inserito da tipo85
salve ragazzi, vi ringrazio per l'aiuto. Sto prendendo spunto da quello che mi avete proposto voi e lo sto adattando per renderlo più dinamico possibile Questo è quello che ho prodotto ma quando lo avvio nn mi dà errori ma nel Borland sembra quasi che non entra nel main perchè l'istruzione printf("vediamo se esce") nn me la fa. Come mai??? aiutooooooo....grazie ancora
forse è stupido, ma invece di mettere "main()" metti "int main(int argc, char *argv[])" ricordo che a me il dev mi dava sempre sto errore... |
 |
|
tipo85
Utente giovane

|
Inserito il - 01/02/2008 : 18:50:32
|
Ho provato!! Ma niente... mi dà sempre gli stessi problemi! grazie comunque...AIUTATEMIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII |
 |
|
airbag
utente salvato da un
  

Città: manchester
|
Inserito il - 01/02/2008 : 19:55:07
|
a me compila e mi da anche un risultato, non ho capito se sia giusto http://img529.imageshack.us/img529/372/immagine1tn4.png
|
<>Can't you see them? Can't you see them? roots can't hold them Bugs console them<> <big><big><big><i><font color="#000033">since yourheadisshacking inthat yourarmsareshacking inthat yourfeetareshacking cause theEarthisshackin'</font></i></big></big></big> |
 |
|
Chilavert
admin
    

Regione: Puglia
Prov.: BA
Città: Bari
|
Inserito il - 01/02/2008 : 20:18:14
|
Citazione: Messaggio inserito da airbag
a me compila e mi da anche un risultato, non ho capito se sia giusto http://img529.imageshack.us/img529/372/immagine1tn4.png
http://www.laureateci.it/forum/topic.asp?TOPIC_ID=5599 |
E' un bene per il Prof. Xxxxxxx che sappia con chi ha a che fare. Pensa a studiare e non agli esempi, o ad altre strade per così dire, che questa volta mi sa che non attacca. [cit.]
Tutti professori dall'esterno, e poi parlano persone che per prendere un voto decente ripetono l'esame 30 volte e poi fanno i sapientoni con chi segue la prima volta vedi chilavert [cit.] |
 |
|
airbag
utente salvato da un
  

Città: manchester
|
Inserito il - 01/02/2008 : 20:43:14
|
Citazione: Messaggio inserito da Chilavert
Citazione: Messaggio inserito da airbag
a me compila e mi da anche un risultato, non ho capito se sia giusto http://img529.imageshack.us/img529/372/immagine1tn4.png
http://www.laureateci.it/forum/topic.asp?TOPIC_ID=5599
ehm, ovviamente il non so se sia giusto è riferito all'intero che stampa |
<>Can't you see them? Can't you see them? roots can't hold them Bugs console them<> <big><big><big><i><font color="#000033">since yourheadisshacking inthat yourarmsareshacking inthat yourfeetareshacking cause theEarthisshackin'</font></i></big></big></big> |
 |
|
Chilavert
admin
    

Regione: Puglia
Prov.: BA
Città: Bari
|
Inserito il - 01/02/2008 : 20:56:34
|
Citazione: Messaggio inserito da airbag
Citazione: Messaggio inserito da Chilavert
Citazione: Messaggio inserito da airbag
a me compila e mi da anche un risultato, non ho capito se sia giusto http://img529.imageshack.us/img529/372/immagine1tn4.png
http://www.laureateci.it/forum/topic.asp?TOPIC_ID=5599
ehm, ovviamente il non so se sia giusto è riferito all'intero che stampa
Lo so, sacca d'aria. Ma il system("pause") mi rievoca questa storia... |
E' un bene per il Prof. Xxxxxxx che sappia con chi ha a che fare. Pensa a studiare e non agli esempi, o ad altre strade per così dire, che questa volta mi sa che non attacca. [cit.]
Tutti professori dall'esterno, e poi parlano persone che per prendere un voto decente ripetono l'esame 30 volte e poi fanno i sapientoni con chi segue la prima volta vedi chilavert [cit.] |
 |
|
feeb
Cantù Che Conta Col Cayenne
  

Prov.: Zara
|
Inserito il - 02/02/2008 : 00:03:09
|
Citazione: Messaggio inserito da tipo85
salve ragazzi, vi ringrazio per l'aiuto. Sto prendendo spunto da quello che mi avete proposto voi e lo sto adattando per renderlo più dinamico possibile Questo è quello che ho prodotto ma quando lo avvio nn mi dà errori ma nel Borland sembra quasi che non entra nel main perchè l'istruzione printf("vediamo se esce") nn me la fa. Come mai??? aiutooooooo....grazie ancora
#include <stdio.h>
#include <stdlib.h>
struct tipoRaz{
int numeratore;
int denominatore;
};
typedef struct tipoRaz TipoRazionale;
void inizializza(TipoRazionale [2][3], TipoRazionale , TipoRazionale ,
TipoRazionale , TipoRazionale , TipoRazionale ,
TipoRazionale );
void assegnaeqLin(TipoRazionale [2][3]);
main()
{
TipoRazionale eqLin[2][3];
TipoRazionale a, b, c, d, e, f;
printf("vediamo se esce");
inizializza(eqLin, a, b, c, d, e, f);
assegnaeqLin(eqLin);
printf("%d", eqLin[0][0].numeratore);
system("PAUSE");
return 0;
}
void inizializza(TipoRazionale eqLin[2][3], TipoRazionale a, TipoRazionale b,
TipoRazionale c, TipoRazionale d, TipoRazionale e,
TipoRazionale f){
eqLin[0][0]= a;
eqLin[0][1]= b;
eqLin[0][2]= c;
eqLin[1][0]= d;
eqLin[1][1]= e;
eqLin[1][2]= f;
}
void assegnaeqLin(TipoRazionale eqLin[2][3])
{
int i,j;
for(i=0;i<=1;i++){
for(j=0;j<=2;j++){
printf("Inserire il numeratore\n");
scanf("%d", &eqLin[i][j].numeratore);
printf("Inserire il denominatore\n");
scanf("%d", &eqLin[i][j].denominatore);
printf("\n");
}
}
}
cambia printf("vediamo se esce"); con printf("vediamo se esce\n"); o, in modo equivalente, puts("vediamo se esce"); altrimenti su alcuni SO, se non metti il newline alla fine o non flushi lo stream su cui stai scrivendo (stdout, stderr, ..) non ti mostra la stringa
idem con printf("%d", eqLin[0][0].numeratore);
per il resto, sul mio fronte non sembra ci siano problemi:
http://www.neuralnoise.com/ScreenshotTipo85.jpg
|
http://www.avaaz.org/it/ - http://www.flickr.com/photos/dimethyltryptamine/ |
Modificato da - feeb in data 02/02/2008 00:06:01 |
 |
|
|
Discussione  |
|
|
|