Operación matemática que resuelva esto (MUY simple)

Un procedimiento matemático que de todos los números menores que 50 y no divisibles por 3? (Que no sea hacerlo número por número, claro).

Saludos.
∑[(i=0)^50]i- ∑[(j=1)^16](j*3)

No sé si se entenderá
Galdos escribió:∑[(i=0)^50]i- ∑[(j=1)^16](j*3)

No sé si se entenderá

WTF!!! XD XD XD
Creo que Pollo PS2 se está refiriendo a los multiplicadores de Lagrange... ¿puede ser?
juanpedro79 escribió:
Galdos escribió:∑[(i=0)^50]i- ∑[(j=1)^16](j*3)

No sé si se entenderá

WTF!!! XD XD XD


mas o menos: (lista de numeros del 1 al 50) quitando (la lista de numeros desde 1 a 50/3, multiplicando cada uno por 3)
Uffffff no, no lo entiendo para nada :S

Es que es un programa a base de bucles que he de hacer en C++, así que seguramente no sea eso.

Bueno, pues a investigar [Ooooo]

Gracias a todos!
un algoritmo general (la implementacion en c++ te la haces tu) seria algo asi:

para i=1 hasta 50 hacer

empezar
si el resto de i entre 3 es distinto de 0

entonces escribir i

terminar

Aunque esto muy matemático no es
Sin probarlo, digo yo que esto funcionará:

#include "stdio.h"
void main(){
for(int i = 0; i<50; i++)
    if(!(i%3)) printf("%d",&i);
}


EDIT: Es lo mismo que ha puesto el post anterior pero en C en vez de en pseudocódigo.
kbks escribió:Sin probarlo, digo yo que esto funcionará:

#include "stdio.h"
void main(){
for(int i = 0; i<50; i++)
    if(!(i%3)) printf("%d",&i);
}


EDIT: Es lo mismo que ha puesto el post anterior pero en C en vez de en pseudocódigo.



Sisi... pero el pide que no sea número por número. Y eso es precisamente lo que hacen vuestros programas ;)
En ese caso:

