elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 80
1  Programación / Programación C/C++ / Re: ayuda compañeros, no se porque pasa esto, soy principiante en: 16 Abril 2014, 22:06
Si dejas un espacio en blanco antes del segundo scanf se soluciona ese problema.

Por cierrto, te falta la librería <cstdio> y en el segundo scanf es %f o %g, no &f.

Te dejo el código corregido:


Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstdio>
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9.      int a;
  10.      float b;
  11.  
  12.      printf("introduzca un numero entero \t\n");
  13.      scanf("%d", &a);
  14.      printf("el numero que introujo es %d \t\n", a);
  15.  
  16.      printf("introduzca un numero decimal \t\n");
  17.      scanf(" %f", &b);
  18.      printf("el numero que introujo es %g \t\n", b);
  19.  
  20.      printf("Los numero que introdujo son %d y %g\n", a, b);
  21.  
  22.    system("PAUSE");
  23.    return EXIT_SUCCESS;
  24. }

Y es una mezcla de C y C++ no muy conveniente.

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


2  Programación / Programación C/C++ / Re: validacion de cadenas en c++ en: 14 Abril 2014, 19:08
Sólo unos pequeños detalles previos:

* <iostream> sin el .h

* <cstring> sin el .h

* <cstdio> sin el .h

* main es int y como tal ha de tener su correspondiente return.

* contletras+1 no hace nada, sólo suma 1 a contletraspero no lo almacena en el mismo.

Esto último hace que la flauta haya sonado ya que *buffer siempre apuntará al primer caracter de la cadena buffer y como contletras siempre es cero, ya que no se incrementa, pues da la casualidad de que siempre apuntará al último caracter introducido y el código aparenta funcionar bien.

Pero supongamos que te has dado cuenta y que corriges la expresión contletras+1  por la correcta de contletras++, ¡horror!, ahora sólo sale el primer caracter que escribes, intentas meter leosansan y en pantalla sólo aparece lllllllllll. Curioso que al corregir un error nos demos cuenta del otro error, el de que el return ahora si funciona y como el contador se incrementa el return devuelve lo que tiene que devolver: el primer caracter.

Don´t worry, be happy!, eso se resuelve haciendo que el return de la función emite devuelva justo el último caracter.

Y para hacerlo bien, lo primero es colocar contletras++ donde debe ir: al comienzo dela función e inicializandolo a -1, porque si lo dejas donde está el return devolvería un valor más allá de donde has llegado a llenar el array bufletras y eso no estaría bien, no no.

Ahora funciona O.K:

Código
  1. #include<conio.h>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5.  
  6. using namespace std;
  7.  
  8. char bufletras[25];
  9. int contletras=-1;
  10. int num, lon;
  11.  
  12. char emite(int numero){
  13.  contletras++;
  14.  bufletras[contletras]=numero;
  15.  return bufletras[contletras];
  16. }
  17. int main(){
  18.  
  19. cout<<"Escriba su nombre: "<<endl;
  20.  do{
  21.  num=getch();
  22. if(num>='a' && num<='z')
  23.      cout<<emite(num);
  24.   else if(num>='A' && num<='Z')
  25.     cout<<emite(num);
  26.   else if(num==0x20)//space
  27.    cout<<emite(num);
  28.    else if(num==0x8)  //de la tecla backspace
  29.      contletras--;
  30.   }while(num!=13); //enter
  31.   cout<< endl<<"Este es su nombre: "<<bufletras;
  32.   return 0;
  33. }

Creo que esto responde a tu otro tema del por qué sólo te imprime en pantalla el primer caracter que introduces pareciendo que getch no hace su función de vaciar su contenido en cada llamada a la misma.

De todas formas, y por si acaso, si la única finalidad de la función era pasar num a char bastaba con usar:


Código
  1. char emite(int numero){
  2.  
  3.   return numero;
  4. }

EDITO: Y ya puestos te activo el backspace para eliminar un caracter introducido por error de la cadena final, que no de la pantalla ya que para ello tendría que hacer uso de gotoxy y no sé si es lo que quieres.:

Código
  1. else if(num==0x8) //de la tecla backspace
  2.  contletras--;

Bueno por si acaso si lo quieras y suponiendo que tu conio.h tiene activada la opcion gotoxy, si no prueba con la conio2.h. Ahora corrige hasta lo que se ve en la pantalla:

Código
  1. else if(num==0x8) { //de la tecla backspace
  2.  gotoxy(contletras+1,2);
  3.  contletras--;
  4. }

o su equivalente en windows.h:

Código
  1. .................
  2. #include <windows.h>
  3. ........................
  4. int gotoxy(int x, int y);
  5. ................................
  6.    else if(num==0x8) { //de la tecla backspace
  7.      gotoxy (contletras,1);
  8.      contletras--;
  9.    }
  10. return 0;
  11. }
  12.  
  13. int gotoxy(int x, int y)
  14. {
  15.   COORD coord;
  16.   HANDLE h_stdout;
  17.   coord.X = x;
  18.   coord.Y = y;
  19.   if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
  20.      return 0;
  21.   if (SetConsoleCursorPosition(h_stdout, coord) == 0)
  22.      return 0;
  23.   return 1;
  24. }



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


3  Programación / Programación C/C++ / Re: Algoritmo: Suma N numeros pares implementando ciclo while en: 12 Abril 2014, 16:07
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! ..... !!!!


4  Programación / Programación C/C++ / Re: Algoritmo: Suma N numeros pares implementando ciclo while en: 12 Abril 2014, 14:59
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! ..... !!!!



