View Full Version : [C]Problema con le variabili...
InferNOS
21st June 2005, 17:07
Ciao ragazzi sono nuovo nel forum e spero che possiate darmi una mano nel mio intento di imparare il C...ma ho un problema con le variabili double:Ebbene si,ieri ho fatto un programmino che risolve alcuni calcoli goniometrici ma le variabili purtroppo le posso solo mettere di tipo float,se le metto di tipo double il programma nn svolge i calcoli e mi stampa a video invece di un risultato(esempio:2.584654),un nulla (0.000000000)!!!!
Che succede?sarò io che nn piaccio ai double ???Premetto che vorrei riuscire ad usarli xkè qui servono calcoli piuttosto precisi sennò con il float mi arrotonda troppo!!
Ciauz e grazie ancora...
Ecco il programmino:
#include <stdio.h>
#include <math.h>
main()
{
float X,x;
char scelta;
printf("Calcoli goniometrici:\n");
printf("a) Seno\n");
printf("b) Coseno\n");
printf("c) Tangente\n");
printf("d) Cotangente\n");
printf("e) Angolo in gradi ------> Angolo in radianti\n");
scelta = getchar();
switch(scelta)
{
case 'a':
printf("\nDammi l'angolo (x) in radianti\n");
scanf("%f",&x);
printf("La risoluzione di a) e' %.10f\n",sin(x));
break;
case 'b':
printf("\nDammi l'angolo (x) in radianti\n");
scanf("%f",&x);
printf("La risoluzione di B) e' %.10f\n",cos(x));
break;
case 'c':
printf("\nDammi l'angolo (x) in radianti\n");
scanf("%f",&x);
printf("La risoluzione di c) e' %.10f\n",tan(x));
break;
case 'd':
printf("\nDammi l'angolo (x) in radianti\n");
scanf("%f",&x);
printf("La risoluzione di d) e' %.10f\n",ctan(x));
break;
case 'e':
printf("\nDammi l'angolo in gradi (X) ed io te lo rendo in radianti (x).\n");
scanf("%f",&X);
printf("L'angolo in radianti vale: %.16f\n",x=(X*3.1415926535897932)/180);
break;
default:
printf("Selezione sbagliata!\n");
break;
}
}
tigerjact
21st June 2005, 17:28
Bho...non vedo l'errore....
Ti da sempre 0 in ogni caso???
Prova a sostituire i %f con %lf e vedi che succede.
Ciao
InferNOS
21st June 2005, 20:09
Ok grazie tigerjact,ora con "%lf" funge!!! :evai:
tigerjact
22nd June 2005, 00:53
Non ho mai capito perchè su alcuni compilatori va comunque mentre su altri no....
Cmq quando ti vengono sti dubbi quarda come è stata prototipata la funzione e guardane gli esempi, e da li puoi risalire ai tuoi errori.
Ad esempio il libro che ho letto io dice che si può usare indiferentemente %f per float e double, mentre la "giuda" del mio compilatore mi diceva di usare %lf.
Buono studio!
Ciao
InferNOS
22nd June 2005, 11:25
Ad esempio il libro che ho letto io dice che si può usare indiferentemente %f per float e double
Infatti anche io sto studiando su un libro che dice di usare %f o %lf indifferentemente...ok grazie cmq per il consiglio... ;)
InferNOS
22nd June 2005, 21:11
ciao ragazzi mi servirebbe un aiuto sempre per il programmino già postato.Ebbene chi conosce alla grande la funzione <math.h>?Chi la conosce mi dovrebbe aiutare!!!Mi serve ricavare da un numero decimale (es. 1.727272) la frazione (in quel caso 19/11)... :paura:
lo so che vi chiedo tanto però mi fareste un grande favore... :D
tigerjact
22nd June 2005, 23:05
Allora nn ho idea di come la implementi la math.h, probabilmente lo fa con le serie...
Se il numero è periodico puoi fare tu i calcoli...
al numeratore il numero periodico e al denominatore tanti 9 quante sono le cifre del periodo.
Ex 1.23232323periodico...... 1+23/99
5.2222222 5+2/9
Lo so che non è molto....
InferNOS
23rd June 2005, 19:33
al numeratore il numero periodico e al denominatore tanti 9 quante sono le cifre del periodo.
Scusa tigerjact ma nn ho ben capito che significa mettere tanti 9 quante sono le cifre del periodo...thanks a lot!!!
Per gli altri decimali nn sai nulla??
tigerjact
23rd June 2005, 20:07
o 1 esame domani e nn ci ho guardato...
InferNOS
23rd June 2005, 20:11
ok vai tranquillo allora...cmq la frase mettere tanti 9 quante sono le cifre del periodo l'ho capita,ci avevo ragionato poco!!!
L'importante serebbe l'altra cosa...cmq grazie ed in bocca a lupo x l'esame!!
ciauz
InferNOS
24th June 2005, 17:01
ciao ragazzi...ho ancora problemi con le variabili...stavolta di tipo char!!!Vi posto il programmino e vi chiedo di eseguirlo sul vostro pc cosicchè possiate capire meglio il mio problema...
#include <stdio.h>
main()
{
int n,m,i,j,y,volte;
char x,z;
printf("Inserire il numero linee: ");
scanf("%d",&n);
printf("Inserire il numero di colonne: ");
scanf("%d",&m);
printf("Inserire il carattere che dovra' comporrere la cornice: ");
scanf("%s",&x);
printf("Inserire il carattere che dovra' comporrere la parte interna del rettangolo: ");
scanf("%s",&z);
printf("Inserire il numero di visualizzazioni: ");
scanf("%d",&volte);
for(y=1; y<=volte; y++)
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(i==1 || i==n || j==1 || j==m) {
printf("%c",x);
if(j==m) printf("\n");
}
else printf("%c",z);
}
tigerjact
24th June 2005, 18:55
senza averlo eseguito prova a fare sta vodifica:
Quando prendi un solo carattere scrivi %c e non %s
Fammi sapere.
Ciao
InferNOS
24th June 2005, 19:31
Quando prendi un solo carattere scrivi %c e non %s
Il problema che proprio mettendo %c il programma nn va come dovrebbe,invece con %s va meglio ma nn visualizza i caratteri della cornice...bho...eseguilo così capirai meglio...
tigerjact
24th June 2005, 20:42
Prova a usare la getch()
dovrai includere qualcosa con certi compilatori, ma non ricordo cosa...
per la visualizzaziono...okkio all'if e al ciclo...
for(y=1; y<=volte; y++)
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(i==1 || i==n || j==1 || j==m) {
printf("%c",x);
if(j==m) printf("\n");
}
else printf("%c",z);
}
Se non ho capito male di visualizza le cornici sfasate, giusto???
Scusami ma nn ho molto tempo x copiarlo e eseguirlo...
(uso un vekkio compilatore e non interagisco con win...)
InferNOS
24th June 2005, 21:59
Se non ho capito male di visualizza le cornici sfasate, giusto???
Se l'eseguo con il codice che ho postato nn me le fa vedere proprio,mentre se al posto di %s metto %c,mi fa vedere delle cose stranissime...
tigerjact
24th June 2005, 23:52
Allora proviamo a spiegare....
Se scrivi %s cerchi di inserire una stringa in una char, e la cosa non va bene.
Per questo non vedi nulla.
Per il fatto che con %c vedi delle cose strane è perchè, a occhio (nn l'ho guardato bene), il ciclo crea un po troppe messe a capo.
InferNOS
25th June 2005, 18:18
ciao tigerjact per ciò che riguarda questo programmino vedrò + avanti xkè ora ho voglia di continuare nello studio dello "C".Mi sto imbattendo in un esercizio che mi chiede di fare la radice cubica di un numero dato dall'utente ma sinceramente nn saprei da dove cominciare (se fosse stata quadrata bastava includere la libreria math.h e "sqrt" per risolvere l'operazione).Siccome nn ho la + pallida idea di come si esegue la radice cubica (come dirlo al programma) avevo pensato semplicemente a questo programmino stupidissimo :
#include <stdio.h>
main()
{
float x;
printf("Dammi un numero (x) ed io ne faccio la radice cubica.\n");
scanf("%f",&x);
printf("La radice cubica di x e': %f\n",(x)^1/3);
}
Ma ovviamnete l'operazione ^ (elevamento a potenza) nn me lo riconosce...quindi ke fare???
tigerjact
26th June 2005, 01:33
Elevare è la strada giusta.
Pow()
Per il resto, vediamo se hai capito come funziona il c e riesci a trovarti da solo le info.
InferNOS
27th June 2005, 14:46
Ciao tigerjact,il programmino ora funge che è una bellezza con la funzione pow()!!!
Però avrei un problemino:come faccio a dare al programma una frazione invece ke un numero decimale?Per esempio se voglio fare la radice cubica di 27 vorrei dare come esponente 1/3 invece sono costretto a dare 0.333333333!!!NN c'è un modo x digitare la frazione??
Un altra cosa come faccio a cambiare il titolo della discussione??Così ne metto uno + generale e diverrebbe + utile x tutti quelli ke come me sono alle prime armi del C...
tigerjact
27th June 2005, 15:57
Allora, per cambiare il titolo premi "modifica" sul primo post e da la lo cambi.
Per quanto riguarda la pow uno dei primi ex che abbiamo fatto è stato quello di reimplementarla e scrivercela come volevamo...
Questo perchè aveva dei limiti...
Ma non ricordo quali...e non ho più neanche i sorgenti della reimplementazione, se no te li davo.
Dovresti metterti li e riscrivertela come vuoi, facendo un po di matematica...
Se no quardi dal manuale la pow e vedi se si può ovviare al problema.
beppeb
27th June 2005, 16:06
frazione: o ti fai dare separatamente numeratore e denominatore poi li dividi tu, oppure fai una pericolosissima analisi della stringa di input con tentativo di divisione "a mano" se trovi un /.
io il titolo della discussione lo lascerei come è, non mi pare poi così a carattere generale.
mi meraviglio che insegnino ancora il C "puro", per curiosità cosa studi?
tigerjact
27th June 2005, 16:10
bhe dai, il c è alla base di tutto, se lo fai bene riesci a capirci abbastanza di tutto il resto, sia a oggetti o misto come il c++.
E poi è contemporaneamente abbastanza potente e abbastanza facile.
beppeb
27th June 2005, 16:26
il C è abbastanza facile se fai finta di usarlo.
Del resto avere a che fare oggi con scanf / getc ecc.. mi pare alquanto anacronistico.
ripensando alla frazione: ho riletto e ma sa che nell'intrerpretazione ero andato oltre, se l'esponente è fisso a 1/3, InferNOS metti direttamente 1/3, magari con un bel cast.
InferNOS
27th June 2005, 17:24
mi meraviglio che insegnino ancora il C "puro", per curiosità cosa studi?
No non me lo stanno insegnando...lo sto imparando di spontanea volontà xkè proprio come dice tigerjact è potente e semplice,inoltre è la base del c++ e di altri illustri linguaggi come il perl o il java.
Partire da un linguaggio + "evoluto" non me la sentivo dato ke di computer fino ad ora di programmazione nn ho mai fatto nulla(ho 17 anni)...sono un pò + esperto a livello hardware ke software.Inoltre siccome (probabilmente) prenderò fra due anniingegneria informatica volevo cominciare a ad impare qualcosa di utile...
se l'esponente è fisso a 1/3, InferNOS metti direttamente 1/3, magari con un bel cast.
No l'esponente nn è fisso ma lo deve scegliere l'utente...ora mi scapoccerò un pò...
x ciò ke riguarda reimplementare la funzione pow nn saprei da dove cominciare dato ke le funzioni ancora nn le ho studiate (giusto ieri ho cominciato a leggere qualcosa sugli array...)
tigerjact
27th June 2005, 19:48
Ho una bella notizia per te.
La mia prima lezione di ingegneria.
fondamenti di informatica a.
Prof il presidente di facoltà.
Le sue prime parole:
"Buongiorno, io sono pinco pallino, vi terrò questo corso bla..bla.
Prima di cominciare, facciamo la cosa più importante:
Prendete tutto quello che credete di sapere e dimenticatelo.
Fatto?
Bene, adesso possiamo cominciare."
Che bell'inizio che è stato....s
InferNOS
27th June 2005, 21:33
Le sue prime parole:
"Buongiorno, io sono pinco pallino, vi terrò questo corso bla..bla.
Prima di cominciare, facciamo la cosa più importante:
Prendete tutto quello che credete di sapere e dimenticatelo.
Fatto?
Bene, adesso possiamo cominciare."
Ke vuol dire???Dava x scontato ke quello che sapevate era uguale a nulla o nn serviva a niente??!!?Se è così spero ke almeno quel prof sapeva il fatto suo in ambito informatico!!
Per ciò ke riguarda il programmino ho ovviato in questo modo:scanf("%f",&n) x prendere l'esponente della radice,poi ho messo pow(x,1/n)per elevare il numero preso in precendenza alla 1/n...cmq se ti dovessi ricordare come si ottiene la visualizzazione frazionaria dimmelo xkè mi farebbe comodo x altri programmi (un pò + utili).Ok x ora ti saluto e vado a studiare gli array...ciauz e grazie della pazienza ke stai dimostrando nei miei confronti.
PS:da ciò ke ho capito tu stai facendo ingegneria informatica,giusto?Potresti dirmi in generale cosa si fa in questo ramo di ingegneria??Thanks a lot!!
tigerjact
28th June 2005, 02:08
Ma....il mio prof è stato uno tra gli inventori e gli scrittori dell'sql....
Fai un po tu cosa ne sa di info...
(io ho iniziato a rispettarlo quando ho scoperto sta cosa....)
Quello che voleva dire è che è molto difficile che uno che inizia a programmare da solo capisca cos'è la programmazione "strutturata" (non sono neanche sicuro del termine)
Il problema non è tanto il cosa scrivi, ma il come lo scrivi.
A noi cercano di insegnarci a scrivere programmi che ogniuno può leggere e capire, in maniera che sia poi semplice aggiornarli in fretta.
Per quanto riguarda l'esponente, mi sembra che anche io avevo ovviato in quel modo, adesso non ricordo...
beppeb
28th June 2005, 23:06
Originally posted by InferNOS@Jun 27 2005, 17:34 PM
No non me lo stanno insegnando...lo sto imparando di spontanea volontà xkè proprio come dice tigerjact è potente e semplice,inoltre è la base del c++ e di altri illustri linguaggi come il perl o il java.
Partire da un linguaggio + "evoluto" non me la sentivo dato ke di computer fino ad ora di programmazione nn ho mai fatto nulla(ho 17 anni)...sono un pò + esperto a livello hardware ke software.Inoltre siccome (probabilmente) prenderò fra due anniingegneria informatica volevo cominciare a ad impare qualcosa di utile...
ho insegnato il linguaggio C per anni, ti garantisco che attualmente rappresenta solo una nicchia della programmazione. Per usare Java non serve conoscere il C.
Se hanno inventato linguaggi più "evoluti", è perché oggi si usano quelli. Poi fa un po' quello che vuoi, se ti diverte...
Inoltre pensaci bene se intraprendere studi di informatica: attualmente c'è molta crisi nel settore, specialmente nella programmazione.
m_auro1
29th June 2005, 13:02
E' vero c'è mooolta crisi nel settore, purtroppo perchè ci sono troppe persone che si sono buttate in questo settore spacciandosi per questo o per quello, esperto in tutto, dopo solo (forse) un diploma/laurea in informatica.
Purtroppo la realtà è differente: le problematiche del mondo del lavoro e dei clienti non sono quelle insegnate e apprese sui banchi di scuola e negli atenei.
Si arriva quindi a saturare il mercato con persone super-inesperte nel campo e pronte ad accettare qualsiasi condizione e tipo di contratto, con grande gioia dei datori di lavoro: con la stessa cifra data ad un "reale" esperto ci pagano 2-3 "neo-esperti", chiaramente duplicando/triplicando i problemi dei clienti!!! e questi rimarrano tali finchè non si accorgono della fregatura che stanno prendendo e si rivolgeranno ad altre società fornitrici che a loro volta gli rifileranno la stessa fregatura perchè in fondo tutte costrette a questo gioco da tariffe sempre più basse e gare pubbliche che hanno come discriminante l'offerta più vantaggiosa (solo considerando i termini economici) e la necessità di guadagnare.
Una volta esisteva e veniva un minimo applicato quello che si chiama Apprendistato; ora non più anche perchè difficile se non impossibile applicarlo ai laureati o a persone che si presentano con tanta conoscenza "a la cartè".
Per ora è così: ci attendono però l'India e la Cina pronte con le loro tariffe bassissime... e i loro super-esperti!!!
InferNOS
29th June 2005, 14:20
Ok ragazzi ho capito...spero allora che prima ke io mi laureai cambi la situazione...
tornando al C avrei dei consigli da chiedervi riguardo gli array:devo scrivere un programma che inizializzati in due vettori a e b della stassa lunghezza n valori interi,calcoli la somma incrociata degli elementi,la memorizzi nel vettore c e visualizzi quindi a,b e c:innanzitutto ke significa sommare gli elementi di due vettori (per esempio a[1] + b[2]=c[3]???o non è così?),inoltre ke significa somma incrociata??
tigerjact
29th June 2005, 15:03
Allora...
Innanzitutto non so cosa sia la somma incrociata, ma di una cosa sono sicuro, e cioè che non hai studiato bene gli array (e in parte i puntatori...)
Allora scrivere a[1] + b[2]=c[3] oltre che essere sbagliato come sintassi è sbagliato come idea.
perchè? a[1] indica il valore che si trova nella posizione 1 del vettore, b[2] il valore in posizione 2 etc....
Quindi se scrivi c[3]=a[1] + b[2] (che è più corretto come sintassi) non stai facendo 1 +2 = 3 ma il valore della "cella" a[1]+ il valore della cella b[2] messi nella posizione c[3]
il modo semplice per sommare 2 vettori e metterli in un terzo è:
for (i=0; i<n; i++)
c[i]=a[i]+b[i]
così sommi tutti i valori in posizione iesima mettendoli in posizione i-esima...
(poi ci sarebbero da fare dei controlli sulle dimensioni, supponi per ora che tutti i vettori abbiano dimensione uguale n)
Ex...
A=(4,6,3,6,7)
B=(3,7,1,3,2)
A+B=(7,13,4,9,9)
InferNOS
29th June 2005, 15:24
Cacchio..in effetti da subito avevo capito che sti array erano difficili!!Cmq da quello ke ho capito scrivere a[6] significa ke il vettore a ha 6 elementi di cui nn specifico l'indice,se scrivo a[6] = {1, 2, 3, 4, 5, 6} significa ke il vettore a ha 6 elementi e nella posizione a[1] ha indice 1,a[2] ha indice 2...quindi se b[6] = {2, 3, 4, 5, 6, 7}:a[6] + b[6]={3, 5, 7, 9, 11, 13},giusto???Inoltre se nn specifico i valori degli elementi a[6] + b[6] quanto fa????
Un altra cosa ho scritto questo programmino:
#include <stdio.h>
main()
{
int i,n,a[n];
printf("Digitare il numero di elementi da dare al vettore 'a': ");
scanf("%d",&n);
printf("Inserisci il valore per ogni elemeto: \n");
for(i=0;i<n;i++){
scanf("%d",&a[i]); -----> fin qui tutto a posto
}
printf("%d",a[n]); -----> ma ora vorrei ke il prog. mi visualizzasse il vettore a[n] (per esmpio se do 3 elemeti e valori che sono 1,2,3 vorrei ke mi visualizzasse 1,2,3...)
}
tigerjact
29th June 2005, 16:14
Allora innanzitutto un chiarimento.
Le locazioni dei vettori partono dalla posizione 0.
quindi il primo dato viene messo in a[0] il secondo in a[1] e così via.
quindi se il tuo vettore ha 6 elementi i suoi indici vanno da 0 a 5.
Quando il compilatore crea lo spazio per un vettore alloca la memoria, ma non guarda se ci trova qualcosa.
Quando chiedi di fare la somma tra 2 posizioni che non hai inizializzato vai a culo, e sto culo dipende da cosa c'era prima nella cella di memoria...
per stampare il vettore in c devi fare un ciclo e stampare singolarmente le singole posizioni.
Non esiste un modo (almeno che io sappia), come in java, per farlgielo stampare automaticamente.
InferNOS
29th June 2005, 18:34
Ok grazie tiger mi hai chiarito molte cose e sono riuscito anche a fare il programma!!Senti un pò mi stanno passando x la testa un pò di cosette:quando il compilatore crea l'exe c'è un qualche modo x risalire al file sorgente??Un altra cosa (molto + utopica) con il C è possibile creare dei programmi in stile windows(cioè con le finestrelle tutte colorate...) o i programmi sono limitati ad essere eseguiti con lo sfondo nero del DOS???
InferNOS
29th June 2005, 23:06
Allora mi sto imbattendo in due esercizi veramente rompini!!!Il primo mi chiede di leggere gli elementi di un vettore ed un numero k,e determinare così l'elemento + prossimo a k(in questo esercizio nn so come fare a determinare il valore + prossimo a k).
L'altro esercizio:inizializzati due vettori,uno char v1[] = "BNSIO" ed un altro char v2[] = "EISM!",devo alternare gli elementi in modo da visualizzare "BENISSIMO!"
ecco una bozza del programma:
#include <stdio.h>
main()
{
char v1[] = "BNSIO";
char v2[] = "EISM!";
char w[10];
int i;
printf("Primo vettore: ");
for(i=0;i<=5;i++){
printf("%c",v1[i]);
}
printf("\nSecondo vettore: ");
for(i=0;i<=5;i++){
printf("%c",v2[i]);
}
printf("\nVettore risultante: ");
for(i=0;i<=10;i++){
w[i]=v1[i]+v2[i];
printf("%c",w[i]); ---------->mi stampa esatteamente dei geroglifici!!!
}
}
beppeb
30th June 2005, 05:28
Originally posted by InferNOS@Jun 29 2005, 18:44 PM
Ok grazie tiger mi hai chiarito molte cose e sono riuscito anche a fare il programma!!Senti un pò mi stanno passando x la testa un pò di cosette:quando il compilatore crea l'exe c'è un qualche modo x risalire al file sorgente??Un altra cosa (molto + utopica) con il C è possibile creare dei programmi in stile windows(cioè con le finestrelle tutte colorate...) o i programmi sono limitati ad essere eseguiti con lo sfondo nero del DOS???
impossibile ottenere il sorgente, al massimo ottieni un listato assembler.
per ottenere una finestra in C puro ci vorranno un centinaio di righe di codice (programmazione fine anni '80 inizio anni '90). In C++ ne bastano un paio.
beppeb
30th June 2005, 05:34
Originally posted by InferNOS@Jun 29 2005, 23:16 PM
printf("\nVettore risultante: ");
for(i=0;i<=10;i++){
w[i]=v1[i]+v2[i];
printf("%c",w[i]); ---------->mi stampa esatteamente dei geroglifici!!!
stai tentando di sommare il valore ASCII degli elementi del primo vettore con quelli del secondo, che non ha alcun senso. devi solo accodare i valori.
printf("\nVettore risultante: ");
for(i=0;i<=4;i++)
printf("%c%c",v1[i],v2[i]);
beppeb
30th June 2005, 09:06
Originally posted by InferNOS@Jun 29 2005, 14:30 PM
Ok ragazzi ho capito...spero allora che prima ke io mi laureai cambi la situazione...
salvo miracoli la situazione non potrà che peggiorare, pensaci bene prima di trovarti disoccupato,
e sappi che all'università ti faranno programmare ben poco
InferNOS
30th June 2005, 11:38
Grazie beppeb per la risoluzione del programmino.Un altra cosa io stavo studiando il C appunto x poi "migrare" facilmente verso il C++...ebbene conosci qualche BUON libro che spieghi dalla A alla Z il C++???
per ottenere una finestra in C puro ci vorranno un centinaio di righe di codice (programmazione fine anni '80 inizio anni '90).
Sapresti dammi un link a qualche sito ke spieghi come fare??
tigerjact
30th June 2005, 12:22
Un consiglio:
Lascia perdere la grafica in c puro.
Devi partire da zero, cioè devi farti anche l'inizializzazione della scheda video...
Per quanto mi riguarda non l'ho mai fatto.
Per quanto riguarda l'altro programma questo
printf("\nVettore risultante: ");
for(i=0;i<=4;i++)
printf("%c%c",v1[i],v2[i]);
Non ti crea un'altro vettore ma fa solo la stampa.
Se vuoi creare un terzo vettore potresti fare ad esempio così
i=0;
for (j=o; j<5; j++)
{
v3[i]=v1[j];
i++;
v3[i]=v2[j];
i++;
}
InferNOS
30th June 2005, 13:13
Ho un altro esercizietto che mi chiede di inizializzare un vettore di char con una stringa di lettere dell'alfabeto e punteggiatura,visualizzi quindi il numero complessivo delle vocali e delle consonanti del vettore.
Io avevo pensato ad inizializzare 3 vettori uno con le vocali,uno con le consonanti,ed uno con entrambe ed in + la punteggiatura;poi però nn so che fare (avrei in mente di far controllare al programma il vettore con tutte le lettere e vedere se ci sono caratteri corrispondenti agli altri vettori in modo tale da affermare ke ci siano vocali o consonati...però nn so come fare a scriverlo!!!! :P )
tigerjact
30th June 2005, 13:20
Allora io di solito lo faccio in un modo strano, e cioè passando a degli interi i valori in asci dei caratteri e poi facendo dei confronti numerici.
InferNOS
30th June 2005, 17:40
Ok siccome nn mi va per scapocciarmi con questo esercizio sono passato ad un altro che chiede di fare il prodotto tra due matrici bidimensionali,inoltre è l'utente a scegliere le dimensioni degli array,infine il programma deve anche verificare la correttezza delle dimensioni inserite.Ecco il programma ke ho fatto però una volta compilato nn me lo esegue mi da errore...BHO!!!!!!!!
#include <stdio.h>
#define N 100
#define P 100
#define M 100
main()
{
int n,m,p;
int i,j,k;
int matrix[n][m];
int matrix1[m][p];
int matrix2[n][p];
do {
printf("Inserisci il numero di linee I matrice: ");
scanf("%d",&n);
}
while((n>=N) || (n<1));
do {
printf("Inserisci il numero di colonne I matrice / linee II matrice: ");
scanf("%d",&m);
}
while((n>=P) || (m<1));
do {
printf("Inserisci il numero di colonne II matrice: ");
scanf("%d",&p);
}
while((n>=M) || (p<1));
printf("\n LOADING MATRIX ONE\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++){
printf("Inserisci linea %d colonna %d val: ",i,j);
scanf("%d",&matrix[i][j]);
}
printf("\n LOADING MATRIX TWO\n");
for(i=0;i<m;i++)
for(j=0;j<p;j++){
printf("Inserisci linea %d colonna %d val: ",i,j);
scanf("%d",&matrix1[i][j]);
}
for(i=0;i<n;i++)
for(j=0;j<p;j++){
matrix2[i][j] = 0;
for(k=0;k<m;k++)
matrix2[i][j] = matrix2[i][j] + matrix[i][k] * matrix1[k][j];
}
printf("\n MATRIX ONE");
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<m;j++)
printf("%5d",matrix[i][j]);
}
printf("\n MATRIX TWO");
for(i=0;i<m;i++){
printf("\n");
for(j=0;j<p;j++)
printf("%5d",matrix1[i][j]);
}
printf("\n MATRIX PRODOTTO");
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<p;j++)
printf("%5d",matrix2[i][j]);
}
}
tigerjact
30th June 2005, 17:47
A parte che non ho capito un'acca di queloo che volevi scrivere fai due cose:
1) uttilizza i cicli solo quando servono.
Per capire quante colonne deve avere una matrice non ti serve un ciclo
2) uttilizza i cicli quando servono!
Per riempire una matrice che hai inizializzato devi riempire gli elementi a uno a uno....
non come se fossero una stringa...
Poi non ho finito di leggere.
Correggi e poi lo riguardo...
InferNOS
30th June 2005, 18:56
Per capire quante colonne deve avere una matrice non ti serve un ciclo
Si infatti faccio decidere all'utente quante colonne deve avere,senza utilizzare cicli for.
Per riempire una matrice che hai inizializzato devi riempire gli elementi a uno a uno....
non come se fossero una stringa...
Non ho ben capito cosa hai detto...ma facendo in questo modo printf("\n LOADING MATRIX ONE\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++){
printf("Inserisci linea %d colonna %d val: ",i,j);
scanf("%d",&matrix[i][j]);
}
faccio inserire all'utente i valori nella linea 0 colonna 0,linea 0 colonna 1,linea 0 colonna 2,ecc.
InferNOS
30th June 2005, 19:21
Ho risolto mettendo int n,m,p; prima della funzione main()...però questo non mi "convince":cioè che differenza c'è nel dichiarare le variabili prima o dopo la funzione main()?
tigerjact
30th June 2005, 19:47
Se la dichiari all'interno di una funzione la variabile ha volore e esite solo all'interno di quella funzione.
Cioè se tu hai due funzioni Main() e Pippo() e in tutte e due dichiari una variabile i, esiste contemporaneamente in memoria la variabile i di Main e quella di Pippo, e possono avere valori diversi.
Se la dichiari all'inizio la variabile è invecce globale, ossia in memoria è unica e viene usata contemporaneamente da chiunque la chiami...
E quindi potresti avere delle sorprese se nn la uttilizzi bene.
InferNOS
1st July 2005, 12:52
Ciao tiger,lo stesso problema lo avevo postato su un altro forum e alcuni dicevano che io avevo avuto solo fortuna nell'avviare il programma in quanto nn avevo dichiarato le dimensioni delle variabili n,m,p.(però nn potevo dirne le dimensioni se devo far decidere all'utente le dimensioni dell'array...).
Secondo me è solo fortuna:
o n,m,p prendono dei valori > di quelli che poi gli assegna, oppure il programma lavora fuori dai limiti dell'array(cosa che il c permette ma che è "pericolosa").
Cerco di spiegarmi meglio:
int n,m;
main(){
//n,m sono dichiarati ma non hanno valore( o meglio prendono il valore della locazione di mem che gli viene assegnata)
int matrix[n][m];
Ora, matrix di che dimensione è, visto che a n e m non viene assegnato niente ?
Tu hai capito di cosa volesse intendere???Sennò in che modo di far a decide re all'utente se già in partenza si danno i valori degli array??
InferNOS
1st July 2005, 15:51
Ho capito cosa volesse dire...senti un pò devo scrivere un programma che inizializzi una matrice di 18 righe e 9 colonne.Nelle prime otto colonne devono essere memorizzati in ciascuna riga i valori che l'utente dà.Poi per ogni riga fare la media dei valori che l'utente ha dato e memorizzare il numero nella nona colonna della matrice.Come faccio a fare la media per ogni singola riga e poi memorizzare il risultato nell'ultima colonna??
tigerjact
1st July 2005, 16:01
int i,colonna;
float j;
for (colonna=0; colonna<18; colonna++){
i=0;
j=0;
while (i<9) {
j=j+mat[i][colonna];
i++
}
j=j/8;
mat[i][colonna]=j; /*a sto punto i vale 9*/
}
Edit: mi ero dimenticato la media..., meglio mettere j come float...
Edit2: ovviamente essendo la media un numero con alta probabilità non intero, dovendolo salvare nella matrice dovrai inizializzarla come matrice di float.
E poi dai la possibilità all'utente di inserire anche numeri non interi.
InferNOS
1st July 2005, 20:29
Ok grazie tigerjact...anche se alla fine lo risloto in un alro modo:
#include <stdio.h>
float matrix[18][9];
main()
{
int i, j;
printf("\n \n CARICAMENTO DEI VOTI \n \n");
for(i=0; i<18; i++)
for(j=0; j<8; j++) {
printf("Ins. studente %d prova %d: ", i+1, j+1);
scanf("%f", &matrix[i][j]);
}
for(i=0; i<18; i++) {
matrix[i][8] = 0;
for(j=0;j<8;j++)
matrix[i][8] = matrix[i][8] + matrix[i][j];
matrix[i][8] = matrix[i][8] / (8);
}
printf("\n \n VISUALIZZAZIONE DELLA MATRICE \n ");
for(i=0; i<18; i++) {
printf("\n");
for(j=0; j<9; j++)
printf("%8.3f", matrix[i][j]);
}
}
Cmq mi mancano ancora due esercizietti prima di archiviare gli array...in uno devo inizializzare un vettore ed una volta che l'utente immette i valori il programma deve controllare se già sono presenti nel vettore e se si richiedere che il valore sia digitato di nuovo (come faccio a fargli controllare i numeri che ha memorizzato??)
L'altro riguarda le matrici simmetriche.Innanzitutto cosa significa??Poi devo realizzare un programma che letta una matrice deve controllare se è simmetrica...
tigerjact
1st July 2005, 21:04
Allora per controllare i numeri precedenti devi prendere il valore dato, e poi scalare il vettore di posizione in posizione facendo il confronto tra il valore salvato e il valore che si vorrebbe inserire.
consiglio: ricordati a che punto sei....
La matrice si dice simmetrica quanto la è uguale alla sua trasposta (scusa ma sto studiando geometria...)
Allora la trasposta è quando scambi le righe con le colonne...
ex
matrice
789
345
123
matrice trasposta
731
845
953
Ora che sai com'è pensa a come fare i controlli e poi se nn riesci ti aiuto....
Aiuto...Se sono uguali vuol dire che a priori le matrici devono essere quadrate, quindi del tipo matrix[n][n]
InferNOS
1st July 2005, 21:48
consiglio: ricordati a che punto sei....
In che senso???Vabbè cmq domani ci provo ora vado a vedere un pò di tv!! :P
tigerjact
2nd July 2005, 00:14
Originally posted by InferNOS@Jul 1 2005, 21:58 PM
consiglio: ricordati a che punto sei....
In che senso???Vabbè cmq domani ci provo ora vado a vedere un pò di tv!! :P
Ecco, bravo!
Con questi semplice ex devi stimolare la fantasia...
Se ti si dice tutto subito non c'è gusto...
InferNOS
2nd July 2005, 15:16
La matrice si dice simmetrica quanto la è uguale alla sua trasposta (scusa ma sto studiando geometria...)
Allora la trasposta è quando scambi le righe con le colonne...
ex
matrice
789
345
123
matrice trasposta
731
845
953
Dal tuo esempio ho capito cosa vuolo dire trasposta ma cmq una matrice per essere simmetrica deve per forza essere così:matrix[n][n]...giusto???
Inoltre la matrice
12
21 è simmetrica giusto???
tigerjact
2nd July 2005, 17:24
No!
Non ci siamo.
Allora mi quoto e provo a rispiegare
Aiuto...Se sono uguali vuol dire che a priori le matrici devono essere quadrate, quindi del tipo matrix[n][n]
Una matrice è quadrata se ha lo stesso numero di righe e di colonne.
quindi [n][n] con n=ad esempio a 2
23
56
ora calcoliamo la trasposta
25
36
La matrice 12 è del tipo [1][2], quindi non quadrata e non potrà mai essere simmetrica.
Inoltre
Allora la trasposta è quando scambi le righe con le colonne...
quindi se scrivi 12 la trasposta vale
1
2
mentre 21 è una permutazione (lasciamo perdere che nn serve).
InferNOS
4th July 2005, 16:22
Si avevo capito bene...per 12/21 intendevo i valori di una matrice quadrata...
La "teoria" l'ho capita(quindi se una matrice[n][n] è uguale alla sua trasposta si dice simmetrica.)Nel programma riesco e a far visualizzare la trasposta e penso di dover utilizzare il costrutto if-else per stabilire quando è simmetrica.Ma il problema è che nn so che mettere nell'if()!!!Sarebbe se la matrice è uguale alla sua trasposta printf("........") altrimenti printf("......").
tigerjact
4th July 2005, 16:51
Facciamo così...
Ti scrivo una matrice simmetrica e poi tu ti ricavi l'algoritmo... ;) ;) ;)
a b c
b d e
c e f
Adesso è abbastanza semplice....
Generalizza il tutto....
InferNOS
4th July 2005, 17:50
Ora che me ne sono accorto il mio libro dice che una matrice è simmetrica se gli elementi simmetrici rispetto alla diagonale principale(dal vertice alto sinistro al vertice basso destro)sono a due a due uguali...quindi una matrice simmetrica potrebbe essere questa.
1234
2312
3431
2321
Se è così si potrebbe dire al programma:
if(matrix[0][0]==matrix[3][3] && matrix[1][1]==matrix[2][2])
printf("La matrice è simmetrica");
Ma se il numero di linee/colonne non viene deciso a priori come si fa a dirlo al programma?? :muro:
jourasky
4th July 2005, 17:57
Quella non è simmetrica, una matrice è simmetrica se gli elementi Aij sono uguali agli elmenti Aji per ogni i,j con i=! j.
GLi elementi devono essere simmetrici rispetto alla diagonale principale.
EDIT: come esempio di matrice simmetrica prendi quella di tiger.
Se prendi il trinagolo inferiore e lo ribalti rispetto alla diagonale devi ottenere il triangolo superiore.
tigerjact
4th July 2005, 18:04
Giusto.
Parti da li e vedi se ci arrivi, se no ti scrivo un pezzo di codice...
InferNOS
4th July 2005, 18:05
Potresti farmi un esempio con i numeri...thanks :P
jourasky
4th July 2005, 18:09
1 5 3
5 0 5
3 5 6
L'elemento 21 (il 5) è uguale all'elemento 12 (il 5)
Lelemento 31 (il 3) è uguale all'elemento 13 (il 3) e così via per qualunque matrice n x n.
tigerjact
4th July 2005, 18:19
confermo.
InferNOS
4th July 2005, 19:25
Quindi se ho capito bene una matrice simmetrica è questa:
1 2 3 5
2 1 4 3
3 4 5 1
5 3 1 2
Giusto???Spero di si sennò :muro:
Forse ho capito ciò che dicevi riguardo alla trasposizione della matrice e quindi lo scambio delle righe con le colonne...infatti nell'if ho provato a mettere matrix[i][j]==matrix[j][i]...ma niente mi dice che sono tutte simmetriche!!!
tigerjact
4th July 2005, 20:38
Posta il codice...
Edit....ho cambiato idea e l'ho scritto io....
int sim=1;
for (i=1; i<n&∼ i++)
/*n è la dimensione della matrice, uso i come indice di colonna, e parto dalla seconda colonna perchè nella prima ho solo 1 posizione */
for(j=0; J<i&∼ j++) /*j indice di riga, controlla sino alla diagonale principale*/
if (matrix[i][j]!=matrix[j][i]) sim=0;
if (sim) println("simmetrica");
else println ("non simmetrica");
sim nel ciclo fa si che se trova un elemento non simetrico esce dal ciclo.
Così dovrebbe andare.
InferNOS
5th July 2005, 12:53
L'ho provato ieri ma non andava!!Cmq ora ci penserò...nel frattempo stavo facendo un esercizio...ed ora dovrei fare una somma di alcuni valori di una matrice tridimensionale.Allora ho una matrice:matrix[N][M][P] N = 2; M = 4; P = 3;
caricata la matrice dall'utente la visualizzo.Ora metti ke la matrice è visulaizzata è:
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
Ebbene per fare la media di tutti i valori ho fatto così ( e funge!!):
media = matrix[0][0][0];
for(i=0;i<N;i++)
for(j=0;j<M;j++)
for(k=0;k<P;k++)
media = media + matrix[i][j][k];
media = media / (24)
printf("\n\nMedia: %.2f\n",media);
Però a me serivirebbero sono alcuni valori da sommare e poi dividere per fare la media e cioè in questo caso 1,4,7,10,13,16,19,22.quindi ho pensato a fare così (non funge!!):
media = matrix[0][0][0];
for(i=0;i<N;i++)
for(j=0;j<M;j++)
for(k=0;k<P;k++)
media = media + matrix[i][j][0];
media = media / (8);
printf("\n\nMedia: %.2f\n",media);
Il programma inrero è questo:
#include <stdio.h>
#define N 2
#define M 4
#define P 3
int matrix[N][M][P];
main()
{
int i,j,k;
float media;
printf("\t\tPROGRAMMA PER LA PRESSIONE DEL SANGUE.\n");
printf("\t\t(Misurazioni:quattro volte al giorno per due giorni)\n");
printf("\n\t\t\t\t Leggenda:\n\t\t\t\t valore 1 = pressione minima\n\t\t\t\t valore 2 = pressione massima\n\t\t\t\t valore 3 = frequenza dei battiti cardiaci\n");
printf("\n\n\t\tCARICAMENTO DATI\n");
for(i=0; i<N; i++)
for(j=0; j<M; j++)
for(k=0; k<P; k++) {
printf("Ins. %do giorno %da misurazione valore %d: ", i+1, j+1, k+1);
scanf("%d", &matrix[i][j][k]);
}
printf("\n\n\tVISUALIZZAZIONE DEI VALORI\n ");
printf("Ogni tre colonne c'e' una misurazione...ogni colonna ospita un valore...\n le linee rappresentano i giorni.\n");
for(i=0; i<N; i++) {
printf("\n");
for(j=0; j<M; j++)
for(k=0; k<P; k++)
printf("%5d", matrix[i][j][k]);
}
for(i=0;i<N;i++)
for(j=0;j<M;j++)
for(k=0;k<P;k++)
media = media + matrix[i][j][0];
media = media / (8);
printf("\n\nMedia settima Pressione Minima: %.2f\n",media);
}
tigerjact
5th July 2005, 13:19
Allora non o capito come è fata la matrice (dalla visualizzazione che hai fatto...)
Però crede che l'errore di fondo sia quì.
media = media + matrix[i][j][0];
in questo modo forzi la matrice che da tridimensionale diventa bidimensionale.
E non ho capito se questo è il tuo scopo oppure no...
InferNOS
5th July 2005, 13:45
Allora non o capito come è fata la matrice (dalla visualizzazione che hai fatto...)
Qui non riesco a disegnarla come dovrebbe essere però i numeri della prima linea devono essere allineati(verticalmente) con quelli della seconda.
in questo modo forzi la matrice che da tridimensionale diventa bidimensionale.
E non ho capito se questo è il tuo scopo oppure no...
NO sicuramente non è il mio scopo,io vorrei sommare (e poi farne la media) solo alcuni dei valori immessi e cioè 1,4,7,10,13,16,19,22...ma allora come faccio???
EDIT:Ci sono riuscito!!! :vittoria: ho fatto così:
media = 0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
media = media + matrix[i][j][0];
media = media / (8);
printf("\n\nMedia Pressione Minima: %.2f\n",media);
EDIT 2:Ora il problema rimane l'esercizio delle matrici simmetriche :muro:
tigerjact
5th July 2005, 16:32
Ma sei sicuro che il mio codice non vada?
InferNOS
5th July 2005, 17:41
Hai ragione te!!!L'avevo copiata male!!!Ora funge bene...però me la potresti spiegare dettagliatamente?Grazie...
PS:un altra cosa:println cosa è(io l'ho messo printf)?E' C++ o Java??
InferNOS
13th July 2005, 20:15
Ciao ragazzi in questo giorni sto andado avanti (per la verità un pò a rilento) con lo studio del C (sono alle funzioni) quindi aspettatevi nuove mie domande!!! :P
Nel frattempo leggendo su vari forum l'argomento della grafica 3D mi ero interessato molto...ebbene se una volta imparato un programma tipo maya o 3d max studio x la creazioni di oggetti/personaggi in 3d dopo come si usano poi i vari linguaggi di programmazione (già so che il C servirà a poco infatti appena avrò terminato i miei "studi" passerò al C++) per rendere mobili quegli oggetti??Cioè avrei intenzione di acquistare un libro ke tratta di software sopracitati ma immagino ke non ci sia scritto come utilizzare il C/C++ per...quindi chiedo a voi...
tigerjact
13th July 2005, 23:25
Allora println è un errore e mi scuso.
Si tratta di java e serve a far andare in automatico la riga a capo.
per quanto riguarda documentazione e grafica io sono un grande ignorante in materia.
Per il resto, se hai problemi chiedi.
ramko
18th July 2005, 17:43
Originally posted by InferNOS@Jul 13 2005, 20:25 PM
Ciao ragazzi in questo giorni sto andado avanti (per la verità un pò a rilento) con lo studio del C (sono alle funzioni) quindi aspettatevi nuove mie domande!!! :P
Nel frattempo leggendo su vari forum l'argomento della grafica 3D mi ero interessato molto...ebbene se una volta imparato un programma tipo maya o 3d max studio x la creazioni di oggetti/personaggi in 3d dopo come si usano poi i vari linguaggi di programmazione (già so che il C servirà a poco infatti appena avrò terminato i miei "studi" passerò al C++) per rendere mobili quegli oggetti??Cioè avrei intenzione di acquistare un libro ke tratta di software sopracitati ma immagino ke non ci sia scritto come utilizzare il C/C++ per...quindi chiedo a voi...
beh non ti aspettare che sia una cosa semplice...
per fare quello che dici tu si deve realizzare un motore grafico, che non è per nulla facile anche per utenti più esperti(anche io che di c/c++ ne so abbastanza non saprei da dove iniziare)
se invece ti interessa la programmazione per windows avevo trovato un buon tutorial con listati di esempi molto utili, usando il visual c++ dalla 6 in poi utilizzando l'editor delle risorse puoi creare i dialoghi e poi nel main.cpp crei la finestra dalla risorsa...
pero' prima ti consiglio di finirti le basi del c(ti conviene vederti anche argc ed argv[] che sono i parametri del main(), operazioni di casting,le strutture, i/o su file, l'uso del #ifdef e #ifndef utilissimo per progetti composti da più file, abbituarti al riutilizzo del codice creando nomefile.h e nomefile.cpp per ogni funzione o funzioni legate) poi studiati le novità introdotte dal c++ come l'uso di new anzicche malloc()
i namespace, cin e cout ecc... ma soprattutto le *classi* quindi ereditarietà overloading polimorfismo ecc e poi la classe string molto utile...
con un po di pazienza ce la puoi fare benissimo, e comunque se farai ingegneria informatica(sono al primo anno) si parte letteralmente da ZERO... e non fare questo errore, anche se ne sai già qualkosa ti conviene fare finta che non sai nulla... perchè lo so per esperienza personale, quando si imparano certe cose dasoli, molte volte si hanno molte lacune soprattutto concettuali che possono incasinarti di brutto... meglio rifare tutto(oddio proprio tutto no :D ) ma per le cose più complesse è molto ma molto meglio così credimi...
modifica:
ah dimenticavo studiati bene le funzioni della libreria string.h cioè strlen strcmp strcpy strcat che sono molto utili per confrontare e manipolare le stringhe
ora ti dico una cosa utile:
nel c un array di char(si insomma una stringa) termina con il carattere \0 (si proprio \0 non è un errore di battitura), quindi in alcuni casi è utile sapere che per terminare una stringa ci vuole il \0
ad esempio una strcpy(cha sta per string copy) puo' essere fatta così, pero' serve anche una strlen quindi te le mostro entrambe
int mystrlen(char *str){
int len=0;
while(str[len]!='\0') len++;
return len;
}
void mystrcpy(char *destinazione, char *origine){
int i;
for(i=0; i<mystrlen(orignine); i++) destinazione[i]=origine[i];
destinazione[i]='\0';
}
queste funzionano esattamente come le strlen e strcpy della string.h
InferNOS
2nd August 2005, 10:21
Ciao raga...scusate se non mi son fatto + sentire ma ero andato in vacanza :evai: :evai: Ora ad agosto ricomincerò a studiare il C ma purtroppo :muro: devo anche cominciare i compiti x le vacanze di scuola!!!!
.@ ramko:ciao e grazie dell'interessamento...allora x ciò ke riguarda la programmazione dei giochi da dove bisogna iniziare?? (non ora ovviamente xkè prima di finire il C\C++ ce ne vorrà di tempo).Cioè devo imparare ad usare programmi tipo maya o 3d studio e poi con il C++ creare il gioco o devo impararmi ad usare directx o Opengl (per quest'ultimo ho trovato un libro:OpenGl SuperBible ke pare)??
Inoltre x ciò ke riguarda ingegneria in ke senso si parte da zero??Le cose ke ora sto imparando non saranno utili???Inoltre visto ke la stai facendo mi diresti cosa si studia in particolare??
Thanks e ciao a tutti.
ramko
6th August 2005, 15:20
Originally posted by InferNOS@Aug 2 2005, 10:31 AM
Ciao raga...scusate se non mi son fatto + sentire ma ero andato in vacanza :evai: :evai: Ora ad agosto ricomincerò a studiare il C ma purtroppo :muro: devo anche cominciare i compiti x le vacanze di scuola!!!!
..@ ramko:ciao e grazie dell'interessamento...allora x ciò ke riguarda la programmazione dei giochi da dove bisogna iniziare?? (non ora ovviamente xkè prima di finire il C\C++ ce ne vorrà di tempo).Cioè devo imparare ad usare programmi tipo maya o 3d studio e poi con il C++ creare il gioco o devo impararmi ad usare directx o Opengl (per quest'ultimo ho trovato un libro:OpenGl SuperBible ke pare)??
Inoltre x ciò ke riguarda ingegneria in ke senso si parte da zero??Le cose ke ora sto imparando non saranno utili???Inoltre visto ke la stai facendo mi diresti cosa si studia in particolare??
Thanks e ciao a tutti.
sinceramente non sono molto pratico di programmazione 3d per giochi, ma sicuramente programmi come maya o 3dsm saranno utili per creare i modelli 3d degli oggetti e dei personaggi del videogame... ovviamente conoscere le opengl/directx penso sia molto utile... magari potresti dare uno sguardo al motore grafico di quake2 (che è stato rilasciato come GPL se non erro), potrebbe essere un bell'esempio...
per Ingegneria, invece, volevo dire che si parte da zero, diaciamo da flow-chart e variabili, cose così... poi si va avanti... ma quando si arriva alle cose più toste, per evitare di farsi fregare(vai all'esame convinto di spaccare tutto, poi ti prendi un 17 :D )
meglio che stai allokkio, perchè le pretese di un insegnate universitario sono molto diverse da un insegnate di informatica delle superiori...
il primo anno si fanno i fondamenti d'informatica...
che sono:
sapere usare le condizioni, cicli, conoscere ed usare le librerie, insomma le cose basilari del c...
uso delle funzioni, funzioni ricorsive, array e array di char, librerie per manipolare le stringhe...
importantissimo i puntatori... (anche a carattere)
uso di malloc, per allocare dinamicamente le variabili
casting, cioè conversioni di tipo
conversioni di base(da base 10 a base2 o viceversa, o da base16 base10 ecc)
i numeri binari, le regole, operazioni, operatori logici(or, and, not, exor)
probabilmente cenni sui pacchetti, e checksum o crc
strutture, liste dinamiche...
poi finalmente C++: cenni sulle novità introdotte come cin, cout, new, free ecc
LE CLASSI
cos'è una classe
come è composta
costruttore/distruttore
funzioni membro e dati membro
puntatore a funzione
overloading delle funzioni
overloading degli operatori
ereditarietà semplice e multipla
polimorfismo
classe stringa
stream su file(ifstream, ofstream ecc)
liste dinamiche con le classi(classe stack e classe queue)
alberi binari, ed algoritmi (ricerca, ordinamento...)
bah non mi viene in mente altro...
tigerjact
6th August 2005, 16:42
Io aggiungo che al posto del c++ abbiamo fatto java, e quindi ci siamo beccati un bel pò di teoria in +....
le pretese di un insegnate universitario sono molto diverse da un insegnate di informatica delle superiori...
questo non posso che quotarlo.
C3sc0
7th August 2005, 04:24
InferNOS, son contento di sapere che c'è gente che si avvicina da autodidatta alla programmazione!
riguardo al tuo futuro, hai un sacco di tempo per cambiare idea su ingegneria... :D
volevo solo farti notare che un'impaginazione buona rende un programma MOLLTO piu leggibile...
buona:
int mystrlen(char *str){
int len=0;
while(str[len]!='\0') len++;
return len;
}
void mystrcpy(char *destinazione, char *origine){
int i;
for(i=0; i<mystrlen(orignine); i++) destinazione[i]=origine[i];
destinazione[i]='\0';
}
pessima:
int mystrlen(char *str){
int len=0;
while(str[len]!='\0') len++;
return len;}
void mystrcpy(char *destinazione, char *origine){
int i;
for(i=0; i<mystrlen(orignine); i++) destinazione[i]=origine[i];
destinazione[i]='\0';}
per 2 righe di codice nn cambia, ma piu vai avanti piu capirai l'importanza dell'impaginazione.
spero tu abbia capito cosa intendo!
un'altro consiglio che posso darti è mettere una marea di commenti! spesso mi ritrovo a occupare piu spazio per i commenti che per il codice... :D
buona fortuna!
InferNOS
9th August 2005, 13:19
Ciao e grazie per gli interessamenti ke state mostrando...
.@ ramko:
meglio che stai allokkio, perchè le pretese di un insegnate universitario sono molto diverse da un insegnate di informatica delle superiori...
Cosa intendi?O meglio cosa pretende l'uno e cosa l'altro?
.@ C3sc0
riguardo al tuo futuro, hai un sacco di tempo per cambiare idea su ingegneria...
Cosa intendi???
volevo solo farti notare che un'impaginazione buona rende un programma MOLLTO piu leggibile...
Si questo lo so xkè il libro su cui sto studiando è molto premuroso su questo fatto...
C3sc0
9th August 2005, 18:17
io intendo solo che col tempo le cose cambiano.... potrebbe cambiare anche la tua voglia di ingegneria....
p.s. anche perchè se vuoi diventare un "puro" programmatore software ad alti livelli( c++, java, php, etc...) devi scegliere la facolta di scienze mm.ff.nn. corso di studi in informatica! la facoltà di ingegneria corso di studi in informatica pompa più gli aspetti hardware e la programmazione a bassi livelli! poi vedi te! :D
intanto auguri, e impagina tutto bene! :evai: :evai:
InferNOS
10th August 2005, 12:04
anche perchè se vuoi diventare un "puro" programmatore software ad alti livelli( c++, java, php, etc...) devi scegliere la facolta di scienze mm.ff.nn. corso di studi in informatica! la facoltà di ingegneria corso di studi in informatica pompa più gli aspetti hardware e la programmazione a bassi livelli! poi vedi te!
Si infatti questo lo avevo già appreso in altri forum ed quindi (almeno ora) igegneria informatica è quella ke si adatta di + a me xkè a me interessa moltissimo anche l'hardware anzi a dirla tutta fino ad una anno fa non mi sarebbe mai passato x la testa scapocciarmi con la programmazione bensì mi divertivo molto + a conoscere l'hardware nel pc...cmq grazie x i tuoi auguri...ciauz :evai:
vBulletin® v3.7.0, Copyright ©2000-2009, Jelsoft Enterprises Ltd.