[Multi] Trivial programacion xD

Hola [chiu]
A modo de pasatiempo (como si de un mini-sudoku se tratase X-D) os propongo cada poco tiempo un problema de logica, para que todo el que quiera lo resuelva y asi poder ver las soluciones de cada uno, cosa que nos vendra bien para aprender, comparar y pensar un poco [+risas].

Principalmente estamos hablando de C puro y duro, el cual es la base de la mayoria de los juegos homebrew. Pero tambien seran bienvenidos todos los demas lenguajes, para que todos aprendamos o nos interesemos sobre alguno de ellos.

Para responder hacer uso de [ code].
Y he pensando que no es nada importante el puntuar la rapidez ni nada, sino el proponer pequeños retos y el que todos podamos aprender algo de las respuestas planteadas.

1.Problem..
Dar valor a dos variables para despues intercambiar el valor de las mismas, sin hacer uso de una tercera variable.
Soluciones:
pjexposito 'Pascal'
var
  a,b:double;

begin
  // Se define A y B
  a:=415898;
  b:=3;

  a:=a*b;
  b:= a/b;
  a:= a/b;

  // Los valores han cambiado y se muestra A y B
  showmessage('a es '+floattostr(a)+' y b es '+floattostr(b));

end;
BlackSith 'C'
/*Declaramos*/
int a = 4, b = 6;

/*Intercambiamos*/
a += b;
b = a-b;
a -= b;
KFR 'C'
main()
{
int num1,num2;

printf("Introduce el primer numero:  ");
scanf("%d",&num1);
printf("Introduce el segundo numero:  ");
scanf("%d",&num2);

num1=num1+num2;
num2=num1-num2;
num1=num1-num2;

printf("El 1er numero vale ahora %d\n",num1);
printf("El 2do numero vale ahora %d\n\n",num2);
}
PauSaDRaMaTiCa 'C'
int a=10,b=20;
a ^= b^=a^=b;
2.Problem..
Hacer un programa que sume n (cantidad metida por teclado) numeros. Ejem... 5->1+2+3+4+5=15
Primer :p

Pongo el código en Pascal (Delphi)


var
  a,b:double;

begin
  // Se define A y B
  a:=415898;
  b:=3;

  a:=a*b;
  b:= a/b;
  a:= a/b;

  // Los valores han cambiado y se muestra A y B
  showmessage('a es '+floattostr(a)+' y b es '+floattostr(b));

end;




Un saludo
pjexposito, se me ha adelantado xD. De todas maneras creo que se podria depurar algo mas al utilizar sumas y restas en vez de multiplicaciones y divisiones, ya que no seria necesario declarar los numeros como "double"s, sino como "int"s

Esta en C
/*Declaramos*/
int a = 4, b = 6;

/*Intercambiamos*/
a += b;
b = a-b;
a -= b;

Salu2
quien tubiera tiempo para estas cosas ;)
Me parece una gran idea este hilo

Estoy con BlackSith con sumas y ya esta :)
Yo en concreto lo he planteado dando la opcion al usuario de elegir los numeros y de forma identica a BlackSith pero un poco mas largo, y de paso agradecerle su forma de hacerlo ya que no la conocia y es practica para no repetir muchas veces lo mismo.
main()
{
int num1,num2;

printf("Introduce el primer numero:  ");
scanf("%d",&num1);
printf("Introduce el segundo numero:  ");
scanf("%d",&num2);

num1=num1+num2;
num2=num1-num2;
num1=num1-num2;

printf("El 1er numero vale ahora %d\n",num1);
printf("El 2do numero vale ahora %d\n\n",num2);
}
int a=10,b=20;
a ^= b^=a^=b;
y sin problemas con desbordamientos.

Fuente:http://leus.epublish.cl/articles/epublish_20021021165815.html
PauSaDRaMaTiCa seria de agradecer que explicases ese metodo [oki]
Ese metodo se aprovecha de las propiedades del EXOR (or exclusivo)
este devuelve 1 cuando los bits a comparar son distintos y 0 cuando son iguales.
Paso a paso
a = 6 b = 4--> a = 0110 b=0100
a ^= b^=a^=b-->a = a^b
0110
0100
------
0010 ->se asigna a a
a^=b^=a--> b = a^b
0100
0010
------
0110 -> se asigna a b y ya hemos hecho el primer intercambio
a^=b --> a = a^b
0010
0110
------
0100 -> se asigna a a y ya hemos hecho el intercambio
Muchas gracias PauSaDRaMaTiCa, por explicar ese metodo, y ya de paso ayudarme a comprender como manejar el EXOR [boing]
Salu2
#include

int main () {
int a,b;
printf("Introduce valor\n");
scanf("%d",&a);
b=(1+a)*a/2;
printf("Sumatorio: %d",b);
return 0;
}
Copy/Paste de la propuesta de kYp con modificaciones.

#include

int main () {
int a;
printf("Introduce valor\n");
scanf("%d",&a);
a=( (a%2)?a++:++a )*(a>>1);
printf("Sumatorio: %d", a);
return 0;
}
12 respuestas