Scuze daca nu reusesc sa explic calumea problema.
-----
Trebuie sa scieti o functie in C (nu C++) care ia ca argument un
numar, n (intreg si pozitiv). Functia trebuie sa afiseze toate
numerele de la 0 la n. De exemplu, daca n = 5, functia afisaza "0 1 2
3 4 5".
Restrictii:
- nu aveti voie sa folositi bucle: FOR, WHILE, sau DO
- nu aveti voie sa folositi IF, sau "? :"
- nu aveti voie sa folositi SWITCH, sau GOTO
-----
Nu trebuie sa scrieti toata functia, ideea principlala ajunge.
Bafta,
Rares
void fun (int n) {
n > 0 && fun (n-1);
printf ("%d ", n);
}
Salut,
-----
-----
Bafta,
Rares
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
int fun (int n) {
n > 0 && fun (n-1);
return printf ("%d ", n);
Dar si asa, frumoasa idee.
Razvan
-----Original Message-----
From: mens...@googlegroups.com [mailto:mens...@googlegroups.com] On
Behalf Of Cosmin Marian
Sent: Tuesday, May 08, 2007 10:39 AM
To: mens...@googlegroups.com
Subject: [mens sana] Re: functie in C
A se vedea si Kernighan si Ritchie, editia a II-a, p. 39 ;)
Cosmin
Razvan
pai folosesti operatorii logici:
Salut,
-----
-----
Bafta,
Rares
____________________________________________________________________________________
Never miss an email again!
Yahoo! Toolbar alerts you the instant new Mail arrives.
http://tools.search.yahoo.com/toolbar/features/mail/
Rares
Hai sa o facem ceva mai complicata: nu sunt permise nici un fel de
expresii sau blocuri conditionale (if, switch, ?:, scurtcircuit),
bucle (for, while, do) sau salturi (goto, longjmp, setjmp).
Se pot folosi functii ajutatoare, dar nu functii sistem sau de
biblioteca (in afara de printf).
Pentru cei aventurosi niste conditii suplimentare: nu se pot folosi
manipulari de biti, expresii booleene.
--
Radu
Sau vrei practic? :D
Cosmin
----- Original Message ----
From: Radu Cornea <em...@radu.net>
To: mens...@googlegroups.com
Sent: Tuesday, May 8, 2007 8:22:12 PM
Subject: [mens sana] Re: functie in C
--
Radu
____________________________________________________________________________________
Food fight? Enjoy some healthy debate
in the Yahoo! Answers Food & Drink Q&A.
http://answers.yahoo.com/dir/?link=list&sid=396545367
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);
}
----- Original Message ----
From: Radu Cornea <em...@radu.net>
To: mens...@googlegroups.com
Sent: Tuesday, May 8, 2007 8:22:12 PM
Subject: [mens sana] Re: functie in C
On 5/8/07, Rares Vernica <rver...@gmail.com> wrote:
>
> Da, asta e solutia.
>
Hai sa o facem ceva mai complicata: nu sunt permise nici un fel de
expresii sau blocuri conditionale (if, switch, ?:, scurtcircuit),
bucle (for, while, do) sau salturi (goto, longjmp, setjmp).
Se pot folosi functii ajutatoare, dar nu functii sistem sau de
biblioteca (in afara de printf).
Pentru cei aventurosi niste conditii suplimentare: nu se pot folosi
manipulari de biti, expresii booleene.
--
Radu
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
Rares
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
Nu, altfel e prea usor :)
--
Radu