Newsgroup: it.comp.lang.c++
Titolo: Aiuto:ragazza alle primissime armi!!!!

Buon giorno...disperata chiedo a voi se potete darmi una mano.Il punto è che
ho un compitino d'informatica Lunedì,il prof. ci ha dato da scrivere un
programma ma ogni volta che vado in visual a scriverlo mi dà sempre qualche
errore,non è che sareste così gentili da aiutarmi,da scrivere questo
programmino????In pratica il programma deve calcolare il numero di volte che
è presente in una stringa un determinato carattere,ad es. 'c'. In seguito
poi devo scrivere un programma che calcoli un certo numero di
caratteri(parole) e non +un solo carattere.Il programma che ho scritto io
sarebbe il seguente:
#include "StdAfx.h"
#include <iostream.h>
void main ()
[
    char stringa [256];
    cout <<"inserisci una stringa\n";
    cin >>stringa;
    int i=0;
    while (stringa [i]!='\0')
        i++;
    cout <<"la stringa è lunga:"<<i<<"\n";
]
int lunghezza_stringa (char b [ ],int n)
[
    int i;
    for (i=0;(i<n)&&(b [i]!='\0');i++);
        if (i<n)
            return i;
        else
            return -1;
]
int lunghezza_stringa (char b [ ],int n);
main ()
[
    int i;
    int m=0;
    char p;
    cin >>"introduci una parola\t">>p>>"\n";
    for (i=0;p [i]!='\0';i++)
    [
        if p [i]=='c'
            m++;
    ]
    cout <<"nella stringa sono contenute\t"<<m<<"c\n";
]
Vi ringrazio anticipatamente anche se non so se qualcuno mi risponderà o
meno.Per favore....sono nelle vostre mani....(si fa per
dire...scherzo)......
CCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIAAAAAAAAAAAAAAAAAAAAAOOOOOOOOOOOOOO
OOO
                                                        Valentina