#include <stdio.h>
void main(void){
for (int i=1;int<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Debería funcionar también, y no se pasa por todos los números, ¿no? XD

Joer, ya hace un año que no doy C. ¿Vale eso de dar saltos de tres en bucle? Sí, ¿no? xDD
d123 escribió:En ese caso:

#include <stdio.h>
void main(void){
for (int i=1;int<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Debería funcionar también, y no se pasa por todos los números, ¿no? XD

Joer, ya hace un año que no doy C. ¿Vale eso de dar saltos de tres en bucle? Sí, ¿no? xDD


No me había fijado en lo de numero a numero.

De esa manera esta bien, si se pueden usar pasos mayores de 1, que no me acuerdo (no es algo que haya tenido que usar nunca)
alben escribió:
d123 escribió:En ese caso:

#include <stdio.h>
void main(void){
for (int i=1;int<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Debería funcionar también, y no se pasa por todos los números, ¿no? XD

Joer, ya hace un año que no doy C. ¿Vale eso de dar saltos de tres en bucle? Sí, ¿no? xDD


No me había fijado en lo de numero a numero.

De esa manera esta bien, si se pueden usar pasos mayores de 1, que no me acuerdo (no es algo que haya tenido que usar nunca)

Por supuesto que se pueden dar pasos mayores que 1. Puedes dar los pasos como quieras, de -1, de 1, de 0 o de 20.

El programa que ha puesto d123 es correcto en el algoritmo pero incorrecto en la sintaxis (2 tonterías, como dice hace tiempo que no ve C):
1) En C no puedes declarar una variable en el bucle, eso es de C++
2) La comprobación la estás haciendo contra un tipo y no contra una variable.

Quedaría así:
#include <stdio.h>
void main(void){
int i;
for (i=1;i<50;i = i+3)
      printf("%d %d ", i, i+1);
}
d123 escribió:En ese caso:

#include <stdio.h>
void main(void){
for (int i=1;int<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Debería funcionar también, y no se pasa por todos los números, ¿no? XD

Joer, ya hace un año que no doy C. ¿Vale eso de dar saltos de tres en bucle? Sí, ¿no? xDD



Te saltas numeros ...
lo q yo no entiendo es eso de "q no sea numero por numero"... como quieres hallarlos si no? todos de golpe?

a mi solo se me ocurre el for preguntando por todos los numeros menores q 50, y si su modulo de 3 es 0, pues fuera, y si no, pues bien
Supongo que se referira un estilo como el algoritmo para encontrar numeros primos, donde para verificar si un numero es primo se debe de demostrar que solo es divisible por el mismo y por la unidad, por eso se deverian provar todos los divisores de n desde n-1 hasta 1. Esto tendria coste lineal O(n)

Tambien puedes hacerlo empezando por la mitad, si no encuentras un divisor hasta la mitad ya no lo encontraras. O(n/2) = O(n)

Tambien puedes hacerlo hasta la raiz quadrada de n (n^1/2). En este caso tiene orden log O(log n).

Donde encuentras las soluciones sin tratar todos los casos.
Que no sea yendo numero por numero?

Solo Chuck Norris podría hacerlo.
d123 escribió:En ese caso:

#include <stdio.h>
void main(void){
for (int i=1;int<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Debería funcionar también, y no se pasa por todos los números, ¿no? XD

Joer, ya hace un año que no doy C. ¿Vale eso de dar saltos de tres en bucle? Sí, ¿no? xDD


Si, si vale. En un for puedes meter cualquier expresión, incluso expresiones sin lógica que funcionará. Es mas, incluso for(;;) compila.

Por cierto, i+=3.
jorcoval escribió:
alben escribió:
d123 escribió:En ese caso:

#include <stdio.h>
void main(void){
for (int i=1;int<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Debería funcionar también, y no se pasa por todos los números, ¿no? XD

Joer, ya hace un año que no doy C. ¿Vale eso de dar saltos de tres en bucle? Sí, ¿no? xDD


No me había fijado en lo de numero a numero.

De esa manera esta bien, si se pueden usar pasos mayores de 1, que no me acuerdo (no es algo que haya tenido que usar nunca)

Por supuesto que se pueden dar pasos mayores que 1. Puedes dar los pasos como quieras, de -1, de 1, de 0 o de 20.

El programa que ha puesto d123 es correcto en el algoritmo pero incorrecto en la sintaxis (2 tonterías, como dice hace tiempo que no ve C):
1) En C no puedes declarar una variable en el bucle, eso es de C++
2) La comprobación la estás haciendo contra un tipo y no contra una variable.

Quedaría así:
#include <stdio.h>
void main(void){
int i;
for (i=1;i<50;i = i+3)
      printf("%d %d ", i, i+1);
}



Ese algoritmo no vale, pide todos los números que NO sean divisibles por 3.

P.D.: Lo que pide sin recorrer número por número es imposible.
Sí, ya me lo imaginaba que no era posible, ya que al hacer un bucle en C++ hace varias operaciones.

Saludos y gracias, ya no hace falta que discutáis más jejeje
paliyoes escribió:
#include <stdio.h>
void main(void){
int i;
for (i=1;i<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Ese algoritmo no vale, pide todos los números que NO sean divisibles por 3.

P.D.: Lo que pide sin recorrer número por número es imposible.

Y son esos los que devuelve.

1 2
4 5
7 8
10 11
13 14
16 17
19 20
22 23
25 26
28 29
31 32
34 35
37 38
40 41
43 44
46 47
49 50
jorcoval escribió:
paliyoes escribió:
#include <stdio.h>
void main(void){
int i;
for (i=1;i<50;i = i+3)
      printf("%d %d ", i, i+1);
}


Ese algoritmo no vale, pide todos los números que NO sean divisibles por 3.

P.D.: Lo que pide sin recorrer número por número es imposible.

Y son esos los que devuelve.

1 2
4 5
7 8
10 11
13 14
16 17
19 20
22 23
25 26
28 29
31 32
34 35
37 38
40 41
43 44
46 47
49 50


Cierto, perdona que no vi el i+1 dentro del printf :).

Rojos saludos.
No pasa nada ;) Hasta el código más pequeño es un lío si no lo has programado tú mismo
jorcoval escribió:No pasa nada ;) Hasta el código más pequeño es un lío si no lo has programado tú mismo


Eso nos pasa por no verificarlos XD .

Rojos saludos.
Ya decía yo xD... lo de que no se podía declarar una variable dentro del bucle no lo sabía. Lo de comparar con un "int" directamente fue porque no me di cuenta :p

Por cierto, por cojones el algoritmo tiene que recorrer los números que no son divisibles, ya que los tiene que escribir. Esos son los únicos que recorre el que he puesto (creo).
La función main siempre debe devolver int, nunca void.

[/offtopic]
alsaan escribió:La función main siempre debe devolver int, nunca void.

[/offtopic]


Depende del compilador y del SO en el que estés muchacho.
alsaan escribió:La función main siempre debe devolver int, nunca void.

[/offtopic]

mis mains en C siempre han sido void. depende de lo q vayas a hacer... para q quieres q te devuelva un int si no vas a hacer nada con el?
Una cosa es que os compile y os funcione, pero main debe siempre devolver int, aunque no se use.
En algunos compiladores os dará error, en otros sólo una alerta, pero está mal en todos.
El_senor_oscuro escribió:Una cosa es que os compile y os funcione, pero main debe siempre devolver int, aunque no se use.
En algunos compiladores os dará error, en otros sólo una alerta, pero está mal en todos.

y en otros no dice absolutamente nada. cogete el compilador de C/C++ de microsoft, a ver si te dice algo por poner un void en el main...
Darxen escribió:
El_senor_oscuro escribió:Una cosa es que os compile y os funcione, pero main debe siempre devolver int, aunque no se use.
En algunos compiladores os dará error, en otros sólo una alerta, pero está mal en todos.

y en otros no dice absolutamente nada. cogete el compilador de C/C++ de microsoft, a ver si te dice algo por poner un void en el main...


No en ANSI/C, ten en cuenta que los compiladores no tienen por qué cumplir exactamente el estándar, es como el IE6 y las CSS.

Rojos saludos.
paliyoes escribió:
Darxen escribió:
El_senor_oscuro escribió:Una cosa es que os compile y os funcione, pero main debe siempre devolver int, aunque no se use.
En algunos compiladores os dará error, en otros sólo una alerta, pero está mal en todos.

y en otros no dice absolutamente nada. cogete el compilador de C/C++ de microsoft, a ver si te dice algo por poner un void en el main...


No en ANSI/C, ten en cuenta que los compiladores no tienen por qué cumplir exactamente el estándar, es como el IE6 y las CSS.

Rojos saludos.

vale, pero por eso mismo no es obligatorio q un main siempre, en todos los casos, tenga q ir con un int
Galdos escribió:∑[(i=0)^50]i- ∑[(j=1)^16](j*3)

No sé si se entenderá


Eso lo plantas tal cual en el Mathematica, a ver que tal...
Darxen escribió:vale, pero por eso mismo no es obligatorio q un main siempre, en todos los casos, tenga q ir con un int


Si hablamos de C como lenguaje si, es obligatorio siempre (está en el estandard). Otra cosa es que el Visual Studio es un compilador de C++ y como tal retorna 0 siempre que el programa llegue a la llave de cerrar del main sin tener que hacerlo tu.
kbks escribió:
Darxen escribió:vale, pero por eso mismo no es obligatorio q un main siempre, en todos los casos, tenga q ir con un int


Si hablamos de C como lenguaje si, es obligatorio siempre (está en el estandard). Otra cosa es que el Visual Studio es un compilador de C++ y como tal retorna 0 siempre que el programa llegue a la llave de cerrar del main sin tener que hacerlo tu.

pues yo nunca he puesto nada... si q es cierto q al acabar un programa me salia un mensaje q ponia algo y luego un 0 (menos cuando petaba q me devolvia 255)
aun asi lo veo absurdo, para q devuelves un entero si no lo vas a usar para nada?
Darxen escribió:
kbks escribió:
Darxen escribió:vale, pero por eso mismo no es obligatorio q un main siempre, en todos los casos, tenga q ir con un int


Si hablamos de C como lenguaje si, es obligatorio siempre (está en el estandard). Otra cosa es que el Visual Studio es un compilador de C++ y como tal retorna 0 siempre que el programa llegue a la llave de cerrar del main sin tener que hacerlo tu.

pues yo nunca he puesto nada... si q es cierto q al acabar un programa me salia un mensaje q ponia algo y luego un 0 (menos cuando petaba q me devolvia 255)
aun asi lo veo absurdo, para q devuelves un entero si no lo vas a usar para nada?

Por ejemplo la consola de linux. Un programa devuelve 0 (true) si todo ha ido bien y !=0 (false) en caso contrario.
Si haces un programa que no devuelve nada ¿como sabe la consola que dicho programa se ha ejecutado correctamente?
jorcoval escribió:Por ejemplo la consola de linux. Un programa devuelve 0 (true) si todo ha ido bien y !=0 (false) en caso contrario.
Si haces un programa que no devuelve nada ¿como sabe la consola que dicho programa se ha ejecutado correctamente?

nunca he programado en linux. pero por ejemplo, visual basic .net no devuelve nada (o eso parece) y funciona perfectamente... cuando no funciona, pues pega la excepcion y ya esta
Sí, pero si partimos de la base que C se desarrolló a principios de los 70 bajo UNIX...
Todo esto se soluciona haciendolo en Java [poraki]

public class Main
{
    public static void main(String[] args)
    {
        for (int i= 1; i <50; i++)
        {
            if (i % 3 != 0)
            {
                System.out.println("El número: " + i + " No es divisible por 3");
            }
        }
    }
}


O para los que les gusta agrupar todo
public class Main {
    public static void main(String[] args) {
        for (int i= 1; i <50; i++)
            if (i % 3 != 0)           
                System.out.println("El número: " + i + " No es divisible por 3");     
    }
}
ODIO a la gente que programa de la segunda manera expuesta por daniel_5 !!
Moki_X escribió:ODIO a la gente que programa de la segunda manera expuesta por daniel_5 !!

yo tambien te quiero :P

yo programo asi, con la salvedad de q, aunq el IF solo tenga 1 instruccion, si q pongo la llave
Yo programo de la primera manera :P me parece mas claro, aunque el standard diga que se debe programar de la segunda [carcajad]
daniel_5 escribió:Yo programo de la primera manera :P me parece mas claro, aunque el standard diga que se debe programar de la segunda [carcajad]

pues a mi me parece mas clara la 2ª, no se... la 1ª me parece como q esta todo desperdigado por ahi y me acabo liando.

PD: y aqui en el curro no veais q lio... el proyecto esta hecho por varias personas, y como aqui cada uno programa como quiere... hay trozos de codigo hechos de una forma y otros hechos de otra, y esto si q es un caos para aclararse
Eso me pasa a mi con la segunda [qmparto] con los IDEs como te marcan el empiece y final de las llaves, pues si no están una debajo de la otra, me lio, es cuestión de gustos, a mi me gusta mas la primera, por que al meter mas lineas localizo mas rápido donde van.

Mirad esto XD

http://java.sun.com/docs/codeconv/
http://paludis.pioto.org/
Darxen escribió:
jorcoval escribió:Por ejemplo la consola de linux. Un programa devuelve 0 (true) si todo ha ido bien y !=0 (false) en caso contrario.
Si haces un programa que no devuelve nada ¿como sabe la consola que dicho programa se ha ejecutado correctamente?

nunca he programado en linux. pero por ejemplo, visual basic .net no devuelve nada (o eso parece) y funciona perfectamente... cuando no funciona, pues pega la excepcion y ya esta


Si te vas a .net estamos hablando de código semiinterpretado, así que no tiene nada que ver, ademas de que es algo relativamente nuevo comparado con C. En C se devuleve un entero tanto en linux como en windows, ya que windows también comprueba la correcta ejecución de un programa mediante comparandolo con 0.

PD: Yo tambien programo al estilo C++ (la primera), el estilo java no me gusta excepto para programitas pequeños para pruebas.
kbks escribió:
PD: Yo tambien programo al estilo C++ (la primera), el estilo java no me gusta excepto para programitas pequeños para pruebas.


No es estilo java, es como se debe de programar :P
daniel_5 escribió:
kbks escribió:
PD: Yo tambien programo al estilo C++ (la primera), el estilo java no me gusta excepto para programitas pequeños para pruebas.


No es estilo java, es como se debe de programar :P


Las llaves de abrir arriba es parte del estilo "oficial" de java. Si te fijas solamente los IDEs de java te crean el código de esta manera mientras que en C++ y C# te crean las llaves de la manera tradicional.
Dejaros de tanto C/C++ y Java y pasaros a Ruby hombre :P (Ahora con JRuby mola más :P).

Rojos saludos.
paliyoes escribió:Dejaros de tanto C/C++ y Java y pasaros a Ruby hombre :P (Ahora con JRuby mola más :P).

Rojos saludos.

ruby... mmm... me suena, es un lenguaje de script? es q me suena q se usaba en el RPG maker para crear scripts
Darxen escribió:ruby... mmm... me suena, es un lenguaje de script? es q me suena q se usaba en el RPG maker para crear scripts


Sí, un lenguaje de script que tiene algunas cosas muy chulas como las clausuras. Ejemplo:

["a","b","c"].each { |x| puts x}

Con eso recorres todo el vector e imprimes en un plis ;).

Rojos saludos.
Python mola más: sin llaves. XD

Bueno, ni idea de cual "mola" más. Pero me quedo, de momento, con JAVA.
54 respuestas
1, 2