Pari o dispari

Stato
Discussione chiusa ad ulteriori risposte.
uno in perl:
Codice:
print $#ARGV == 0 ? $ARGV[0] =~ m/^[0-9]*$/ ? $ARGV[0] =~ m/[02468]$/ ? "Pari\n" : "Dispari\n" : "Non hai inserito un numero\n" : "Usage: file.pl number\n";
 
Eccone uno in C...

Codice:
extern int read(int fd,void *s,int size); extern int write(int fd,void *s,int size);	int main() { int n; read(0,&n,10); if (!(((n % 2) == 0) ? 0 : 1)) { write(1,"Pari.\n",6); return 0; } write(1,"Dispari.\n",9); return 1; }
 
mah... -.- non vedo l'utilità della critica nei confronti dell'algoritmo che ho scritto..vabbe va.
 
@HackLife: cosa ridi?
@Nex:
intanto, scusa ma:
Codice:
extern int read( int fd, void *s, int size );

extern int write( int fd, void *s, int size );

int main() {

	int n;
	read( 0, &n ,10 );
	if (! ( ( (n % 2) == 0 )  ? 0 : 1 ) ) {
	   write( 1, "Pari.\n", 6 );
	   return 0;
	   }
	   write( 1,"Dispari.\n",9 );
	   return 1;
}
ok, carino il trick con il not e il ternario, ma a parer mio è più corretto (formalmente), dare solo un return e piazzarci un else, visto che essendo un main e non una funzione, logicamente dovrebbe tornare 0 (exit_success) anche se il valore è dispari. Altrimenti fai una funzione che torna 0 o 1 a seconda del risultato, ma non lo stampa.
E poi, capisco che li hai dichiarati extern e non è difficile capire come funzionano, ma dove sono implementati read e write? Che oltretutto vedendo gli argomenti sono decisamente più scomodi di semplici printf e scanf...
 
orakool, includendo gli header non poteva mettere tutto in una riga, con quella cosaccia li si, voleva imitarmi ma è stato un fail xD
@rohack: per diversificare l'esercizio non serve unsare un puntatore...avresti mai pensato ad usare le regex come me?
 
@Hacklife: è uguale, non ci trovo niente di divertente, ha usato i puntatori, e allora?

@Shura: appunto, era lì che volevo arrivare, il C non è un linguaggio da criptare, viene fuori un fail miserabile xD
 
orakool ha detto:
E poi, capisco che li hai dichiarati extern e non è difficile capire come funzionano, ma dove sono implementati read e write? Che oltretutto vedendo gli argomenti sono decisamente più scomodi di semplici printf e scanf...
Sono syscalls. E printf e scanf sono meno performanti di write e read.

Piuttosto il fatto fondamentale e' che non funziona :)

Codice:
meh@lolcahost ~ $ ./lol
34
Dispari.

Fara' anche un read di 10, ma int e' 4 bytes, quindi c'e' un bof di 6 bytes, inoltre il controllo viene fatto sul risultato del valore della sequenza dei 4 caratteri inseriti.

orakool ha detto:
@Shura: appunto, era lì che volevo arrivare, il C non è un linguaggio da criptare, viene fuori un fail miserabile xD
... bah.
 
Si ma piuttosto questo if
Codice:
 if (! ( ( (n % 2) == 0 )  ? 0 : 1 ) )
il resto di una divisione per due da o 0 o 1.. il ternario lì è inconsistente ...
 
Stato
Discussione chiusa ad ulteriori risposte.