16/03/2019, 12:16
16/03/2019, 12:57
16/03/2019, 13:23
vict85 ha scritto:Il tuo post mi lascia un po' perplesso, prima dici che hai "buone conoscenze del linguaggio C" e poi affermi che il problema è che "la traccia era basata tutta su array di caratteri". Comprendo che il tuo problema è che il tuo vecchio professore ti ha insegnato le stringhe usando una qualche libreria, ma le stringhe come array di caratteri sono un concetto del C e non propriamente del C++ in cui, in genere, si usa la classe string della libreria standard. Detto questo se il problema è che non sapevi lavorare sulle stringhe senza le varie strlen, strcpy, direi che il tuo problema è di tipo algoritmico e non di linguaggio (perché le persone usando strlen e strcpy per semplicità e non perché non sappiano implementarne una[nota]Una seconda ragione potrebbe essere per performance dato che quelle funzioni potrebbero essere state scritte in assembly usando SSE/SSE2/AVX o altre istruzioni non facilmente utilizzabili dal C.).
Tra l'altro non mi sembra che il nuovo professore ti insegni il C++ usato davvero a livello professionale e quindi se lo vuoi studiare solo per l'esame è inutile (e ti confonderebbe solo di più). Quello che penso insegni il tuo professore, penso sia il sottoinsieme C del C++ più qualche funzione come cout e cin che permettono un I/O più intuitivo.
Per curiosità, la traccia qual era?
18/03/2019, 11:50
vict85 ha scritto:Tra l'altro non mi sembra che il nuovo professore ti insegni il C++ usato davvero a livello professionale e quindi se lo vuoi studiare solo per l'esame è inutile (e ti confonderebbe solo di più). Quello che penso insegni il tuo professore, penso sia il sottoinsieme C del C++ più qualche funzione come cout e cin che permettono un I/O più intuitivo.
18/03/2019, 17:49
18/03/2019, 18:07
vict85 ha scritto:Si, ritengo che non vi sia alcun reale vantaggio a passare al C++. La prima parte del problema sarebbe uguale se fosse con i numeri al posto dei caratteri. Devo ammettere che non comprendo il testo del punto 5 e che non condivido l'approccio generale al problema.
Uno dei problemi del testo è che non dice come i caratteri sono immessi da tastiera, insomma in che formato. Comunque per i caratteri è meglio usare getchar( ).
18/03/2019, 18:55
#include <stdio.h>
#define MAX_C 20
int main(void) {
char V [MAX_C];
int n;
int i;
char invio; // Mi serve per raccogliere l'invio battuto dall'utente
printf ("\nQuanti caratteri desideri inserire? ");
scanf ("%d", &n);
for (i=0;i<n;i++) {
printf ("\nInserisci %d° carattere: ", i+1);
scanf ("%c", &invio);
scanf ("%c", &V[i]);
}
for (i=0; i<n; i++) {
printf ("\nIl %d° carattere e': %c\n", i+1, V[i]);
}
return 0;
}
18/03/2019, 22:18
#include <stdio.h>
#include <stdlib.h>
int carica_numero();
char carica_carattere( int i );
void print_reverse( char * restrict v, int N );
int main(void)
{
int N = carica_numero( );
if( N == 0 )
{
return EXIT_FAILURE;
}
char * V = (char*)malloc( N + 1 );
if( !V )
{
fputs("Errore nell'allocazione della memoria\n", stderr);
return EXIT_FAILURE;
}
int i = 0;
do
{
char c = carica_carattere( i );
if( c == '\n' )
{
free( V );
return EXIT_FAILURE;
}
V[i] = c;
} while( ++i != N );
V[i] = '\0';
print_reverse( V, N );
free(V);
}
int carica_numero()
{
char buffer[30];
fputs("Quanti caratteri desideri inserire:\t", stdout);
if( fgets(buffer, sizeof(buffer), stdin) == NULL)
{
fputs("Errore nella lettura dei dati\n", stderr);
return 0;
}
int N = 0;
if (sscanf(buffer, "%d", &N) == 1 && N > 0)
{
printf("Hai inserito %d\n", N);
return N;
}
fputs("Il valore inserito non e' valido.\n", stderr);
return carica_numero( );
}
char carica_carattere( int i )
{
char buffer[4];
printf("Inserire il carattere %d-esimo:\t", i);
if( fgets(buffer, sizeof(buffer), stdin ) == NULL )
{
fputs("Errore nella lettura dei dati\n", stderr);
return '\n';
}
if( buffer[1] == '\n' && buffer[2] == '\0' )
{
return buffer[0];
}
fputs("Errore inserimento carattere."
" Per favore inserisci un singolo carattere"
" e poi premi invio.\n", stderr);
return carica_carattere( i );
}
void print_reverse( char * restrict v, int N )
{
if( !v || N == 0 ) return;
while( N-- )
{
putchar( v[N] );
}
puts("");
}
19/03/2019, 14:30
vict85 ha scritto::roll: L'uso di scanf per i caratteri è qualcosa che proprio non lo posso vedere. Il modo in cui si dovrebbe gestire la lettura di dati dalla console è quello di leggere i dati riga per riga e di interpretarli. Per capirci questo è come implementerei la prima parte:
Ovviamente io ho fatto attenzione a tutta una serie di errori che generalmente vengono ignorati negli esami come il tuo.
19/03/2019, 15:33
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.