PDA

View Full Version : Un aiuto per un esordiente totale in c


VegetaSSJ5
11-10-2003, 21:45
Salve a tutti, ho cominciato da poco a programmare in c e già sono sorti i primi insormontabili, ma soprattutto strani problemi (forza italia! hanno appena fatto il 4° gol!! ;) ). Ho scritto un programma che dato un array A con un certo numero di interi mi crea un nuovo array B bidimensionale con il numero di righe di A e 2 colonne dove alla prima colonna copio gli elementi di A e alla seconda metto il corrispondente numero di frequenze di quel numero nell'array. Il sorgente viene compilato ma poi mi vengono visualizzati tutti numeri strani, come se il compilatore non avesse istanziato gli elementi dell'array B. ecco il codice:


#include <stdio.h>
#include <malloc.h>

void main () {
int a[]={26,4,4,4,13,12,12,7,6,26,16,14,7};
int lung=13, i=0;
int b[lung][2];
for (i=0; i<lung; i++) {
b[i][0]=a[i];
int j;
for (j=0; j<lung; j++) {
if (a[i]==a[j]) {
b[i][1]++;
}
}
}
printf ("%d %d %d", b[1][0], b[0][0], b[lung-1][0]);
for (i=0; i<lung; i++) {
printf ("\n%d ", b[i][0]);
printf ("%d\n", b[i][1]);
}
}


E allego inoltre il programma eseguibile.

VegetaSSJ5
11-10-2003, 21:49
allego anche il sorgente.

VICIUS
11-10-2003, 22:49
Originariamente inviato da VegetaSSJ5
int b[lung][2];


siamo sicuri che sia giusto scrivere una cosa del genere ?
il c non genera array dinamici a runtime in questo modo.
puoi pero usare malloc per allocare la memoria che ti serve.

ciao ;)

VegetaSSJ5
11-10-2003, 23:14
Originariamente inviato da VICIUS
siamo sicuri che sia giusto scrivere una cosa del genere ?
il c non genera array dinamici a runtime in questo modo.
puoi pero usare malloc per allocare la memoria che ti serve.

ciao ;)
puoi spiegarmi perchè non lo fa? mi sembra di aver inizializzato l'array e avergli dato le dimensioni di righe e colonne e poi aver attribuito ad ogni elemento un valore. perchè ciò non è fattibile? E inoltre, siccome ho bisogno di una matrice bidimensionale, come faccio con la malloc a riservare spazio per una matrice bidimensionale? Con la malloc posso riservare solo per un "array" (lo metto tra virgolette perchè in realtà non è un array, ma uso il termine giusto per rendere l'idea)o comunque una struttura monodimensionale. Mi consigli pertanto di creare con la malloc 2 puntatori a 2 aree di memoria di dimensione lung che rappresenterebbero le 2 colonne dell'array bidimensionale che vorrei creare io? (mi sa che mi sono risposto da solo).:mc: :eek: :cry: IN TESTA HO UN CASINO BESTIALEEEEEEEEEEE

mjordan
12-10-2003, 09:50
Lo fa lo fa. E' dal 1999 che funziona quella scrittura ...

E' possibile scrivere funzioni che prendono in ingresso dimensioni di array:


int
crea_array(int dim)
{
int my_array[dim];

...
...
return qualche_cosa;
}


Poi dicono che il K&R è buono :D :D :D

mjordan
12-10-2003, 09:52
Originariamente inviato da VICIUS
siamo sicuri che sia giusto scrivere una cosa del genere ?
il c non genera array dinamici a runtime in questo modo.
puoi pero usare malloc per allocare la memoria che ti serve.

ciao ;)

E' ora di aggiornarsi. Sono quasi 5 anni che gli array dinamici sono stati introdotti nel linguaggio ;)

VICIUS
12-10-2003, 10:11
Originariamente inviato da mjordan
E' ora di aggiornarsi. Sono quasi 5 anni che gli array dinamici sono stati introdotti nel linguaggio ;)

:P

ciao ;)

VICIUS
12-10-2003, 10:36
Originariamente inviato da mjordan
E' ora di aggiornarsi. Sono quasi 5 anni che gli array dinamici sono stati introdotti nel linguaggio ;)

