Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

aiuto esercizio in c

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

aiuto esercizio in c

Messaggioda jack_the _best » ven dic 05, 2008 5:57 pm

ciao a tutti sto scrivendo un programma per esercizio. il programa compila ma l-uotput e' 0 0 mentre dovrebbe essere 2 1.
allego il testo.
esercizio.doc


questo [ il codice che ho scritto:
Codice: Seleziona tutto

#include<stdio.h>

void occorrenze(int v[], int k, int i, int *occ_min, int *occ_max){
if(v[i+1]==-1){
*occ_min=0;
*occ_max=0;
}
if(i<0){
if(v[0]==k)
*occ_min++;
return;
}
if(v[i]==k && v[i+1]==-1)
*occ_max++;
if(v[i]==k && v[i-1]<k)
*occ_min++;
if(v[i]==k && v[i+1]>k)
*occ_max++;
occorrenze(v, k, i-1, occ_min, occ_max);
return;
}


int main(){
int v[100], i, k, occ_max, occ_min;
scanf("%d", &k);
for(i=0;i<=100 && v[i-1]!=-1;i++){
scanf("%d", &v[i]);
}
occorrenze(v, k, i-2, &occ_min, &occ_max);
printf("%d %d", occ_min, occ_max);
return 0;
}

Codice: Seleziona tutto


credo che il problema sia nelle chiamate delle funzioni e nei puntatori
dove sbaglio?

grazie
Ci sono 10 tipi di persone al mondo. Quelli che capiscono il codice binario e quelli che non lo capiscono.
Avatar utente
jack_the _best
Senior Member
Senior Member
 
Messaggi: 172
Iscritto il: mer lug 12, 2006 1:58 pm

Re: aiuto esercizio in c

Messaggioda Antar3sX » gio dic 11, 2008 7:38 pm

L'errore sta in come incrementi la variabile puntata dai puntatori:

*p++ -> incrementa l'indirizzo di memoria a cui punta il puntatore
(*p)++ -> incrementa il valore a cui punta il puntatore

Sostituisci gli incrementi e vedi che il programma funziona.

Una curiosità: come mai hai implementato la ricerca a ritroso?

Io avrei fatto cosi'
Codice: Seleziona tutto
#include<stdio.h>

void occorrenze(int v[], int k, int i, int * occ_min, int * occ_max){

        printf ("I - %d -> v[i] = %d\n", i, v[i]);

        if (i==0) {
                *occ_min=0;
                *occ_max=0;
        }
        if(v[i]==k && ((i==0) || (v[i-1]<k)))
                (*occ_min)++;
        if(v[i]==k && ((v[i+1]==-1) ||(v[i+1]>k)))
                (*occ_max)++;
        if(v[i]==-1){
                return;
        }


        occorrenze(v, k, i+1, occ_min, occ_max);
        return;
}


int main(){
        int v[100], i, k;
        int occ_max, occ_min;
        scanf("%d", &k);
        for(i=0;i<=100 && v[i-1]!=-1;i++){
                scanf("%d", &v[i]);
        }
        occorrenze(v, k, 0, &occ_min, &occ_max);
        printf("%d %d", occ_min, occ_max);
        return 0;
}



Spero di essere stato di aiuto
Ciao
Avatar utente
Antar3sX
Neo Iscritto
Neo Iscritto
 
Messaggi: 22
Iscritto il: mer dic 10, 2008 5:41 pm
Località: Napoli

Re: aiuto esercizio in c

Messaggioda jack_the _best » ven dic 12, 2008 8:49 pm

ciao, per quanto riguarda i puntatori avevo gia risolto mettendo al posto di *p++, *p+=1
comunque grazie per la correzione [grazie] ora so perché gli incrementi non funzionavano mai!! [acc2]

la ricerca mi è venuto naturale metterla inversa perche la i del main passata alla funzione ha gia il valore della lunghezza utilizzata nel vettore

ti posto il codice finale
Codice: Seleziona tutto
#include<stdio.h>

void occorrenze(int v[], int k, int i, int *occ_min, int *occ_max){
if(v[i+1]==-1){
*occ_min=0;
*occ_max=0;
}
if(i<=0){
if(v[0]==k)
*occ_min+=1;
return;
}
occorrenze(v, k, i-1, occ_min, occ_max);
if(v[i]==k && v[i+1]==-1)
*occ_max+=1;
if(v[i]==k && v[i-1]<k)
*occ_min+=1;
if(v[i]==k && v[i+1]>k)
*occ_max+=1;

return;
}


int main(){
int v[100], i, k, occ_max, occ_min;
scanf("%d", &k);
for(i=0;i<=100 && v[i-1]!=-1;i++){
scanf("%d", &v[i]);
}
occorrenze(v, k, i-2, &occ_min, &occ_max);
printf("%d %d", occ_min, occ_max);
return 0;
}

Codice: Seleziona tutto


grazie della risposta

ciao
Ci sono 10 tipi di persone al mondo. Quelli che capiscono il codice binario e quelli che non lo capiscono.
Avatar utente
jack_the _best
Senior Member
Senior Member
 
Messaggi: 172
Iscritto il: mer lug 12, 2006 1:58 pm

Re: aiuto esercizio in c

Messaggioda Antar3sX » sab dic 13, 2008 12:23 am

jack_the _best ha scritto:ciao, per quanto riguarda i puntatori avevo gia risolto mettendo al posto di *p++, *p+=1

Perfetto! [^]

Alla prossima allora
Ciao
Avatar utente
Antar3sX
Neo Iscritto
Neo Iscritto
 
Messaggi: 22
Iscritto il: mer dic 10, 2008 5:41 pm
Località: Napoli


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti

cron
Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising