Pagina 1 di 1

Quesito "informatico", ma è per tutti....

MessaggioInviato: gio giu 10, 2010 4:47 pm
da Lars90
Ragazzi sono alle prese con linguaggio C e sto dando di matto per pensare un algoritmo che deve fare la seguente cosa.
Praticamente data una serie di numeri a piacere, devo riconoscere l'indice della casella dove parte la prima serie di almeno 3 numeri dispari. Ok per chi non fosse chiaro lo semplifico.

Immagine

Questo è l'esempio e la serie è quella evidenziata in rosso. Dunque io devo riportare che " la serie di x numeri dispari ( nell'esempio 3 ) appare a partire dall'y elemento ( nell'esempio il quarto). Voi che metodo logico usereste ? Mi sto scervellando!

MessaggioInviato: gio giu 10, 2010 4:53 pm
da mickytaylor
se ho capito bene e se mi ricordo un pò dovresti fare un ciclo dove confronti se Ai, a(i+1) e A(i+2) hanno il resto se dividi per 2 (se non mi sbaglio si usa il simbolo %) per sapere se pari o dispari e se lo sono l'indice sarà i

:tru

MessaggioInviato: gio giu 10, 2010 5:00 pm
da Lars90
Ehhh te pare così semplice ? :mrgreen: C'avevo pensato anche io, ma metti che la serie dispari è di 4 numeri ? Questo metodo te lo fai con le patate :mrgreen:

MessaggioInviato: gio giu 10, 2010 5:09 pm
da mickytaylor
ok ok, allora crea una variabile int (chiamiamola temp) che ti conta i numeri dispari che trovi finchè non trovi un pari e se => a 3 l'indice sarà i-temp+1 :tru :tru

MessaggioInviato: gio giu 10, 2010 5:48 pm
da cioto
:wink:

MessaggioInviato: gio giu 10, 2010 5:52 pm
da Shanik
Lars ma il contest di Asd alla fine l'hai fatto?

MessaggioInviato: gio giu 10, 2010 6:58 pm
da Shanik
ci ho messo troppo...:D

Codice: Seleziona tutto
#include <stdio>
#include <stdlib>

#define LEN 10

void riempi_vettore(int* vet);
int cerca_dispari (int vet[]);

main()
{
   int vet[LEN];
   int posizione=0;
   int i;
   
   riempi_vettore(vet);
   posizione=cerca_dispari(vet);
   
   if (posizione==-1)
      printf("Non ci sono sequenze di almeno 3 numeri dispari consecutivi\n");
   else
      printf("La prima serie di almeno 3 dispari e' in posizione %d\n\n\n", posizione+1);
   
   system("PAUSE"); 
}

void riempi_vettore(int* vet)
{
   int i;
   for (i=0; i<LEN; i++)
   {
       printf("Inserisci l'elemento in posizione %d del vettore: ", i+1);
       scanf("%d", &vet[i]);
       printf("\n");
   }
}

int cerca_dispari (int vet[])
{
   int posizione=0, dispari=0;
   int i;
   
   for (i=0; i<LEN && dispari<3; i++)
   {
      if ((vet[i]%2)!=0)
         dispari++;
      else
         dispari=0;
   }
   
   if (dispari==3)
   {
      posizione=i-dispari;
      return posizione;
   }
   else
      return -1;
}

MessaggioInviato: gio giu 10, 2010 7:08 pm
da Rezedrumming
ma che sò 'ste cose! ahaahaha vedete che vi si fonde il cervello! :D :lol:

MessaggioInviato: gio giu 10, 2010 7:14 pm
da Shanik
..troppo tardi!

Immagine

:lol:

MessaggioInviato: gio giu 10, 2010 7:16 pm
da cioto
hahha :)
effettivamente vedere del codice per chi non ha mai programmato è abbastanza traumatica come esperienza 8)

MessaggioInviato: gio giu 10, 2010 7:19 pm
da Thunder
io sono dottore in scienze informatiche ma mi da i conati di vomito lo stesso :D