apparte gli scherzi dove posso trovare un buon documento che descriva in modo abastanza chiaro le nuove caratteristiche introdotte nel c. se non sbagglio adesso lo standard di riferimetno e C99 o qualcosa del genere. ho usato per vari motivi visaul basic per anni e solo ora ritorno ad avvicinarmi al c/c++. mi va bene tutto anche inglese.

ciao ;)

Bane
12-10-2003, 10:45
Originariamente inviato da mjordan
E' ora di aggiornarsi. Sono quasi 5 anni che gli array dinamici sono stati introdotti nel linguaggio ;)

Non vorrei dire una cavolata pero'... al massimo prevede array allocati dinamicamente non array dinamici (che sono ben diversi), no?

mjordan
12-10-2003, 10:46
Francamente parlando non saprei ... Non credo esistano documenti mirati "all'aggiornamento". Attualmente a distanza di quasi 5 anni l'unico libro che parla del C99 è lo Schildt, Guida completa C, McGraw-Hill

VegetaSSJ5
12-10-2003, 10:59
ma se allora funziona la scritta "int b[lung][2]" è corretta, perchè mi fa quel prblema che non so spiegarmi?

P.S.
Sarò pure un esordiente totale (stile fantozzi... :D ) però non sono stupido (a differenza di fantozzi... :D :D ). Vorrei dirvi un'altro problema: avevo scritto un programma (che ora non ricordo di preciso) dello stile:

int a, b, c;
insieme di istruzioni su a,b,c
.
.
.
.
printf ("%d", b);
}

in pratica se non inizializzavo b a zero (cioè scrivendo solo int b e non int b=0), mi dava dei risultati obrobriosi che non c'entravano nulla col problema. invece cambiando il codice scrivendo solamente int b=0 anzichè int b; mi dava il risultato corretto. Se ora lo ritrovo lo posto e vi faccio vedere.

mjordan
12-10-2003, 11:06
Evidentemente il codice che operava sulle variabili faceva affidamento su di un certo valore della variabile stessa. Quando scrivi:


int b = 0;


oltre a dichiarare una variabile, la inizializzi pure, dandogli un valore.

Se non effettui una inizializzazione esplicita, eventuale codice che deve appoggiarsi sul valore di quella variabile, potrebbe non funzionare correttamente, visto che la variabile b "non contiene nulla". Il "tra virgolette" è d'obbligo ovviamente.

VegetaSSJ5
12-10-2003, 11:12
Originariamente inviato da mjordan
Evidentemente il codice che operava sulle variabili faceva affidamento su di un certo valore della variabile stessa. Quando scrivi:


int b = 0;


oltre a dichiarare una variabile, la inizializzi pure, dandogli un valore.

Se non effettui una inizializzazione esplicita, eventuale codice che deve appoggiarsi sul valore di quella variabile, potrebbe non funzionare correttamente, visto che la variabile b "non contiene nulla". Il "tra virgolette" è d'obbligo ovviamente.
ti ringrazio mjordan. d'ora in poi inizializzerò sempre le variabili. senti ho scritto questo prog che calcola la media di alcuni valori che vengono immessi in input. sapresti dirmi perchè non funziona? ti prego aiutami non posso andare + avanti avendo nella testa questi dubbi esistenziali! Ecco qui il codice:

#include <stdio.h>
#include <malloc.h>

void main () {
printf ("\nInserire i numeri da inserire nel vettore:\n");
int n=1, ins=1, *a;
scanf ("%d",&ins);
while (ins!=0) { //fin quando non immetto 0 vado avanti con la scansione
a=(int *) malloc (n*sizeof(int));
a[n-1]=ins;
n++;
scanf ("%d",&ins);
}
int m=media (a, n);
printf ("\n\nLa media dei numeri inseriti e': %d", m);
}

float media (int *a, int n) {
int i=0, somma=0;
float med;
for (i=0; i<=n; i++) {
somma=somma+a[i];
}
med=somma/n;
return med;
}

mjordan
12-10-2003, 11:54
All'estero un programma del genere si chiama brain damaged :D

Prova così. Molto meglio:


#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
int ins = 1, tot = 0, count = 0;

printf("\nInserire i numeri da inserire nel vettore, 0 per terminare:\n");

while (ins) {
scanf("%d", &ins);
tot += ins;
count++;
}

printf("\n\nLa media dei numeri inseriti e': %d\n",
(tot / count));

return 0;
}


Non è ancora elegantissimo (l'ho risistemato in 10 minuti) ma ti dovrebbe dare un'idea di come le cose vadano ridotte il + possibile.

VegetaSSJ5
12-10-2003, 11:57
Originariamente inviato da mjordan
All'estero un programma del genere si chiama brain damaged :D

Prova così. Molto meglio:


#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
int ins = 1, tot = 0, count = 0;

printf("\nInserire i numeri da inserire nel vettore, 0 per terminare:\n");

while (ins) {
scanf("%d", &ins);
tot += ins;
count++;
}

printf("\n\nLa media dei numeri inseriti e': %d\n",
(tot / count));

return 0;
}


Non è ancora elegantissimo (l'ho risistemato in 10 minuti) ma ti dovrebbe dare un'idea di come le cose vadano ridotte il + possibile.
mjordan ti ringrazio molto, tuttavia il mio scopo è quello di imparare e non di copiare. posso sapere cosa c'è che non andava nell'altro programma?

mjordan
12-10-2003, 11:58
Questo tuttavia restituirà una media sempre intera. Se vuoi una media che rispecchi
la realtà (sia decimale) devi usare la funzione div().

Dichiari una variabile di tipo:


div_t var;


e poi effettui la divisione di due interi:


var = div(a, b);


Quando vuoi il quoziente della divisione accedi il campo:


var.quot


mentre se vuoi il resto, accedi il campo:


var.rem


Ciao.

mjordan
12-10-2003, 12:00
Ti dico che nel ciclo while() del tuo programma si alloca la memoria in modo scorretto. Guarda bene la variabile n prima di entrare nel ciclo while() ;)

mjordan
12-10-2003, 12:17
E anche se il valore di n fosse corretto, ci sarebbe un altro problema... Ad ogni ciclo allochi un nuovo blocco di memoria a cui punta la variabile a. Ora quando riallochi la memoria, crei un blocco totalmente nuovo di memoria, non vai ad "ingrandire" quello precedente. Quindi ad ogni iterazione la variabile a punta ad un nuovo blocco e quello vecchio si perde nel nulla da qualche parte nella memoria. Questo fenomeno è noto come "memory leak".

VegetaSSJ5
12-10-2003, 12:19
Originariamente inviato da mjordan
Ti dico che nel ciclo while() del tuo programma si alloca la memoria in modo scorretto. Guarda bene la variabile n prima di entrare nel ciclo while() ;)
appunto, ho inizializzato n a 1 in modo tale che alla prima iterazione si crei spazio per n*sizeof(int) cioè per un elemento e poi incremento n ogni volta che inserisco un nuovo numero.

mjordan
12-10-2003, 12:24
Bene ma leggi il post + su ;)

VegetaSSJ5
12-10-2003, 12:31
Originariamente inviato da mjordan
E anche se il valore di n fosse corretto, ci sarebbe un altro problema... Ad ogni ciclo allochi un nuovo blocco di memoria a cui punta la variabile a. Ora quando riallochi la memoria, crei un blocco totalmente nuovo di memoria, non vai ad "ingrandire" quello precedente. Quindi ad ogni iterazione la variabile a punta ad un nuovo blocco e quello vecchio si perde nel nulla da qualche parte nella memoria. Questo fenomeno è noto come "memory leak".
ho riscritto il codice, eliminando (forse) questo problema. tuttavia il prog non funziona ancora:

#include <stdio.h>
#include <malloc.h>

int main () {
printf ("\nInserire i numeri da inserire nel vettore:\n");
int n=1, ins=1, *a;
scanf ("%d",&ins);
a=(int *) malloc (n*sizeof(int));
while (ins!=0) {
a=(int *) realloc (a, n*sizeof(int));
a[n-1]=ins;
n++;
scanf ("%d",&ins);
}
n-=2;
float m=media (&a, n);
printf ("\n\nLa media dei numeri inseriti e': %f\n", m);
system ("PAUSE");
}

float media (int *a, int n) {
int i=0, somma=0;
float med=0;
for (i=0; i<=n; i++) {
somma=somma+a[i];
}
med=somma/n;
return med;
}