5  Programación / Programación C/C++ / Re: Algoritmo: Suma N numeros pares implementando ciclo while en: 11 Abril 2014, 23:18
* El inicializar las variables es el primer paso:

Código
  1. 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
  1. while (i<Num) {
  2.      cout<<N<<endl;//esto obra, es para ver los pares que salen
  3.      Suma+=N;
  4.      N+=2;
  5.      i++;
  6. }
  7.  

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
  1. int main()
  2. {
  3.  int i=0,N=2,Num,Suma=0;
  4.  cout<<"Ingrese un valor numerico: ";
  5.  cin>>Num;
  6.  cout<<endl<<"La suma de los primeros "<<Num<<" numeros impares es igual a: "      <<Num*(Num+1)<<endl;
  7.  system ("PAUSE");
  8.  return EXIT_SUCCESS;
  9. }

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


6  Programación / Programación C/C++ / Re: com imprimir varibles varias veces en: 11 Abril 2014, 21:39
....................................
 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.
7  Programación / Programación C/C++ / Re: Duda EOF en: 11 Abril 2014, 21:25

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! ..... !!!!


8  Programación / Programación C/C++ / Re: Cadenas de caracteres con punteros en: 11 Abril 2014, 21:12
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?

Código:

    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
  1. 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! ..... !!!!


9  Programación / Programación C/C++ / Re: Duda EOF en: 11 Abril 2014, 21:00
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
  1. 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
  1. #include <stdio.h>
  2.  
  3. #define MAXLINE 1000
  4.  
  5. int getline(char line[], int maxline);
  6.  
  7. void copy(char to[], char from[]);
  8.  
  9. int main(){
  10.    int len=2, max=0;
  11.    char line[MAXLINE];
  12.    char longest[MAXLINE];
  13.    while (len>1){
  14.        len=getline(line, MAXLINE);
  15.        printf("len=%d   ", len);
  16.        if(len > max){
  17.            max = len;
  18.            printf("max=%d\n", max);
  19.            copy(longest, line);
  20.            }
  21.        }
  22.    if(max > 0)
  23.        printf("\nCadena mas larga: %s", longest);
  24.    return 0;
  25. }
  26.  
  27. int getline(char s[], int lim){
  28.    int c, i;
  29.    for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
  30.        s[i] = c;
  31.    if(c == '\n'){
  32.        s[i] = c;
  33.        ++i;
  34.    }
  35.    s[i] = '\0';
  36.    printf("%d\n", i);
  37.    return i;
  38. }
  39.  
  40. void copy(char to[], char from[]){
  41.    int i;
  42.    i=0;
  43.    while((to[i] = from[i]) != '\0'){
  44.        ++i;
  45.    }
  46. }

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

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





10  Programación / Programación C/C++ / Re: Piramide de asteriscos en: 11 Abril 2014, 15:47
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
  1. ..................
  2. scanf ...............
  3. for (k=1;k<=altura;k++)
  4. {
  5.  for (j=1;j<=altura-k;j++)
  6.    printf(" ");
  7.  for(j=1;j<=2*k-1;j++)
  8.    if (j%2==0)
  9.      printf(" ");
  10.    else
  11.      printf("*");
  12.    printf("\n");
  13. }
  14. system("PAUSE");

Código
  1.         *
  2.        * *
  3.       * * *
  4.      * * * *
  5.     * * * * *
  6.    * * * * * *
  7.   * * * * * * *
  8.  * * * * * * * *
  9. * * * * * * * * *
  10. * * * * * * * * * *
  11.  
11  Programación / Programación C/C++ / Re: Prioridad y asociatividad de los operadores en C. (Programa propio) en: 11 Abril 2014, 14:25

Te funciona sin problemas:

Código
  1. i = k = -5;
  2. i = i MAS k;
  3.  
  4.  
  5. seria:-5+(-5)=-10  O.K

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

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

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



12  Programación / Programación C/C++ / Re: Ejercicio compila pero no se ejecuta en: 10 Abril 2014, 21:31
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
Código:
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!.
13  Programación / Programación C/C++ / Re: Ejercicio compila pero no se ejecuta en: 10 Abril 2014, 20:26

Todo el mal radica en cómo declaras notas y el char que usas.

Ya que usas array de longitud variable en:


Código
  1. int notasEnteras[alumnos];

no sé por qué no haces lo mismo con notas:

Código
  1. char *notas[alumnos];

Pero si lo quieres hacer con malloc, entonces:

Código
  1. char **notas;
  2. *notas=malloc(alumnos * sizeof (char));

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


14  Programación / Programación C/C++ / Re: com imprimir varibles varias veces en: 10 Abril 2014, 20:01

¿Algo como esto?:

Código
  1. Que numero de veces quieres que se imprima el signo:
  2. 10
  3.  
  4.          # #
  5.         ## ##
  6.        ### ###
  7.       #### ####
  8.      ##### #####
  9.     ###### ######
  10.    ####### #######
  11.   ######## ########
  12.  ######### #########
  13. ########## ##########
  14.  
  15.  

Con un array se simplifican las cosas, basta un for y un printf.... un tanto especial:

Código
  1. ............................
  2. scanf.....sign..............
  3. char signo[sign+1];
  4. for (i = 0; i <= sign; i++)
  5.  signo[i]='#';
  6. signo[i]='\0';
  7. for (i = 0; i <=sign; i++)
  8.  printf("%*c%.*s%*c%.*s\n", sign+1-i, ' ', i, signo, 1, ' ', i, signo);
  9.  

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


Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 80
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines