Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#211
Cita de: ivancea96 en 12 Abril 2014, 15:27 PM
Pero él pidió el uso de while.

Si y en mi primer mensaje se lo di con un while. Lo otro ha sido una curiosidad matemática. ;)

¡¡¡¡ Saluditos! ..... !!!!


#212
Teniendo en cuenta que la suma de los pares es la suma de los términos de una progresión aritmética: 2, 4,6, 8, 10, 12.......donde el término general es:

an=a1+(n-1)*d, donde d=2

se puede aplicar:

Sn=(a1+an)*n/2=(2+2+(n-1)*2)*n/2=

=(4+2*n-2)*n/2=)(2+2*n)*n/2=(n+1)*n ==> Sn=n*(n+1)

De donde sale la curiosa propiedad que mencioné en mi mensaje anterior. Por ejemplo, empezando desde 2, la suma de los cinco primeros pares es 5*6=30.

Claro que si empezamos contando, y sumando, los pares desde 0,es decir 0,2,4,6,8,... entonces queda la fórmula anterior queda como:

Sn=n*(n-1)

Y la suma de los cinco primeros pares es 5*4=20.

¡¡¡¡ Saluditos! ..... !!!!



#213
* El inicializar las variables es el primer paso:

Código (cpp) [Seleccionar]
int i=0,N=2,Num,Suma=0;

* N=2 que incrementando de dos en dos irán dando los pares a sumar a suma.

* una variable i para ir contando los términos que se toman hasta Num.

Con ello el while te quedaría:


Código (cpp) [Seleccionar]
while (i<Num) {
     cout<<N<<endl;//esto obra, es para ver los pares que salen
     Suma+=N;
     N+=2;
     i++;
}


El resto O.K.

Como cosa curiosa la suma es el número de pares pedido por el mismo más uno, te podrías ahorrar el while:


Código (cpp) [Seleccionar]
int main()
{
  int i=0,N=2,Num,Suma=0;
  cout<<"Ingrese un valor numerico: ";
  cin>>Num;
  cout<<endl<<"La suma de los primeros "<<Num<<" numeros impares es igual a: "      <<Num*(Num+1)<<endl;
  system ("PAUSE");
  return EXIT_SUCCESS;
}


¡¡¡¡ Saluditos! ..... !!!!


#214
Cita de: Drewermerc en 11 Abril 2014, 06:17 AM
....................................
si es esa tabla nada mas que yo la habia encontradocon los simbolos para ya no leer y  rapido identificarlos con la simbologia pero gracias me servira.



Al final de la página encuentras el enlace a los 127 primeros caracteres o tabla no extendida de ASCII.
#215
Programación C/C++ / Re: Duda EOF
11 Abril 2014, 21:25 PM
Cita de: pedroedlp en 11 Abril 2014, 21:19 PM

muchas gracias


De nada campeón. Y espero que alguien más lucido nos explique el por qué del comportamiento anómalo de len en el while.

¡¡¡¡ Saluditos! ..... !!!!


#216
Cita de: pedroedlp en 11 Abril 2014, 19:55 PM
pero si vos me decis que en ese puntero se almacena la direccion de la cadena "Hola como te va", porque cuando quiero imprimir la cadena no se pone el astarisco?



    char *cadena = "Hola como te va";
    printf("%s", cadena);




Porque el puntero apunta al primer caracter de la cadena, ni más ni menos. Otra cosa es la cadena entera.

Puedes comprobarlo con:


Código (cpp) [Seleccionar]
printf("%c", *cadena);

Citar
H

¿Ves como apunta al primer caracter?. Ya si quieres la cadena entera usas cadena sin el asterisco inicial y, como cadena que es, con el formato %s en el printf.

¡¡¡¡ Saluditos! ..... !!!!


#217
Programación C/C++ / Re: Duda EOF
11 Abril 2014, 21:00 PM
Cita de: pedroedlp en 11 Abril 2014, 19:50 PM
perdon, pero no me funciona