AGGIORNAMENTO:
Ho scoperto, facendo un printf dei numeri del vettore a all'inizio della funzione media, questi non sono i numeri del vettore, ma sono numeri altissimi contenuti in chissà quale cella di memoria eppure mi sembra di aver effettuato correttamente la chiamata a media. Invece stampando i numeri all'interno del main (ma dopo la chiamata a media) i numeri sono corretti.

mjordan
12-10-2003, 12:56
Usi troppe variabili inutilmente!!!

Eccoti il programma corretto, e un po + aderente allo standard ISO C ;) :


#include <stdio.h>
#include <stdlib.h>

float media(int * a, int n);

int
main(void) {
int n = 1, ins, * a;

printf ("\nInserire i numeri da inserire nel vettore:\n");
scanf ("%d",&ins);
a = (int *)malloc(n * sizeof(int));

while (ins) {
a=(int *) realloc(a, sizeof(int));
a[n-1]=ins;
n++;
scanf ("%d",&ins);
}

printf ("\n\nLa media dei numeri inseriti e': %f\n", media(a, --n));
getchar();

return 0;
}

float
media (int *a, int n) {
int i, somma = 0;

for (i = 0; i < n; i++) {
somma += a[i];
}

return (somma / n);
}


Ciao.

VegetaSSJ5
12-10-2003, 13:07
Originariamente inviato da mjordan
Usi troppe variabili inutilmente!!!

Eccoti il programma corretto, e un po + aderente allo standard ISO C ;) :


#include <stdio.h>
#include <stdlib.h>

float media(int * a, int n);

int
main(void) {
int n = 1, ins, * a;

printf ("\nInserire i numeri da inserire nel vettore:\n");
scanf ("%d",&ins);
a = (int *)malloc(n * sizeof(int));

while (ins) {
a=(int *) realloc(a, sizeof(int));
a[n-1]=ins;
n++;
scanf ("%d",&ins);
}

printf ("\n\nLa media dei numeri inseriti e': %f\n", media(a, --n));
getchar();

return 0;
}

float
media (int *a, int n) {
int i, somma = 0;

for (i = 0; i < n; i++) {
somma += a[i];
}

return (somma / n);
}


Ciao.
Il tuo programma funziona correttamente, o quasi visto che a volte mi dà un errore alla fine della sua esecuizione, altre volte no (ho aggiunto alla fine il system ("PAUSE"); altrimenti scompare subito la finestra). come mai?

mjordan
12-10-2003, 13:13
Dimmi i valori per cui non funziona che te lo debuggo al volo.

Luc@s
12-10-2003, 13:30
Originariamente inviato da mjordan
Dimmi i valori per cui non funziona che te lo debuggo al volo.

poi mi dici come hai fatto
:D

mjordan
12-10-2003, 13:31
Originariamente inviato da Luc@s
poi mi dici come hai fatto
:D

Fatto cosa?

mjordan
12-10-2003, 13:38
Originariamente inviato da Bane
Non vorrei dire una cavolata pero'... al massimo prevede array allocati dinamicamente non array dinamici (che sono ben diversi), no?

Motiva la risposta ...

Bane
12-10-2003, 13:59
Originariamente inviato da mjordan
Motiva la risposta ...

Piu' che risposta la mia era una domanda, non ne sono sicuro al 100% (non per niente ho iniziato con "non vorrei dire una cavolata") =)
Comunque provo a spiegarmi meglio...
Mentre e' possibile allocare dinamicamente un array, cioe' dichiarare un array la cui dimensione e' nota solo in fase di esecuzione, non e' invece possibile modificare la dimensione di un array gia' allocato.
Chiaramente non ci vuole molto ad implementare un array dinamico tramite puntatori e funzioni appropriate, pero' mi sembra piu' una cosa legata al singolo programma che al linguaggio di programmazione C. Per questo mi chiedevo se non fosse improprio utilizzare il termine "array dinamico" per indicare tali strutture di dati.

TorpedoBlu
12-10-2003, 14:37
2 domande da profano in c:


1) i prototipi delle funzioni non vanno dichiarate per il precompilatore?

es: #include "funzioni.h"

che contiene i prototipi delle finzioni in questo caso float media (int , int ) ??


2)Le variabili non andrebbero dichiarate subito?

