Newsgroup: it.comp.lang.c
Titolo: vi prego aiutatemi

Ciao,
devo risolvere entro venerdì il seguente problema. Ho anche scritto 
l'algoritmo, ma non la funzione ispair. Chi mi da una mano? Se è troppo 
pesante scrivere l'intero codice vi prego di farmi sapere se l'algoritmo è 
ok ed al caso di scrivere la funzione ispair.
Se poi qualcuno mi scrive l'intero codice è ancora meglio:)
Grazie in anticipo
Rossana
Problema:
Dato l'array di interi 5,9,8,1,6,0,2,3,4,7
Creare due array contenenti solo i numeri dispari e l'altro contenente solo 
i numeri pari nell'ordine originale:
5,9,1,3,7
8,6,0,2,4
Stampare il contenuto degli array
Algoritmo:
1° livello
START
Definisco due variabili npari e ndispari. Conto i numeri pari e i numeri 
dispari nell'array dato.
Per fare ciò faccio un ciclo for con indice i da 1 a 10; testo ciascun 
elemento dell'array e incremento npari o ndispari a seconda che il test sul 
valore puntato da i mi dia un numero pari o un numero dispari.
Alloco dinamicamete (con malloc) gli array di destinazione. (Testo se mi da 
la memoria).
Smisto i numeri negli array di destinazione mediante un ciclo for e rifaccio 
il test.
Stampo il contenuto degli array (mediante due cicli for).
Test
Per fare i test creo una funzione isPair che ritorna un valore (boolean) 
true se l'input è pari è false se l'input è dispari, mi pare una buona idea 
usare il modulo di 2 come mezzo.
Scrivo la funzione
Int ispair (int)
{
}
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at 
http://www.hotmail.com
.
-- 
Posted from [147.123.1.111] by way of 
f85.law11.hotmail.com
 [64.4.17.85] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
F85iKAe2hXSDx...@hotmail.com...


 ha scritto nel messaggio
news:F85iKAe2hXSDx...@hotmail.com...


 }
Ma dai io me ne inventerei uno in tempo n alla terza !!!!
Dai (oltre alla tua che e' la piu' scontata) te ne metto altre in tempo 1 :
1) return (num%2)==0;
2) return num^1;
3) return (num/2*2)==num;
La prima (come ben sai) usa il modulo etc...
La seconda invece guarda l'ultimo bit (LSB) per vedere se il num e' pari o
meno.
Il terzo metodo divide per 2 e poi moltiplica per 2. Se (con numeri interi)
il risultato non cambia e' pari altrimenti dispari. es:
8/2=4  ->  4*2=8  ->  8==8
7/2=3  ->  3*2=6  ->  8!=6
La prima e' certamente la piu' utilizzata e quella che dipende meno dalla
macchina.
La seconda tuttavia e' la piu' veloce. (specialmente la versione isOdd con
l'AND).
Alex


}
Come hai detto viene effettuato lo XOR del numero con 1... questo
pero' significa che
   (10^1) == 11
   (11^1) == 10
   (12^1) == 13
   (13^1) == 14
e quindi la funzione non restituisce affatto se un numero e'
pari oppure dispari (per fare quello bisognerebbe usare (num&1)==0
oppure (num&1)^1 oppure !(num&1)).
Curioso anche il nome... io avrei chiamato la funzione isEven visto
che Pair significa "coppia" e non "pari"... mah... ovvio in ogni
caso che uno e' libero di chiamare questa cosa come gli pare...
anche "openDataFile" oppure "drawCircle" :)
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 anche "openDataFile" oppure "drawCircle" :)
Quello che e' giusto e' giusto ho sbagliato (da coglione, visto che lo
sapevo benissimo), ma non mi accusare per il nome !!!
(tutto parte das rossana >>di scrivere la funzione ispair )
So benissimo che si dice even e odd.
Quindi la seconda parte del tuo messaggio postala a chi ha iniziato a
chiamarla cosi', mi dispiace ma di questo non mi posso sentire responsabile
:-)
Alex

> 2) return num^1;
Come mi e' stato fatto notare (giustamente), ho sbagliato, usa return
(num&1)==0;
(o nega con un NOT)
Alex