MessaggioInviato: ven giu 11, 2010 1:21 am
da leletto
Mitico il C!! son 10 anni che non lo tocco ma ancora mi affascina!!
Ora con la programmazione ad API son cambiate un sacco di cose. :cry:

MessaggioInviato: ven giu 11, 2010 9:25 am
da smellymilk
aho, ma che programmatori siete? gli algoritmi si devono scrivere in pseudocodifica! :tru

MessaggioInviato: ven giu 11, 2010 10:56 am
da Lars90
Grazie mille Shanik!!!! :P :P :P :P Il caricamento già l'avevo fatto mi serviva solo la funzione che cerca la serie. grazie mille! Solo che c'è un'unica cosa; praticamente la traccia mi dice di riportare poi "la serie di x numeri dispari inizia a partire dall'elemento di indice y",come faccio a ritornare quanti elementi dispari trovo ?


Comunque con ASD non sono andato avanti, mi faccio direttamente lo scritto all'esame :mrgreen:

MessaggioInviato: ven giu 11, 2010 11:48 am
da talismano
a me invece diverte sempre vedere del codice...anche perché dopo migliaia di ore a scrivere e leggere codice è come se dal modo di scrivere il codice capisci che siamo tutti diversi. :D

comunque Lars cerca di spemerti un pò, avere tutta la soluzione del problema non sempre può esserti utile (SPESSO SI PERO' :D :D :D )

MessaggioInviato: ven giu 11, 2010 12:03 pm
da Shanik
@Lars90: ehaspè ci penso un attimo.. come ho fatto io appena trova una serie da tre esce dal ciclo.. quindi devo vedere come fare per serie maggiori di 3..

MessaggioInviato: ven giu 11, 2010 12:13 pm
da Lars90
Vabbè quello è semplice basta che invece di mettere if(dispari == 3 ) metti if(dispari >= 3).
Però come faccio a restituire sia la posizione sia la variabile dispari ? Io avevo pensato a due funzioni. Una che ritorna posizione e l'altra che ritorna la serie. Però giustamente quando faccio la funzione che trova la posizione come faccio a dirgli che deve essere uguale all'indice meno il numero di numeri dispari ? :mrgreen:

MessaggioInviato: ven giu 11, 2010 12:57 pm
da Shanik
#include <stdio>
#include <stdlib>

#define LEN 10

void riempi_vettore(int* vet);
int cerca_indice_dispari (int vet[]);
int cerca_numero_dispari (int vet[]);

main()
{
int vet[LEN];
int posizione=0;
int dispari=0;
int i;

riempi_vettore(vet);
posizione=cerca_indice_dispari(vet);
dispari=cerca_numero_dispari(vet);

if (posizione==-1)
printf("Non ci sono sequenze di almeno 3 numeri dispari consecutivi\n");
else
printf("La serie di %d dispari e' in posizione %d\n\n\n",dispari, posizione+1);

system("PAUSE");
}

void riempi_vettore(int* vet)
{
int i;
for (i=0; i<LEN; i++)
{
printf("Inserisci l'elemento in posizione %d del vettore: ", i+1);
scanf("%d", &vet[i]);
printf("\n");
}
}

int cerca_numero_dispari (int vet[])
{
int posizione=0, dispari=0;
int i=0;

while (i<LEN>=3)
{
i++;
while ((vet[i]%2)!=0 && i<LEN)
{
dispari++;
i++;
}
return dispari;
}
i++;
}
return -1;
}

int cerca_indice_dispari (int vet[])
{
int posizione=0, dispari=0;
int i=0;

for (i=0; i<LEN && dispari<3; i++)
{
if ((vet[i]%2)!=0)
dispari++;
else
dispari=0;
}

if (dispari==3)
{
posizione=i-dispari;
return posizione;
}
else
return -1;
}

MessaggioInviato: ven giu 11, 2010 1:04 pm
da xtremeflier
vomito..

MessaggioInviato: ven giu 11, 2010 2:22 pm
da Lars90
Grazie mille collega! :mrgreen: