PDA

Visualizza la versione completa : [Linguaggio C] Esercizio Barcode


asinelli91
18-06-2012, 19:57
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:


#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!

oregon
18-06-2012, 20:26
Inserisci il codice tra tag CODE e indentalo altrimenti non si capisce nulla.

asinelli91
18-06-2012, 20:34
Originariamente inviato da oregon
Inserisci il codice tra tag CODE e indentalo altrimenti non si capisce nulla.

Chiedo scusa!

oregon
18-06-2012, 20:47
Penso che nell'inserimento tu debba scrivere



if(giusto==1)
{
strcpy(mat[RIGA], barcode);

RIGA++;
}


e la funzione ricercacodice



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;
}

asinelli91
18-06-2012, 20:52
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 :)

oregon
18-06-2012, 21:14
Il file string.h č semplicemente in file include non una libreria ... attenzione.

Senza la strncmp la tua funzione dovrebbe essere corretta cosė



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



if(giusto==1)
{
for(j=0;j<8;j++)
{
mat[RIGA][j]=barcode[j];
}

RIGA++;
}

asinelli91
19-06-2012, 10:26
Mi sei stato davvero molto utile! Ti superingrazio!

Loading