Esercizio in linguaggio c

di il
21 risposte

Esercizio in linguaggio c

Ciao a tutti!
mi scuso per il disturbo.. sono alle prese con questo esercizio. ho scritto il codice però alla fine non è quello che l'esercizio chiede.
ecco il testo dell'esercizio:

Nel file croceromana.c implementare la definizione della funzione:

extern void croceromana(FILE *f, unsigned char n);

la funzione deve scrivere sul file f (che viene passato già aperto in modalità tradotta e in scrittura) una croce romana, rappresentata con i simboli ASCII. Il parametro n indica la lunghezza del braccio superiore, mentre gli altri bracci saranno lunghi il doppio:

n = 1
I
--+--
|
|
circa dovrebbe venire così..
allora il codice che ho scritto è il seguente:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void croceromana(FILE *f, unsigned char n)
{
	int i = 0;
	int j = 0;

	for (i = 0; i <= 3*n; i++)
	{
		if (i == n)
		{
			for (j = 0; j <= 4 * n; j++)
			{
				if (j == 2 * n)
					fprintf(f, "+");
				else
					fprintf(f, "-");
			}
		}

		if (i != n)
		{
			for (j = 0; j <= 4 * n; j++)
			{
				if (j < 2 * n)
					fprintf(f, " ");

				if (j == 2 * n)
				{
					fprintf(f, "|");
					j = j + 1;
					fprintf(f, "\n");
				}
			}
		}
	}
	
}

int main(void)
{
	FILE *f;
	f = fopen("croceromana.txt", "wt");
	if (f == NULL)
		return -1;

	croceromana(f, 6);

	fclose(f);
}
allora la croce mi appare, fatta bene.. però lungo il braccio orizzontale della croce mi appare uno | di troppo.. e lungo il braccio verticale uno | di meno..
in questo modo..

            |
            |
            |
            |
            |
            |
------------+------------            |
            |
            |
            |
            |
            |
            |
            |
            |
            |
            |
            |
mi sapreste dire dove sbaglio??
nell'attesa di una risposta, vi ringrazio anticipatamente.

21 Risposte

  • Re: Esercizio in linguaggio c

    Ciao carissimo.
    Mi fa piacere aiutare qualcuno.
    Secondo me l'errore è il seguente:
    for (j = 0; j <= 4 * n; j++)
    {
    if (j == 2 * n)
    fprintf(f, "+");
    else
    fprintf(f, "-");
    }
    c'è qualcosa che non va in questo frammento di codice.
    non capisco che condizione c'è nella if e forse andrebbe rivista e poi invertiti se non eliminati il + e il - dei fprintf.
    Prova così e fammi sapere.
  • Re: Esercizio in linguaggio c

    Ciao! Innanzitutto grazie per la risposta..
    Allora ho messo quell'if con la condizione che se l'indice di riga i è uguale a n, allora mi trovo nel braccio della mia croce. Quindi faccio un ciclo for per determinare la posizione della colonna.
    Se l'indice di colonna è uguale a 2n vuol dire che mi trovo al centro della croce e quindi stampo la 'x', altrimenti stampo solo delle lineette '-'.
    Ho provato a riguardare ma mi pare corretto..
  • Re: Esercizio in linguaggio c

    ALLORA MOLTO PROBABILMENTE L'ERRORE POTREBBE ESSERE QUI SOTTO:
    int main(void)
    {
    FILE *f;
    f = fopen("croceromana.txt", "wt");
    if (f == NULL)
    return -1;

    croceromana(f, 6);

    fclose(f);
    }

    Per forza perché mi sembra tutto giusto il codice quindi non riesco a capire.
    Deve essere per forza qui.
    Prova a dare un'occhiata e fammi sapere.
    Ti chiedo scusa se magari non riesco a risolverti il problema fino in fondo, eppure ci sto provando in tutti i modi credimi!
    Ti andrebbe di diventare amici e di darmi una mano a vicenda con i programmi in C++?
    A presto!
  • Re: Esercizio in linguaggio c

    Mmh... Li non mi pare.. È nell'implementazione della funzione che c'è l'errore.. Ma non riesco proprio a trovarlo..
    Vai tranquillo e scusami per il disturbo.. Spero che qualcunaltro riesca a risolvere il mio problema..
    Se vuoi possiamo diventare amici ma io di C++ non so ancora niente.. Essendo al primo anno di Ingegneria Informatica.
    Sono alle prese con il C che mi sta facendo sudare per bene..
  • Re: Esercizio in linguaggio c

    Io frequento un istituto tecnico industriale informatico e fatto il terzo anno in cui abbiamo studiato C++.
    Mi chiamo Guglielmo.
    Tu?
  • Re: Esercizio in linguaggio c

    Mi chiamo Mirko e ho frequentato il primo anno di ingegneria informatica all'Università di Modena.
    Vivo però a Reggio Emilia.
  • Re: Esercizio in linguaggio c

    Io invece vivo a Roma.
    Ma se ti posso confidare una cosa, il mio sogno è quello di andare a vivere a Napoli.
    Sono stufo di stare a Roma da quando sono nato.
    Io sono amante del Sud, di Napoli in particolare con il suo mare e la sua bellezza fantastici.
    Ma a 18 anni dove posso andare ancora!
    Spero più avanti prima o poi di poter realizzare questo chiodo.
    In compenso sono un grande appassionato di calcio, sono molto amante delle due squadre di milano: AC Milan e FC Internazionale.
    Tu?
  • Re: Esercizio in linguaggio c

    Eh Napoli deve essere una gran bella città .. Non ci sono mai stato in vita mia ma anche a me piacerebbe andarci.. Però anche Roma mi affascina molto..
    Io tifo Fc internazionale, cioè l'Inter ma seguo molto poco il calcio.. Esulto quando vince e basta.. Anche se lo scorso anno ha fatto letteralmente pena ahah


    P.s
    Spero che qualche buon'anima mi risponda. Venerdì ho l'esame e sono disperato!!
  • Re: Esercizio in linguaggio c

    Anche io sono tifoso dell'FC Internazionale, da quando sono nato!
    Anche se ho sempre stimato e adorato anche l'AC Milan in quanto è stata una grande squadra.
    Napoli è davvero il mio sogno, vivere o in città o meglio ancora nelle isole del golfo quali Ischia e Capri.
    Secondo te riuscirò a realizzare questo sogno?
  • Re: Esercizio in linguaggio c

    Mi dispiace interrompere la vostra chat e tutte le discussioni su Ischia, Napoli e l'Inter, ma tornando al problema del tuo programma C++, puoi chiarire un attimo cosa intendi quando dici che nel braccio orizzontale c'è un | di troppo? Nel braccio orizzontale ci sono i caratteri - non |
  • Re: Esercizio in linguaggio c

    Si scusami... Il programma è in C non in C++
    Intendo che come puoi vedere dal grafico che ho postato lungo il braccio orizzontale.. In fondo appare un '|' di troppo.. Mentre invece lungo il braccio verticale inferiore ci dovrebbero essere 12 (il doppio di 6) '|' e non 11 come invece mi è apparso a me..
  • Re: Esercizio in linguaggio c

    Ok, non l'avevo visto. Rimedi semplicemente inserendo una printf dove ti mostro

    fprintf(f, "-");
    }
    printf("\n");
    }
  • Re: Esercizio in linguaggio c

    Ok.. Adesso funziona!
    Grazie mille!!
  • Re: Esercizio in linguaggio c

    Prego, di nulla ...
Devi accedere o registrarti per scrivere nel forum
21 risposte