Funcionar, lo que se dice funcionar, funciona. Otra cosa es que los resultados sean los previstos, que no lo son.

Además de declarar main como int inicializo max a cero, que no lo estaba y la salida poniendo un printf justito después del while:


Código (cpp) [Seleccionar]
printf("len=%d \n", len);

Citar
123
len=1
12345
len=1
1234567
len=1
12
len=1
^Z
123

Process returned 0 (0x0)


Al parecer la variable len no pilla el retorno de la función, al menos dentro del while ¿?. :huh:

En cambio si la sacamos del while funciona perfecto. Lo he ajustado para que al entrar un enter solitario, sin nada en la linea, se acabe la ejecución sin así tener que recurrir al CTR-Z:


Citar
123
len=4
max=4
12345
len=6
max=6
123456789
len=10
max=10
3215
len=5
32
len=3
1
len=2
<==ESTO ES UN ENTER SOLITARIO
len=1

Cadena mas larga: 123456789

Process returned 0 (0x0)


Código (cpp) [Seleccionar]
#include <stdio.h>

#define MAXLINE 1000

int getline(char line[], int maxline);

void copy(char to[], char from[]);

int main(){
    int len=2, max=0;
    char line[MAXLINE];
    char longest[MAXLINE];
    while (len>1){
        len=getline(line, MAXLINE);
        printf("len=%d   ", len);
        if(len > max){
            max = len;
            printf("max=%d\n", max);
            copy(longest, line);
            }
        }
    if(max > 0)
        printf("\nCadena mas larga: %s", longest);
    return 0;
}

int getline(char s[], int lim){
    int c, i;
    for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if(c == '\n'){
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    printf("%d\n", i);
    return i;
}

void copy(char to[], char from[]){
    int i;
    i=0;
    while((to[i] = from[i]) != '\0'){
        ++i;
    }
}


Aún no le encuentro justificación al comportamiento de len dentro del while. :silbar:

¡¡¡¡ Saluditos! ..... !!!!





#218
En este enlace tienes multitud de opciones. Aunque son para rombos, en tu caso es más sencillo, sólo tomas la mitad.

¡¡¡¡ Saluditos! ..... !!!!



EDITO: En tu caso, para no variar mucho lo que tienes, te vale:

Código (cpp) [Seleccionar]

..................
scanf ...............
for (k=1;k<=altura;k++)
{
 for (j=1;j<=altura-k;j++)
   printf(" ");
 for(j=1;j<=2*k-1;j++)
   if (j%2==0)
     printf(" ");
   else
     printf("*");
   printf("\n");
}
system("PAUSE");


Código (cpp) [Seleccionar]

        *
       * *
      * * *
     * * * *
    * * * * *
   * * * * * *
  * * * * * * *
 * * * * * * * *
* * * * * * * * *
* * * * * * * * * *
#219

Te funciona sin problemas:

Código (cpp) [Seleccionar]
i = k = -5;
i = i MAS k;


seria:-5+(-5)=-10  O.K


En tu código y con macros sería:

Código (cpp) [Seleccionar]
case'+':resultado = atoi(aux[0]) MAS atoi(aux[1]);
  break;
case'-':resultado = atoi(aux[0]) MENOS atoi(aux[1]);
................................................


¡¡¡¡ Saluditos! ..... !!!!



#220
Cita de: David8 en 10 Abril 2014, 20:50 PM
Funciona!!! Muchísimas gracias.
Aunque no comprendo muy bien lo de punteros a punteros, pero eso es cuestión de estudiarlo mejor.

Ya que me lo dijiste, ¿es mejor hacer int notasEnteras[alumnos]; como un array dinámico? Sólo lo uso para almacenar enteros. (perdona mi ignorancia)

Un saludo

Es otra alternativa a la que puede ponerse el pero de que algún compilador no la acepte. En general la uso para matrices normalitas. Si el tamaño es importante uso asignación dinámica de memoria.

Salu2!.