Ho programmato in java, ora imparo C, il professore ci ha dato queste coem prime regole (Standard Ansi C)

VegetaSSJ5
12-10-2003, 15:06
Originariamente inviato da mjordan
Dimmi i valori per cui non funziona che te lo debuggo al volo.
ora sembra funzionare bene... :rolleyes: ce l'hanno tutti con me! ora ci si mette anche il c contro di me!!

VegetaSSJ5
12-10-2003, 15:40
Originariamente inviato da mjordan
Usi troppe variabili inutilmente!!!

Eccoti il programma corretto, e un po + aderente allo standard ISO C ;) :


#include <stdio.h>
#include <stdlib.h>

float media(int * a, int n);

int
main(void) {
int n = 1, ins, * a;

printf ("\nInserire i numeri da inserire nel vettore:\n");
scanf ("%d",&ins);
a = (int *)malloc(n * sizeof(int));

while (ins) {
a=(int *) realloc(a, sizeof(int));
a[n-1]=ins;
n++;
scanf ("%d",&ins);
}

printf ("\n\nLa media dei numeri inseriti e': %f\n", media(a, --n));
getchar();

return 0;
}

float
media (int *a, int n) {
int i, somma = 0;

for (i = 0; i < n; i++) {
somma += a[i];
}

return (somma / n);
}


Ciao.
mjordan finalmente ho riscritto il programma e ora funziona correttamente (senza guardare il tuo!:p ;) ), volevo chiederti una cosa sola: come mai nei parametri della realloc tu metti (a, sizeof(int))? in questo modo dovrebbe restituire un puntatore ad un solo elemento e non ad n elementi. insomma, perchè non hai scritto realloc (a, n*sizeof(int));?

monkey72
12-10-2003, 16:02
Originariamente inviato da VICIUS
siamo sicuri che sia giusto scrivere una cosa del genere ?
il c non genera array dinamici a runtime in questo modo.
puoi pero usare malloc per allocare la memoria che ti serve.

ciao ;)
scusate l'intromissione e premesso che l'ultimo mio programma in C l'ho scritto diversi anni orsono... mi chiedevo... ma parlavate di array dinamici o allocati dinamicamente ma io in b[lung][2] non ci vedo niente di dinamico.... lung era stato inizializzato a 13 nella riga immediatamente precedente :confused:
o non me lo ricordo proprio + il c?
tnks,
monkey ;)

Bane
12-10-2003, 16:13
Originariamente inviato da monkey72
parlavate di array dinamici o allocati dinamicamente ma io in b[lung][2] non ci vedo niente di dinamico.... lung era stato inizializzato a 13 nella riga immediatamente precedente :confused:


Ti sei fermato solo al primo post pero' =)
Poi son stati introdotti gli array allocati dinamicamente, tipo:

int crea_array(int dim)
{
int my_array[dim];

...
...
return qualche_cosa;
}

VegetaSSJ5
12-10-2003, 16:14
Originariamente inviato da monkey72
scusate l'intromissione e premesso che l'ultimo mio programma in C l'ho scritto diversi anni orsono... mi chiedevo... ma parlavate di array dinamici o allocati dinamicamente ma io in b[lung][2] non ci vedo niente di dinamico.... lung era stato inizializzato a 13 nella riga immediatamente precedente :confused:
o non me lo ricordo proprio + il c?
tnks,
monkey ;)
hai ragione, era quello che dicevo anch'io. cmq ora ho modificato il sorgente, secondo me dovrebbe funzionare ma non funziona! (dovrebbe stampare una matrice di 2 colonne alte lung, dove alla prima colonna c'è ogni elemento di a e alla seconda colonna c'è il numero di volte che quell'elemento viene ripetuto nell'array, ma stampa dei valori che non c'entrano nulla!). Su ragazzi che tra un paio d'ore me ne devo andare e non mi potrò + ricollegare fino a venerdi!!
#include <stdio.h>
#include <malloc.h>

