Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Linguaggio C] Esercizio Barcode

    Ragazzi ho bisogno di aiuto! Ho una prova di laboratorio mercoledì pomeriggio e non riesco a capire cosa non va nel mio programma. Inizio a dirvi la consegna dell'esercizio:
    [....]
    Modificare il precedente nel seguente modo:
    - scrivere una funzione inserisciCodici per inserire diversi codici a barre (i parametri e l'eventuale valore
    ritornato sono da stabilire). Ogni codice viene salvato in una riga di una matrice C di 100 righe e di 8 colonne.
    L'inserimento termina quando un codice a barre è non soddisfa le condizioni sopra descritte (lunghezza dle barcode deve essere di 8 caratteri e non deve contenere al suo interno 'XX') o quando si è riempita la
    matrice C.
    - scrivere nel main la chiamata alla funzione inserisciCodici ed inoltre richiedere all'utente le iniziali di u\n
    codice e salvarle in un array daCercare
    - scrivere la funzione ricercaCodice che prende in ingresso la matrice C, il vettore daCercare (più eventuali
    variabili aggiuntive che si ritengono utili/indispensabili) e restituisce l'indice della prima riga contenente un codice a
    barre che coincide con daCercare nei caratteri contenuti in daCercare.
    es.
    890A234X
    890A244X
    800A244X
    800A245X
    8e0A24XX
    inserire codice da ricercare : 800
    il primo codice che inizia con 800 è 800A244X alla riga 3.



    Questo è come lo pensato io:
    codice:
    #include<stdio.h>
    #define MAX 20
    #define MAX_RIGHE 100
    
    int ricercacodice(char mat[][MAX],char vet[],int riga,int l_vet);
    int Inserisci_barcode(char barcode[],int *l_barcode,char mat[][MAX]);
    void main()
    {
         char barcode[MAX],cerca[MAX],matrice[MAX][MAX];
         int l_barcode,l_cerca;
         int numero_righe;
         int r,i,j;
         
         numero_righe=Inserisci_barcode(barcode,&l_barcode,matrice);
         printf("Numero righe inserite:%d\n",numero_righe);
         printf("Inserisci vettore da cercare: ");
         gets(cerca);
         l_cerca=strlen(cerca);
         r=ricercacodice(matrice,cerca,numero_righe,l_cerca);
         if(r==-1)
         printf("Nessun codice trovato");
         else
         printf("Codice %s trovato alla riga %d",cerca,r);
         
         
         
         
         
         
         
    
    
    system("pause");
    }
    
    int Inserisci_barcode(char barcode[],int *l_barcode,char mat[][MAX])
    {
        int i,j,giusto=1,RIGA=0,ok=1;
        do{
           printf("Inserisci barcode: ");
           gets(barcode);
           *l_barcode=strlen(barcode);
           if(*l_barcode!=8)
           {
            printf("La lunghezza del barcode risulta essere diversa da 8\n");
            giusto=0;
            }
          else
            {
             for(i=0;i<*l_barcode;i++)
                if(barcode[i]== 'X' && barcode[i+1]== 'X')
                {
                   printf("Il barcode non puo' contenere i caratteri 'XX' consecutivi\n");
                   giusto=0;
                   }
            }
        if(giusto==1)
        {
        
          for(j=0;j<8;j++)
          {
            mat[RIGA][j]=barcode[i];
            }
            RIGA++;
        }
        }while(RIGA<MAX_RIGHE && giusto==1);
        if(RIGA==MAX_RIGHE)
           printf("Matrice piena\n");
        return RIGA;
    }
    
    int ricercacodice(char mat[][MAX],char vet[],int riga,int l_vet)
    {
        int i,j,uguale=1;
        
        for(i=0;i<riga;i++)
        {
          for(j=0;j<l_vet;j++)
          {
           
           if(mat[i][j]!= vet[j])
           {
               uguale=0;
               break;
               }
           else
            uguale=1;
           }
           if(uguale==1)
             return riga;
           else
             return -1;
        }
    }
    Il problema è essenzialmente nella funzione Ricercacodice...qualsiasi codice inserisco mi appare a schermo durante l'esecuzione ("codice non trovato"). Ho paura che il problema sia la mat[i][j]..grazie mille in anticipo per l'aiuto!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Inserisci il codice tra tag CODE e indentalo altrimenti non si capisce nulla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Inserisci il codice tra tag CODE e indentalo altrimenti non si capisce nulla.
    Chiedo scusa!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Penso che nell'inserimento tu debba scrivere

    codice:
    		if(giusto==1)
    		{
    			strcpy(mat[RIGA], barcode);
    			
    			RIGA++;
    		}
    e la funzione ricercacodice

    codice:
    int ricercacodice(char mat[][MAX],char vet[],int riga,int l_vet)
    {
    	int i;
    
    	for(i=0;i<riga;i++)
    		if(strncmp(mat[i], vet, l_vet)==0)
    			return i;
    
    	return -1;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Non avevo pensato ad usare le funzoni contenute nella libreria string.h! Ma tu mi sapresti dire cosa c'è proprio di sbagliato? Perchè penso che non sia obbligatorio utilizzare le funzioni di libreria strcpy e strncmp! Grazie

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il file string.h è semplicemente in file include non una libreria ... attenzione.

    Senza la strncmp la tua funzione dovrebbe essere corretta così

    codice:
    int ricercacodice(char mat[][MAX],char vet[],int riga,int l_vet)
    {
        int i,j,uguale;
        
        for(i=0;i<riga;i++)
        {
    	  uguale=1;
    
          for(j=0;j<l_vet;j++)
          {
    		if(mat[i][j] != vet[j])
    		{
    			uguale=0;
    			break;
    		}
    	  }
    
    	  if(uguale==1) return i;
        }
    
    	return -1;
    }
    ma anche

    codice:
    		if(giusto==1)
    		{
       			for(j=0;j<8;j++)
    			{
    				mat[RIGA][j]=barcode[j];
    			}			
    			
    			RIGA++;
    		}
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Mi sei stato davvero molto utile! Ti superingrazio!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.