Ho tralasciato le annotazioni di stile (ad esempio perchč dichiari la i
all'esterno del for?) e suppongo che non sia ammesso utilizzare la std::string,
che farebbe tutto da sola.
Per quanto riguarda la ricerca di una stringa devi inserire un ciclo al posto di
p[i] == 'c' che controlli ogni carattere corrispondente delle due stringhe.
Ciao FBF

 
<snip>
Ti accludo il programma
#include <iostream>
int main ()					
{
	std::cout << "introduci una parola ";
	char p[255];
	std::cin.get(p, 255);
    	for (int i=0, m = 0; p[i]!='\0'; i++)
    	{
        	if (p[i]=='c')
            	m++;
    	}
	std::cout <<"nella stringa sono contenute\t"<< m <<" c\n";
  	return 0;
}
Vorrei farti notare che alcune delle features del programma sono
"visual C++ dependent" : 
La dichiarazione di m all'interno dell'istruzione for non ne
impedisce l'accesso all'esterno dello scope del for stesso come invece
e' specificato nello standard
e' necessario aggiungere un return 0 per evitare un warning mentre nello
standard non e' obbligatorio scrivere il valore di ritorno del main
E adesso che io ho fatto lo sforzo di aiutarti, puoi aiutarmi tu 
a capire perche' hai specificato nel subject e nel body del tuo
messaggio di essere una ragazza, e non, per esempio, un programmatore
alle prime armi?
Ciao,
			Guido

                                                         Valentina
  Ciao...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Murphy's law: "Anything that can go wr
/bin/fortune: segmentation fault - core dumped

Non lo conosco, e non so a cosa serva.  Togli.
Non sia mai! VC++ si arrabbia! Anche se non c'entra nulla con lo standard,
probabilmente l'inclusione di tale file è effettivamente richiesta.
Ciao
Domenico Barra


stdafx.h è un header che crea automaticamente il VC++ dove inserisce gli header
per la libreria MFC, poi setta questo file come header precompilato, lo mette in
cima a tutti i file che crei in modo da velocizzare la costruzione del progetto.
L'inclusione di tale file NON è effettivamente richiesta.

 OOO
[snip]
Secondo me la sedicente Valentina e' un maschietto che (sapendo come viene
trattato
chi non studia e chiede che gli vengano fatti i compiti tre giorni prima
dell'esame)
si finge femminuccia per attirare i volonterosi con il suo battito di ciglia
virtuale.
Volonterosi che non sono mancati...
si sarebbero comportati ugualmente con un .. "Valentino" ?
P.S.
Per me chi chiede aiuto per i compiti e' un mini-troll.

 Per me chi chiede aiuto per i compiti e' un mini-troll.
Credo che tu non sappia cos'č un troll, e non capisco nemmeno perchč uno non
possa chiedere aiuto per i compiti.
Se uno non č capace di fare una cosa non č normale che chieda aiuto per imparare
come si fa?
Ultimamente non leggo molto il news, ma ammetto che ho risposto di istinto al
primo messaggio che parlava di c++, circondato
da hd rotti, mschart, graphic.h, file mancanti, compilatori non funzionanti,
winapi, etc...
Che il newsgroup stia morendo?

 assolutamente mai di array di caratteri ma di stringhe,
[CUT]
Mi inserisco, sconcertato nel constatare che pur usando turboC++ della
Borland e frequentando un corso C++ (sono agli inizi) non ho idea di cosa
sia "cout" e finora mi sono limitato a "printf", "array", "array di
caratteri", che
il mio prof abbia sbagliato tutto?
Ciao FedeX
--
¤¤¤ 
fede...@server.dex-net.com
 per rispondere ¤¤¤
"la fama degli eroi spetta un quarto alla loro audacia;
 due quarti alla sorte; e l'altro quarto a' loro delitti."  U.Foscolo
"... sarebbe pensier non troppo accorto
 perder duo vivi per salvare un morto ..."  L.Ariosto

 L'inclusione di tale file NON è effettivamente richiesta.
Se la togli devi anche disattivare o rendere automatico il supporto degli
header pre-compilati nel progetto.

 il mio prof abbia sbagliato tutto?
Non credo. (mi scuso con i puristi)
L'importante è afferrare il concetto che sta dietro a printf() ed
alle stringhe.
Che poi sia printf() o cout, o che utilizzi un array char[] o una classe
std::string, la sostanza non cambia. L'importante è capire *come*
programmare.

 sia più efficiente, un char[] o una std::string?
Il problema e' che il C++ moderno, pur avendo molti elementi in comune
col C, se ne e' molto allontanato. Per questo per formare "la testa" di
un principiante sarebbe opportuno adottare un approccio direttamente
basato sul C++ e non sul C con estensioni. E' quello che hanno fatto
Andy Koenig e Barbara Moo nel loro notevole libro "Accelerated C++".
Tra parentesi, in qualsiasi implementazione non completamente imbecille
di std::string puoi usare gli stessi medesimi algoritmi che usi con gli
array d caratteri e con la stessa efficenza (la rappresetazione
sottostante e' la stessa e l'overhead e' quasi certamente eliminato
dall'inlining). Dopo di che far fare a un principiante un programma come
quello che descrivi suggerisce qualche dubbio sulla competenza del
capo-progetto :-)
Ciao,
Nicola

 programmare.
Gia', ma per capire come programmare devi imparare a conoscere la
filosofia del linguaggio che devi usare, e se ti insegnano quella di un
*altro* linguaggio farai piu' fatica ad usare quello giusto nel modo
migliore.
Ciao,
Nicola

 Che il newsgroup stia morendo?
Purtroppo negli ultimi mesi abbiamo perso una buona fetta dei
contributori piu' prolifici ed esperti. Sta a noi far si che non muoia
del tutto.
Ciao,
Nicola
P.S. E' anche vero che c'e' stato qualche arrivo notevole...

 programmare.
Questo sarebbe stato giusto se si fosse trattato di un corso di
informatica in generale. Ma essendo un corso di C++ si deve insegnare il
C++ nel migliore dei modi.
EMG

 contributori piu' prolifici ed esperti.
E cioč, quali sarebbero?
EMG

I primi che vengono in mente sono Paolo Marotta e Alex Martelli; poi
Manlio Perillo ha recentemente annunciato la sua partenza.
Ciao,
Nicola

 header pre-compilati nel progetto.
Vero.
Ma il punto è che non l'avresti mai dovuto inserire. Che senso ha inserire
un header "pesante" per tutta la libreria MFC se crei un programma a
riga di comando in standard c++ che non utilizza le MFC?
Non si includono degli header se non vengono utilizzati nel proprio codice
sorgente. L'incapsulazione e la riduzione delle dipendenze è un concetto
fondamentale alla base dalla programmazione ad oggetti. Includere un
header in un file sorgente significa sottintendere che il codice è DIPENDENTE
da quell'header. Se avverrano delle modifiche in quell'header, tutti i file
sorgente
che lo includono dovranno essere controllati. Includere file inutili significa
aumentare
le dipendenze di quel codice, cosa che è contro il buon senso e la filosofia
della programmazione ad oggetti.
FBF

 
non so se era una maschietta o un femminuccio, ma io gli ho risposto
perche' aveva provato a scrivere qualcosa, quindi era una richiesta
di aiuto e non una richiesta di fare i compiti.
Comunque, non ha risposto alla mia piccola provocazione...

capo-progetto :-)
Beh, quello era solo un esempio ;-)
Ciao,
Domenico

 Manlio Perillo ha recentemente annunciato la sua partenza.
