Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    7

    Problema nella programmazione

    Buongiorno

    Mi sono appena iscritto in questo forum E studio il c da non tanto tempo. Nel cercare di creare un codi per il quadro magico con dei vettori moleplici, 90 righe e 90 colonne, ho riscontrato l'errore nell'avvio: Segmentation fault.
    Volevo chiedere se qualcuno e' disposto ad aiutarmi a trovare l'errore nel codice, ringrazio anticipatamente

    Codice:

    #include <stdio.h>
    int main(void)
    {

    int riga, colonna, numero = 1;

    int tavola[90][90] = {0};

    colonna = 45;
    riga = 0;

    tavola[0][45] = 1;

    while (1)

    yep: for (riga; 90>=riga<=0; --riga)
    { for (colonna; 90>=colonna<=0; ++colonna)
    if (tavola[riga][colonna] != 0)
    tavola[riga][colonna]=(++numero); else tavola[++riga +1][--colonna-1]=( ++numero)}
    if (riga>90) {riga=0; goto yep ; if (riga<0) {riga=90; goto yep};
    if (colonna>90) {colonna=0; goto yep ; if (colonna<0) {colonna=90; goto yep} ;


    return 0; }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A parte il goto e la mancanza di indentazione, consiglierei di rivedere la sintassi del ciclo for: è completamente sbagliata.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Premessa: Non ho analizzato il codice, gli ho solo dato un'occhiata...
    Conclusione: prima o dopo l'indice arriverà a 90 dandoti un'errore in quanto l'indice va da 0 a 89.

    Consiglio: cancella il codice e scrivilo ssenza l'utilizzo di goto: non è più in uso per problemi di sicurezza (chiusura file, de-allocazione memoria, ...) e rende incomprensibile il codice, specialmente visto che l'hai inserito all'interno di un loop, inoltre a te basta un continue o break...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    7
    Ho riscritto il codice, pero' non ho saputo fare a meno di goto, per il motivo che e' fuori dal ciclo.
    Comunque adesso il problema e' di non dare input.

    codice:
    #include <stdio.h>
    int main(void)
    {

    int riga, colonna, numero = 1;

    int tavola[90][90] = {0};

    colonna = 44;
    riga = 0;

    tavola[0][44] = 1;

    while (1)

    yep: for (riga; 89>=riga<=0
    { for (colonna; 89>=colonna<=0
    {if (tavola[riga-1][colonna+1]==0 || tavola[riga+1][colonna]==0)
    {if (tavola[riga-1][colonna+1]==0) tavola[--riga][++colonna]=++numero; else tavola[++riga][colonna]=++numero;} else return 0;}}
    if (riga>89) {riga=0; goto yep;} if (riga<0) {riga=89; goto yep;}
    if (colonna>89) {colonna=0; goto yep;} if (colonna<0) {colonna=89; goto yep;}
    printf("%d", tavola[90][90]);


    return 0; }

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Spiegati meglio...
    Comunque prima o dopo l'indice assumerà valore 89 cui tu poi aggiungi 1: risultato 90: stesso errore di prima...
    In ogni caso ti consiglio di riprovare finché non giungi ad una soluzione che non preveda l'uso di goto...

    Ah, utilizza il tag code per favore...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    7
    Prima di tutto voglio rigraziare tutti coloro che hanno risposto.
    Poi devo dire il mio problema dovrebbe essere risolto in parte, perche' ho ottenuto la stampa anche se sono impossibilitato a certificare la validita' della tavola, ora il problema ma e' come allinearli.
    codice:
    #include <stdio.h>
    int main(void)
    {
    
    	int riga, colonna, numero = 1;
    
    	int tavola[90][90] = {0};
    
    	colonna = 44;
    	riga = 0;
    
    	tavola[0][44] = 1;
    	
    	
    
    while (1)
    {
    if (riga == 0) riga = 89; else if (riga == 89) riga = 0;  if (colonna == 89) colonna = 0;
    if (tavola[riga-1][colonna+1] == 0 || tavola[riga+1][colonna] == 0)
    	{
    	if (tavola[riga-1][colonna+1] == 0) tavola[--riga][++colonna] = ++numero;
    	else tavola[++riga][colonna] = ++numero;
    	printf (" %d", tavola[riga][colonna]);
    	}
    else break;
    }
    
    return 0; }

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    7
    Per ordinarli ho provato sia con un ciclo for che con questo codice
    codice:
     
    if (riga == 89 && colonna == 89) break;
    if (colonna == 89) {colonna = 0; riga++;}
    colonna++;
    printf("%d", tavola[riga][colonna]);
    }
    che alla fine ha la stessa funzione ma appare errore Segmentation fault.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Benvenuto sul forum.
    Ti invito a prendere visione del Regolamento interno, in particolare per quanto riguarda l'assegnazione del titolo alla discussione. Il titolo è una parte fondamentale di una discussione all'interno del forum.
    Nel titolo devi indicare:

    1) Il linguaggio di programmazione che usi (fra parentesi quadre)
    2) Una sintetica descrizione del problema

    Considerando che questo è il forum "Programmazione", dare alla discussione un titolo come "Problema nella programmazione" non aiuta nessuno, in quanto il 100% delle discussioni presenti in questo forum riguarda problemi nella programmazione... sarebbero Off-Topic, altrimenti. Per questo è importante che il titolo dia una descrizione del problema... altrimenti tutte le discussioni si potrebbero chiamare come la tua e nessuno saprebbe più a quale discussione far riferimento.

    Vi sono altre scritte nel regolamento che ti ho linkato da tenere presente, come l'uso dei tag CODE per il codice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    7
    ok, chiedo scusa

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    7
    Ciao a tutti, ho sistemato il codice, ma ora presenta il problema di bloccarsi al numero 23 e non fa piu' gli altri calcoli .-. sapete il perche?

    codice:
    #include <stdio.h>
    int main(void)
    {
    
    
    	int riga, colonna, numero = 1;
    
    	int tavola[6][6] = {0};
    
    	colonna = 2;
    	riga = 0;
    
    	tavola[0][2] = 1;
    	
    	
    
    while (1)
    {
    if (riga == 0) {riga = 5; tavola[riga][++colonna] = ++numero;} else if (riga == 5){riga = 0; tavola[riga][colonna] = ++numero;} else if (colonna == 5) {colonna = 0; tavola[--riga][colonna]=++numero;}
    if (tavola[riga-1][colonna+1] == 0 || tavola[riga+1][colonna] == 0)
    	{
    	if (tavola[riga-1][colonna+1] == 0) tavola[--riga][++colonna] = ++numero;
    	else tavola[++riga][colonna] = ++numero;
    	}
    else break;
    }
    
    for (riga = 0; riga <6; riga++)
    {printf ("\n\n");
    for (colonna = 0; colonna <6; colonna++) printf("  %2d", tavola[riga][colonna]);
    }
    printf ("\n\n");
    return 0; }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.