functia isequal() nu face ceea ce sugereaza, adica nu e echivalenta cu ==
----- Original Message ----
From: Radu Cornea <em...@radu.net>
To: mens...@googlegroups.com
Sent: Tuesday, May 8, 2007 11:48:37 PM
Subject: [mens sana] Re: functie in C
On 5/8/07, Cosmin Marian <cosm...@yahoo.com> wrote:
>
> O solutie care are la baza o functie de tipul:
>
> f(n)= p daca n == 0 si q daca n > 0
>
>
> typedef unsigned int uint;
> typedef void (*continuare)(uint);
>
> void zero(uint);
> void nonzero(uint);
> void fun(uint);
>
> continuare continuari[] = {
> 0, // ;)
> nonzero,
> zero
> };
>
> void zero(uint n) {
> }
>
> void nonzero(uint n) {
> fun(n-1);
> }
>
> void fun(uint n) {
> continuari[(n+2)/(n+1)](n);
> printf("%d ", n);
> }
>
Foarte bine! La asa ceva ma refeream. Astea erau solutiile mele:
1) Cu operatori booleeni:
#include <stdio.h>
#include <stdlib.h>
void doreturn(int n);
void doprint(int n);
int iszero(int n) {
return !n;
}
void (*funcp[2])(int n) = {doprint, doreturn};
void doreturn(int n) {
return;
}
void doprint(int n) {
funcp[iszero(n)](n-1);
printf("%d ", n);
}
int main (int argc, char **argv) {
doprint(atoi(argv[1]));
printf("\n");
}
2) Fara operatori booleeni:
#include <stdio.h>
#include <stdlib.h>
void doreturn(int i, int n);
void doprint(int i, int n);
int isequal(int i, int n) {
return (i + 1) / (n + 1);
}
void (*funcp[2])(int i, int n) = {doprint, doreturn};
void doreturn(int i, int n) {
return;
}
void doprint(int i, int n) {
printf("%d ", i);
funcp[isequal(i, n)](i + 1, n);
}
int main (int argc, char **argv) {
doprint(0, atoi(argv[1]));
printf("\n");
}
Le-am testat pe amandoua cu gcc sub Linux.
--
Radu
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--
Radu
Dar pentru un joc cu operatori se poate face:
int tern(int x, int y, int z) {
static int v[] = {~0, 0};
return (v[!x] & y) | (v[!!x] & z);
}
----- Original Message ----
From: Radu Cornea <em...@radu.net>
To: mens...@googlegroups.com
Sent: Wednesday, May 9, 2007 1:44:01 AM
Subject: [mens sana] Re: functie in C
[...]
Inca o problema asemanatoare:
Implementati operatorul x ? y : z intr-o functie int cond(int x, int
y, int z); folosind doar ~, !, ^, &, +, |, <<, >> fara if , bucle sau
altceva, folosind doar operatorii de mai sus. Functia returneaza fie y
fie z, depinzand de valoarea lui x.
Extra puncte pentru o solutie pe o singura linie, fara a folosi
variabile suplimentare.
--
Radu
____________________________________________________________________________________
We won't tell. Get more on shows you hate to love
(and love to hate): Yahoo! TV's Guilty Pleasures list.
http://tv.yahoo.com/collections/265
Functia nu e importanta, poti sa-l implementezi intr-o singura linie.
Ai inceput bine, poti face ceva sa scapi de variabila statica? :-)
--
Radu
Cosmin
----- Original Message ----
From: Radu Cornea <em...@radu.net>
[...]Functia nu e importanta, poti sa-l implementezi intr-o singura linie.
Ai inceput bine, poti face ceva sa scapi de variabila statica? :-)
--
Radu
____________________________________________________________________________________
Finding fabulous fares is fun.
Let Yahoo! FareChase search your favorite travel sites to find flight and hotel bargains.
http://farechase.yahoo.com/promo-generic-14795097
--
Radu
----- Original Message ----
From: Radu Cornea <em...@radu.net>
To: mens...@googlegroups.com
Sent: Wednesday, May 9, 2007 10:20:37 AM
Subject: [mens sana] Re: functie in C
--
Radu
____________________________________________________________________________________
Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.
http://autos.yahoo.com/new_cars.html
--
Radu
:D
--
Radu
--
Radu
Rares