Hai ragione... :-(((
EMG

P.S. E' anche vero che c'e' stato qualche arrivo notevole...
Chi?
Il Ghenio
-----------
LOVELY SARA
Dal lunedi'al venerdi'su Italia Uno alle 8:10
Non perdetevelo...
-----------

programmare.
Cambia, cambia. La stl é stata creata appositamente per evitare di
usare istruzioni a basso livello. Quanto a printf sinceramente non
capisco proprio perché qualcuno ancora la usi per programmare in C++.


dire...scherzo)......
Comunque gli array di char, i cicli per calcolare la lunghezza delle
stringhe e tutto il resto sono tecniche stravecchie che in c++ non usa
più nessuno. Lo stile del tuo programma mi é sembrato parecchio
somigliante a quello di un programma C(ovviamente molto tirato via).
Comunque il tuo programma non é per niente professionale, provvedi
subito a cambiarlo , usa le std::string , la libreria STL, gli
iteratori, gli algoritmi , i vec ...SBONK!!!


 Hai ragione... :-(((
Ho beccato un alex martelli su qualcosa tipo
microsoft.public.dotnet.academic
che rispondeva come al solito (non faceva domande!)
Era lui o non era lui?

 ma a volte mi tornano molto comodi :) )...
Se si partisse tutti da zero, sarei d'accordo. Il problema, anzi i
problemi sono che da una parte esistono molti piu' programmatori C++ che
conoscono gli arraay ma non std::vector che viceversa, e che la maggior
parte dei libri presenta *prima* gli array, che non std::vector.
Di qui lo sforzo di ottenere un'inversione di tendenza.
Ciao,
Nicola

 >P.S. E' anche vero che c'e' stato qualche arrivo notevole...
Ad esempio Andrea Griffini...
Ciao,
Nicola

Tra parentesi Alex Martelli compare di tanto in tanto su
comp.lang.python, dove non ha perso il suo smalto: Ho letto un suo
intervento a proposito di linguaggi tipizzati o meno che era come sempre
tanto irritante quanto interessante :-)
Ciao,
Nicola

 Ad esempio Andrea Griffini...
Anche Manlio Perillo è un elemento notevole che mi sembra di
relativamente recente entrata.
EMG



Perchè non gli scriviamo una "petizione" a ritornare tra noi :-)))

 Perchč non gli scriviamo una "petizione" a ritornare tra noi :-)))
Sono d'accordo.
EMG

