Newsgroup: it.comp.programmare
Titolo: Testo C

Salve a tutti. Vorrei iniziare a studiare il C, da quel poco che so č
la base della programmazione e mi hanno sconsigliato di "perdere
tempo" col Visual Basic. Qualcuno saprebbe consigliarmi (mi fido piů
di appassionati che di una quarta di copertina)un buon testo
introduttivo? Il Deitel & Deitel, C_corso completo di programmazione,
va bene?
Ah, dimenticavo, ma una volta scritte le stringhe di codice....dove le
inserisco per far girare il programma? Dovrebbe servirmi un
compilatore, mi pare, ne esistono di freeware?
Grazie davvero per le eventuali risposte e scusate l'ignoranza, ciao.

 compilatore, mi pare, ne esistono di freeware?
A decinaia. Il uso mingw, liberamante scaricabile da
www.mingw.org
Non ha un ambiente di sviluppo integrato, ma funziona bene. Borland
(credo) consente di scaricare le vecchie versioni del compilatore
probabilmente anche Microsoft consente di scaricare una versione
senza ambiente integrato di sviluppo. Ma chiedo a chi ne sa piu'
di me sulle ultime cose che ho detto.
HTH
C:\>iao Angelo
P.S. prova a dare un'occhiata anche qui, ma ricorda che un buon
     libro e' fondamantale per imparare sia il linguaggio che la
     programmazione. Le guide on-line lasciano il tempo che tovano,
     questa mi sembra una di quelle fatte meno peggio.
 
http://programmazione.html.it/c/c_01.htm
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

      
http://programmazione.html.it/c/c_01.htm
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Grazie ad entrambi per i consigli. Ho comprato il Deitel e, per motivi
di tempo, per ora l'ho letto solo fino al 3° capitolo. Ho scritto un
programmino per calcolare un rapporto di concentrazione molto usato in
statistica. Visto che non sapevo come fare per elaborare un numero
indefinito di dati mi sono limitato a 5. Funziona, ma fa davvero pena
a leggersi (lo so anch'io che ci capisco 0! :-)
Come migliorarlo?
Ciao!
#include <stdio.h>
main()
{
		/*Definizione variabili*/
float val1, val2,val3,val4,val5,P1,P2,P3,P4,SOMMA,TOT, R;
int CONTATORE;
		/*Inizializzazione*/
P1=0; P2=0; P3=0; P4=0;
TOT=0;
CONTATORE=0;
		/*Elaborazione*/
while (CONTATORE<=0) {
	printf("Inserire valore1: ");
	scanf("%f", &val1);
	printf("Inserire valore2: ");
	scanf("%f", &val2);
	printf("Inserire valore3: ");
	scanf("%f", &val3);
	printf("Inserire valore4: ");
	scanf("%f", &val4);
	printf("Inserire valore5: ");
	scanf("%f", &val5);
	CONTATORE = CONTATORE+1;
}
/*Chiusura*/
	SOMMA = val1+val2+val3+val4+val5;
	P1=(float)(val1/SOMMA);
	P2=(float)(val1+val2)/(SOMMA);
	P3=(float)(val1+val2+val3)/(SOMMA);
	P4=(float)(val1+val2+val3+val4)/(SOMMA);
	TOT = P1+P2+P3+P4;
	R = 1-0.5*TOT;
printf("Rapporto di concentrazione: %f",R);
return 0;
}
P.S. ora potete sfottere...

 P.S. ora potete sfottere...
Il programma e' piu' o meno uguale all'originale, con alcune piccole
modifiche. Il programma verrebbe stravolto nel caso generale di un
numero N di variabili da elaborare con N non "hard coded" nel
programma.
Se il numero di variabili e noto al momento dell'input (es immissione
a mano dei dati), il nuovo programma e' piuttosto semplice (una sola
allocazione dinamica). Se il numero di variabili non e' noto a priori
(es. input da file) il programma e' piu' complesso (non basta una
sola allocazione, ma bisogna tener conto che quanto allocato potrebbe
essere non sufficiente e quindi riallocare lo spazio).
Nel secondo coso ci sono anche "variazioni sul tema",: se l'input e'
da file si potrebbe contare prima le variabili da elaborare, cosa
impossibile da fare se le variabili provengono da un sistema di
acquisizione automatico.
Nel caso ti interessi il programma nel caso piu' semplice, posso
farti vedere come lo farei io. Per il caso piu' complicato devi pensarci
tu ;-)
C:\iao Angelo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 tu ;-)
Sì, come no, finisco il libro e ci penso io :-)

  Sě, come no, finisco il libro e ci penso io :-)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   unsigned int idx       = 0;
   unsigned int nVal      = 0;
   double       r         = 0.0; // cosa indichi con r ?
   double       sum       = 0.0;
   double       tot       = 0.0; // cosa indichi con tot ?
   double       curPNSum  = 0.0;
   double       prevPNSum = 0.0;
   char*        tailP     = NULL;   
   double*      userDataP = NULL;
   char  tmpBuff[32] = {'\0'}; // 32 caratteri totali sono piu' che
                               // sufficienti per inserire qualsiasi
                               // cifra manipolabile con i tipi messi
                               // a disposizione dal "C".
   printf("Inserire numero totale valori: ");
   fgets(tmpBuff, sizeof(tmpBuff), stdin);
   printf("\n");
   nVal = strtoul(tmpBuff, &tailP, 10);
   if(NULL != tailP && '\n' == *tailP)
   {
      userDataP = malloc(nVal*sizeof(double));
      if(NULL != userDataP)
      {
         tailP = NULL;
         for(idx = 0; idx < nVal; idx++)
         {
            printf("Inserire val%d: ",idx+1);
            fgets(tmpBuff, sizeof(tmpBuff), stdin);
            userDataP[idx] = strtoul(tmpBuff, &tailP, 10);
            if(NULL != tailP && '\n' == *tailP)
            {
               sum += userDataP[idx];
            }
            else
               exit(1);
         }
         for(idx = 0; idx < nVal; idx++)
         {
           curPNSum = prevPNSum + userDataP[idx];
           tot += prevPNSum/sum;
           prevPNSum = curPNSum;
         }
         r = 1 - 0.5*tot;
         printf("Rapporto di concentrazione: %f",r);
      }
   }
   return 0;
}
Non credere che questo codice sia roba "seria". Manca tutta la parte
di
controllo degli errori (ad es. che succede se come numero di valori da
elaborare si immette un valore negativo? E che succede se l'utente
immette
una stringa che non e' un numero? Ecc., ecc. ecc.)
Tutta questa parte io preferisco trattarla usando programma che generi
automaticamente scanner e parser dell'input. Ma il codice sarebbe
diventato assolutamente illegibile.
Avevo pure cominciato a fare qualche controllo un po' piu'
semplificato, ma
il codice aveva comunque una lunghezza mostruosa e sinceramente mi
sembrava inutile per far vedere come si puo' gestire un numero di dati
utente non
noto al momento della compilazione del programma.
Spero che il pezzo di codice ti sia utile comunque.
C:\>iao Angelo

 Spero che il pezzo di codice ti sia utile comunque.
Sei davvero cortese, mi č utilissimo per fare esperienza.
Guardati questo programmino scritto da me medesimo per invertire
(tramite approssimazione per iterazione) la funzione y=x^x. serve a
niente perň...
Gli if nidificati lo rendono piů veloce (parte da un valore noto piů
prossimo a quello da trovare). Scusa se i nomi delle variabili sono di
1 sola letter! Grazie ancora, ciao.
P.S. qui il while c'azzecca...
#include <stdio.h>
#include <math.h>
main()
{
	float x=0;
	float y=0;
	float z=0;
	printf("Digita un numero positivo: ");
	scanf("%f", &z);
	if(z>=10000000000)
			x=10-0.000001;
	else
		if(z>=387420489)
			x=9-0.000001;
		else
			if(z>=16777216)
				x=8-0.000001;
			else
				if(z>=823543)
					x=7-0.000001;
				else
					if(z>=46656)
						x=6-0.000001;
					else
						if(z>=3125)
							x=5-0.000001;
						else
							if(z>=256)
								x=4-0.000001;
							else
								if(z>=27)
									x=3-0.000001;
								else
									if(z>=4)
										x=2-0.000001;
									else
										if(z>=1)
											x=1-0.000001;
	while(y<z)
			{
				x=x+0.000001;
				y=pow(x,x);
								}
				printf("x %f", x);
	return 0;
}
...miglioro? ;-)