void main () {
printf ("\nInserire una lista di numeri:\n");
printf ("(terminare la lista con uno 0)\n");
int ins=0, lung=0, *a;
scanf ("%d",&ins);
a=(int *) malloc (sizeof(int));
a[lung]=ins;
while (ins) {
lung++;
a=(int *) realloc (a, sizeof(int));
scanf ("%d",&ins);
a[lung]=ins;
} //FIN QUI HO PRESO I VALORI DA INSERIRE NELL'ARRAY E FUNZIONA
int i=0, j=0, b[lung+1][2];
for (i=0; i<=lung; i++) {
b[i][0]=a[i]; //COPIO NELLA 1° COLONNA GLI ELEMENTI DI a
for (j=0; j<=lung; j++) {
if (a[i]==a[j]) {
b[i][1]++; //COPIO NELLA 2° COL. LE FREQUENZE DI OGNI a[i]
}
}
}
for (i=0; i<=lung; i++) {
printf ("\n%d ", b[i][0]);
printf ("%d\n", b[i][1]);
}
}

monkey72
12-10-2003, 16:29
Originariamente inviato da Bane
Ti sei fermato solo al primo post pero' =)
Poi son stati introdotti gli array allocati dinamicamente, tipo:

int crea_array(int dim)
{
int my_array[dim];

...
...
return qualche_cosa;
}

Bane io ho quotato VICIUS proprio x evidenziare che in quel momento non era giusto (IMHO) parlare di array dinamici, cioè nel caso del 1 esempio quello dell'array bidimensionale con valori e frequenze... non stavo parlando dell'altro esempio quello della media...

Bane
12-10-2003, 16:36
Originariamente inviato da monkey72
Bane io ho quotato VICIUS proprio x evidenziare che in quel momento non era giusto (IMHO) parlare di array dinamici, cioè nel caso del 1 esempio quello dell'array bidimensionale con valori e frequenze... non stavo parlando dell'altro esempio quello della media...

Scusa, avevo in parte frainteso... comunque il discorso non cambia (sono andato a rivedere la dichiarazione iniziale).
b[lung][2] e' un array allocato dinamicamente, poiche' lung e' una variabile e non una costante. Se provi a compilarlo non in C99 dovresti ottenere qualcosa del tipo "expected constant expression".

monkey72
12-10-2003, 16:40
ok... grazie ora ho capito ;)

VegetaSSJ5
12-10-2003, 17:23
comunque il problema rimane! dai ragazzi datemi una mano!

VICIUS
12-10-2003, 17:37
Originariamente inviato da VegetaSSJ5
comunque il problema rimane! dai ragazzi datemi una mano!

la discussione è diventata piuttosto intricata. quale sarebbe ora il problema. ?

ciao ;)

Bane
12-10-2003, 17:40
Originariamente inviato da VegetaSSJ5
comunque il problema rimane! dai ragazzi datemi una mano!

Ho dato un'occhiata velocissima al tuo programma (ho poco tempo in questo momento), comunque una buona idea sarebbe quella di inizializzare b (b[i][1]=0; per ogni i) =)

VegetaSSJ5
12-10-2003, 17:51
Originariamente inviato da Bane
Ho dato un'occhiata velocissima al tuo programma (ho poco tempo in questo momento), comunque una buona idea sarebbe quella di inizializzare b (b[i][1]=0; per ogni i) =)
ti ringrazio! ora finalmente funziona! ecco il codice:#include <stdio.h>
#include <malloc.h>

void main () {
printf ("\nInserire una lista di numeri:\n");
printf ("(terminare la lista con uno 0)\n");
int ins=0, lung=0, *a;
scanf ("%d",&ins);
a=(int *) malloc (sizeof(int));
a[lung]=ins;
while (ins) {
lung++;
a=(int *) realloc (a, sizeof(int));
scanf ("%d",&ins);
a[lung]=ins;
}
int i=0, j=0, b[lung+1][2];
for (i=0; i<=lung; i++) {
b[i][0]=0;
b[i][1]=0;
}
for (i=0; i<=lung; i++) {
b[i][0]=a[i];
for (j=0; j<=lung; j++) {
if (a[i]==a[j]) {
b[i][1]++;
}
}
}
for (i=0; i<lung; i++) {
printf ("\n%d ", b[i][0]);
printf ("%d\n", b[i][1]);
}
system ("PAUSE");
}Tuttavia non riesco a capire perchè inizializzando a 0 funziona e non inizializzando non funziona (stesso problema che avevo prima e che ho descritto qualche post fa). Queste cose in java non mi capitavano mai, in c dovrò stare + attento. Grazie a tutti ora posso andarmene tranquillamente! Ci sentiamo la settimana prossima!:) :) ;)