Ci avevo gia' provato qualche mese fa, ma salvo un unico intervento, non
ho sortito effetto. Ci tocchera' convertirci tutti a Python...
Ciao,
Nicola

Assolutamente. Salvo che ha appena annunciato il suo "ritiro" per
qualche mese...
Ciao,
Nicola

capisco proprio perché qualcuno ancora la usi per programmare in C++.
Il perche` ancora siano usate cose "arcaiche" come gli array e la printf
posso spiegarlo
con un breve esempio.
Io ho  iniziato ultimamente a scrivere un po' di roba in C++ allo scopo di
poter "trattare"
i dati contenuti in alcuni database (ho due database, uno "gestito" dal
dbms
MySQL, l'altro "gestito" dal dbms db2). Qui per trattare intendo
a- prendere i dati dal database con dbms db2 e portarli (eventualmente
modificati) nel
    database con dbms MySQL
b- esportare i dati di un database sul Web.
(Tra l'altro la cosa e` piu` complicata di come appare qui perche' i dati
"originali" in realta`
stanno su delle specie dil file  su AS400, gestiti con software
proprietario).
Per quanto riguarda usare array o vettori,
il problema in genere e` che le API sono scritte in C per cui se come
paramentro
vogliono un puntatore a char gli si deve dare un puntatore a char e non
una stringa.
In realta` non e` nemmeno vero che vogliono un puntatore a char. Spesso
vogliono qualcosa
del tipo  SQLINTEGER O SQLCHAR *. Ad esempio db2 mette a disposizione una
primitiva del
tipo seguente per rintracciare informazioni sulle tabelle di un database.
SQLRETURN SQL_API_FN  SQLTables        (SQLHSTMT          hstmt,
                                        SQLCHAR     FAR   *szCatalogName,
                                        SQLSMALLINT       cbCatalogName,
                                        SQLCHAR     FAR   *szSchemaName,
                                        SQLSMALLINT       cbSchemaName,
                                        SQLCHAR     FAR   *szTableName,
                                        SQLSMALLINT       cbTableName,
                                        SQLCHAR     FAR   *szTableType,
                                        SQLSMALLINT       cbTableType);
dove tutti i tipi sono ovviamente "proprietari". Se Le primitive sono
scritte in C, si puo` pensare
ad una specie di Wrapper per nasconderle (cosa che sto per altro facendo)
ma chi si trova a lavorare
con queste cose deve per forza conoscere gli array.
Per printf invece, posso solo notare che
Per esportare i dati sul Web c'e` spesso bisogno di eseguire delle cgi.
Ancora non ho capito del tutto come funzionano i server Web ma se questi
devono mandare indietro
una pagina HTML al client => se uso printf e scrivo sullo standard output
la cosa funziona, mentre
se uso cout andando a scrivere (probabilmente) su un qualche canale che
non e` lo stesso
usato da printf => la cosa non funziona.
Magari ci sara` anche il modo di configurare il server per fargli capire
che voglio usare cout invece che
printf ma per ora mi e` sembrato molto piu` semplice usare printf,
nonostante che il codice sia scritto per
lo piu` in C++.
Quindi, secondo me, quando si esce dall'ambito dei programmi fatti "in
proprio" secondo me serve ancora
sapere come funzionano quelle cose oscene chiamate array o anche quelle
cose altrettanto oscene chiamate
printf, ecc.
Saluti,
Marco Guidi
P.S.
Spero di non aver fatto troppo casino con il thred ma il dannato
newsserver di Pisa non ne vuole
sapere di non perdere messaggi, cosi` in genere il newsgroup lo leggo con
un newsserver tedesco, che
pero` non mi fa scrivere per cui devo arrangiarmi per rispondere a
messaggi come quello a cui ho
risposto qui (cioe` messaggi che riesco a vedere sul newsserver tedesco ma
non sul newsserver di
Pisa).

 usato da printf => la cosa non funziona.
A me veramente risulta che sia printf() che cout << emettano sullo
standard output.
EMG