P.S. x mjordan
Questa volta non mi sembra di aver istanziato troppe variabili, non ho controllato ma dovrebbero essere il minimo insispensabile! ;)

Gibbus
12-10-2003, 18:14
Per VICIUS

Mi sembra che fossi stato tu a chiedere qualcosa del C99...

Allora fondamentalmente le "novita" sono:

- gli array dinamici o pseudo tali... (ma per chi sa usare malloc, questo è molto meglio);
- supporto ai numeri complessi --> libreria (mi sembra) <complex.h>;
- interi a 64 bit --> nuovo tipo di dato long long;
- le funzioni possono passare fino a 127 argomenti (prima erano 31);
- altre che non ricordo :D;

Avevo visto una guida in formato html sul C, in cui erano descritte le nuove specifiche: se ti interessa fammelo sapero, vedo di procurarti il link... lo devo cercare tra vari cd...

NewPCM
12-10-2003, 18:20
:D

VICIUS
12-10-2003, 18:30
Originariamente inviato da Gibbus
Per VICIUS

Mi sembra che fossi stato tu a chiedere qualcosa del C99...

Allora fondamentalmente le "novita" sono:

- gli array dinamici o pseudo tali... (ma per chi sa usare malloc, questo è molto meglio);
- supporto ai numeri complessi --> libreria (mi sembra) <complex.h>;
- interi a 64 bit --> nuovo tipo di dato long long;
- le funzioni possono passare fino a 127 argomenti (prima erano 31);
- altre che non ricordo :D;

Avevo visto una guida in formato html sul C, in cui erano descritte le nuove specifiche: se ti interessa fammelo sapero, vedo di procurarti il link... lo devo cercare tra vari cd...

wow grazie. se non ti da distrubo mi interesserebbe veramente molto.
quando lo ritrovi manda pure un msg privato.

ciao ;)

Gibbus
13-10-2003, 06:37
Originariamente inviato da VICIUS
...quando lo ritrovi manda pure un msg privato.

ciao ;)

VICIUS, hai pvt... :)

Luc@s
13-10-2003, 07:42
Originariamente inviato da Gibbus
VICIUS, hai pvt... :)


interesserebbe anche a me:D

Gibbus
13-10-2003, 09:09
Originariamente inviato da Luc@s
interesserebbe anche a me:D
pivuttato anche te...:D!

mjordan
14-10-2003, 14:37
Va bhè, a sto punto mettilo in pubblico, mica è una cosa illegale impararsi il C99 :D :sofico:

Gibbus
14-10-2003, 18:52
Mi sa che è vero: non è mica un segreto di stato...anzi:

http://www.lugroma.org/ita/proj/proj.php?azione=introC

A proposito di segreti, dì un po': non è che sai dove sia finita quella discussione in rilievo che raccoglieva una serie di link ove scaricare manuali, tutorial, compilatori etc? Era molto utile...ma perché è stata levata? :confused:

mjordan
14-10-2003, 19:37
Quella che avevo scritto io??? :mad: :mad: :mad: Non me n'ero accorto...:ncomment: :incazzed:
Questo ti fa capire la considerazione generale per chi si propone di fare qualcosa, perdendo del tempo. Questo quì come nella vita ...

cionci
14-10-2003, 19:39
No...la tua è sempre lì...probabilmente quella che avevo scritto io ;)
E' stata persa in un aggiornamento del forum...

mjordan
14-10-2003, 19:39
No c'è ancora. . . Forse ti riferivi a quello che c'era prima ... Forse perchè era diventato così grosso che una ricerca su google era + semplice e comunque le informazioni erano sparpagliate ... Almeno penso ... Comunque dovresti chiedere ad un moderatore ...

mjordan
14-10-2003, 19:43
Ah ecco... Mi hai preceduto ... :p

Gibbus
15-10-2003, 06:27
Originariamente inviato da cionci
No...la tua è sempre lì...probabilmente quella che avevo scritto io ;)
E' stata persa in un aggiornamento del forum...
Sì, era proprio la tua...;). Tra l'altro, se non ricordo male, onde evitare l'accumalarsi di commenti ed "inserimenti" vari, chiunque avesse voluto segnalarti un link utile, avrebbe dovuto inviartelo mediante pvt... poi saresti stato tu ad aggiungerlo...

Non c'è speranza di rivederla? Era una miniera...

In compenso ora abbiamo in rilievo la possibilità di vincere una giacca in pelle...ma che c'entra? Onestamente non me ne frega una mazza di 'sta giacca in pelle... finché fosse stato hardware, ancora ancora.

Io penso che dovremmo protestare... in modo garbato, si intende...;).

cionci
15-10-2003, 07:33
Purtroppo non c'è stato niente da fare...i thread persi non sono recuperabili... Sono stati tagliati i thread che non erano aggironati da più tempo...

mjordan
17-10-2003, 10:58
Originariamente inviato da Gibbus
Sì, era proprio la tua...;). Tra l'altro, se non ricordo male, onde evitare l'accumalarsi di commenti ed "inserimenti" vari, chiunque avesse voluto segnalarti un link utile, avrebbe dovuto inviartelo mediante pvt... poi saresti stato tu ad aggiungerlo...

Non c'è speranza di rivederla? Era una miniera...

In compenso ora abbiamo in rilievo la possibilità di vincere una giacca in pelle...ma che c'entra? Onestamente non me ne frega una mazza di 'sta giacca in pelle... finché fosse stato hardware, ancora ancora.

Io penso che dovremmo protestare... in modo garbato, si intende...;).

Ok però non mi dire che non l'hai compilato il form ... Quindi se la vinci me la cedi? ;)

VegetaSSJ5
17-10-2003, 17:29
ciao a tutti ragazzi! sentite sto cercando un libro per avere un riferimento cartaceo sul c. la professoressa sul sito consiglia "C Guida completa" della McGraw Hill. E' valido o ce ne sono altri migliori? Io ne cerco uno con un linguaggio comprensibile anche per principianti. Sto chedendo qui per non spendere 50,50 € inutilmente... :cry:

Gibbus
17-10-2003, 20:53
Originariamente inviato da mjordan
Ok però non mi dire che non l'hai compilato il form ... Quindi se la vinci me la cedi? ;)
:D Non ho compilato nessun form... dico sul serio.
Vabbeh che l'autunno è iniziato, ma non potevano mettere in palio una scheda grafica, o un hard disk, o un monitor LCD? Siamo su Hardware Upgrade, giusto?

Per Vegeta
Per imparare il C, praticamente tutti i libri sono buoni (tranne il K&R...quello dopo).
Purtroppo i prezzi sono quelli un po' per tutti, intorno alle 90-100 mila lire :(.
Comunque ho detto la mia, se qualcun altro vuole intervenire su questo argomento, ben venga :).

cionci
18-10-2003, 01:39
Originariamente inviato da mjordan
Ok però non mi dire che non l'hai compilato il form ... Quindi se la vinci me la cedi? ;)
Nemmeno io... E' un po' triste andare in giro a sponsorizzare Creative...

mjordan
18-10-2003, 15:17
Bene. Allora ho + probabilità di vincere :D :D :D

mjordan
18-10-2003, 15:18
Originariamente inviato da Gibbus
:D Non ho compilato nessun form... dico sul serio.
Vabbeh che l'autunno è iniziato, ma non potevano mettere in palio una scheda grafica, o un hard disk, o un monitor LCD? Siamo su Hardware Upgrade, giusto?

Per Vegeta
Per imparare il C, praticamente tutti i libri sono buoni (tranne il K&R...quello dopo).
Purtroppo i prezzi sono quelli un po' per tutti, intorno alle 90-100 mila lire :(.
Comunque ho detto la mia, se qualcun altro vuole intervenire su questo argomento, ben venga :).

Concordo appieno. Appoggio sempre quelli che denigrano il K&R :) :D

VegetaSSJ5
18-10-2003, 15:26
Originariamente inviato da mjordan
Concordo appieno. Appoggio sempre quelli che denigrano il K&R :) :D
e quindi vada per "C guida completa" della mcgraw hill.

sblantipodi
21-10-2003, 08:37
Bada che però non è propriamente un libro per "newbies" assoluti. Comunque per te dovrebbe andar bene, visto che conosci già le basi del C.