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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 132
441  Programación / Programación C/C++ / Re: Imprimir un patron de asteriscos en: 2 Febrero 2014, 17:41 pm
Te falta reiniciar las variables fila1 y fila2 cada vez que invocas al while del contador.

Pero una forma, creo que más simple, y que produce la salida deseada:


Citar
* * * * * * * *
 *  *  *  *  *  *  *  *
* * * * * * * *
 *  *  *  *  *  *  *  *
* * * * * * * *
 *  *  *  *  *  *  *  *
* * * * * * * *
 *  *  *  *  *  *  *  *

podría ser:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int fila1 = 1;
  6. int fila2 = 1;
  7. int contador = 1;
  8.  
  9. for(contador=1;contador<=4;contador++) {
  10. fila1=fila2=1;
  11. while (fila1 <= 8){
  12. printf("* ");
  13.  
  14. fila1++;
  15. }
  16. printf("\n");
  17. while (fila2 <= 8){
  18. printf(" ");
  19. printf("* ");
  20.  
  21. fila2++;
  22. }
  23. printf("\n");
  24.  
  25. }
  26. return 0;
  27. }
  28.  

Claro que a lo mejor sólo puedes usar while. En este caso valdría:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int fila1 = 1;
  6. int fila2 = 1;
  7. int contador = 1;
  8.  
  9. while (contador<=4) {
  10. fila1=fila2=1;
  11. while (fila1 <= 8){
  12. printf("* ");
  13.  
  14. fila1++;
  15. }
  16. printf("\n");
  17. while (fila2 <= 8){
  18. printf(" ");
  19. printf("* ");
  20.  
  21. fila2++;
  22. }
  23. printf("\n");
  24.      contador++;
  25. }
  26. return 0;
  27. }
  28.  



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




442  Programación / Programación C/C++ / Re: problema con doble punteros en: 27 Enero 2014, 09:42 am

443  Programación / Programación C/C++ / Re: Ayuda con marco en consola en: 27 Enero 2014, 09:11 am
Pregunta rara,rara. :rolleyes:

Supongo que esto es lo que buscas:




El extremo de la línea donde está la frase "La asignación de su ...." se obtiene restando a 79 la longitud de la cadena. Se puede hacer contando a ojo o con strlen.

Código
  1.  
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #include <iomanip>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. int main()
  11. {
  12.    int i;
  13.    system("cls");
  14.    for (int i =0; i <= 79; i++) //Linea superior del marco
  15.      cout << "\xCD";
  16.    for (int i =1; i <= 20; i++){
  17.      if (i==1)
  18.      cout << "\xBA"<< setw(58) << "Esta en el menu de primera Clase"
  19.              << setw(21)<<"\xBA";
  20.      if (i==1)
  21.         cout << "\xBA" <<"La asignacion de su asiento es: "<< setw(47)<< "\xBA";
  22.      if (i>1)
  23.      cout << "\xBA"<< setw(79)<< "\xBA";
  24.      }
  25.    for (int i =0; i <= 79; i++)//Linea inferior del marco
  26.      if (i>59)
  27.        cout << ' ';
  28.    else
  29.      cout << "\xCD";
  30.    cout << ' '<<system("pause");
  31.    return 0;
  32. }
  33.  

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




444  Programación / Programación C/C++ / Re: problema con doble punteros en: 27 Enero 2014, 02:19 am

Pues a mi me corre sin problemas. ¿Qué problema tienes?.

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


445  Programación / Programación C/C++ / Re: Calculadora ayuda en: 26 Enero 2014, 05:18 am

Desactivando los include de Operaciones.h y Operaciones.cpp y poniendo la barra invertida "\" al final de las estrellitas el código funciona correctamente.

¿Podrías concretar menor la duda y/o problema que tienes?


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


446  Programación / Programación C/C++ / Re: Arreglo en C detectado como virus¿¿?? en: 25 Enero 2014, 10:29 am
Hay un mal uso de punteros ahí, estás escribiendo en una zona de la memoria que no deberías, ahora tanto como ser un virus... Por eso no uso antivirus, detecta un montón de amenazas falsas y deja pasar las de verdad. Lo mejor es usar el sentido común.

En fin, el problema es esto:
Código
  1. scanf("%d",&num);

Debería ser:
Código
  1. scanf("%d",&num[i]);

Puesto que tu idea será rellenar casilla a casilla no?

Pues no, no es eso.

En realidad lo tiene puesto. Mira su código con etiquetas Code:


Código
  1. # include <stdio.h>
  2. # include <conio.h>
  3. # include <math.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7. main()
  8.  
  9.  
  10. {
  11.       int num [4];
  12.       int con= 4;
  13.       int i;
  14.       long sum= 0L;
  15.       float prom= 0.0f;
  16.  
  17.       printf("\n\tComo 4 numeros:\n")  ;
  18.           for (i=0; i< con; i++)
  19.           {
  20.             printf("%2d>",i+1);
  21.             scanf("%d",&num[i]);  /*<==AQUI esta puesto el [i] */
  22.               }
  23.          getch();
  24.  
  25.      }
  26.  

Es el problema de no usar las benditas etiquetas Code ya que al encontrarse con [ i], sin el espacio en blanco que he dejado aposta, interpreta el [ i] como la etiqueta de las letras en cursiva. Por eso a partir de ahí las letras del post salen en cursiva.

Por cierto, el código anterior lo he copiado del original del post dándole a citar y copiándolo de ahí.


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





447  Programación / Programación C/C++ / Re: Ejercicio -nivel intermedio- [C] en: 21 Enero 2014, 11:33 am
perdon por este reflote pero he estado volviendo a intentar sacar el ejercicio desde 0 y no hay manera  :rolleyes:

alguien podria explicarme porque este codigo no funciona?, se que debo tener algun error de logica o algo pero no soy capaz de autocorregirme:



Esta vez no me voy a tomar la molestia de explicarte el código: analizalo, estudialo, compara con lo que tú habías puesto y haz lo mismo con lo códigos que anteriormente te habíamos posteado.

 Se trata de aprender, ¿no?. Para ello lo mejor es lo que te indico.

Claro que cuando no has hecho ni *uto caso de las observaciones que te indiqué en el post anterior:

* main es int y requiere un return.

* hay que indentar el código, Si no lo quieres hacer por ti, hazlo por nosotros que es más sencillo de analizar.

* el uso de los printf. Sí, ya sé que en la UNI no te dejan, pero mientras aprendes ponlos y así observarás por ti mismo donde te equivocas. Ya cuando estés suelto podrás pasar, y sólo en principio, de ellos.

* vuelves a poner un if justo después de un for, cuando, como ya te indiqué anteriormente, puedes en este caso ahorrarte el if poniendo la condición en el for.

* por qué poner i<=10000000000 como condición cuando es más sencillo "numero/i!=0", que ya te lo había puesto. Ya que vas dividiendo el número entre potencias de 10, se trata de que cuando dé más pequeño que 10, o sea cero, se paren las divisiones. Además los int no llegan a tantas cifras como ceros tiene el número que has puesto. Es otro tema a estudiar por tu parte, los límites de los números que puedes usar. :silbar:

*¿Por qué en la función cifras=2 como valor para inicializar la variable?. Hay que  calcularlas una a una y desde cifras=0.

*Esto está mal: for(cifra;cifra>1;cifra--). En todo caso sería for(i=*cifrass;i>=0;i--)
 y la suma casi como la tenías: (*sumaa)+=(int)(num/(pow(10,i)));. Fíjate en lo de int, que es hacer un cast y no es otra cosa que forzar a una variable de un tipo, en este caso float por la presencia de pow, a entero, que es lo que corresponde a la suma de cifras. Es como obligar al programa a que redondee los decimales que pudiera originar pow y la división. ;)

*el uso de pow implica que la variable sea float o double y tú la usas con int y claro salen cosas raras.

* y como pow implica el uso de float o double ya no vale % sino la función fmod

* ********

Vamos, que por lo que veo no has estudiado y/o exprimido los códigos anteriores. Así avanzarás a duras penas ..... y lo que es peor, nos aburres y dejaremos de hacerte caso.

* ¿Y ese cambio a punteros?, ¿te dio un flash o un mal aire?. Por si no es así te lo he respetado, modificando tu código justito lo necesario para que funcione y veas por comparación los errores que has cometido. Pero sería más lógico en tu caso, y con los conocimientos que se intuyen tienes, haber usado variables globales y dejarte de punteros. Claro que a lo mejor es lo que pretendías, usar punteros. :rolleyes:

*Es que el final del código, por no hablar del comienzo, no tiene ni pies ni cabeza:


Código
  1. ..............................
  2.  
  3. for(i;i<=10000000000;i=i*10){
  4.    if(numero/i==0) break;
  5.    cifra++;
  6. }
  7. cifrass=&cifra;
  8. for(cifra;cifra>1;cifra--){
  9.    s=numero/(pow(10,cifra));
  10.    s=s+s;
  11. }
  12. cif=cifra;
  13. sumaa=&s+(numero%10);
  14. s=(numero/pow(10,cif));
  15. primeracifraa=&s;
  16. }
  17. .........................
  18.  

* s+s ...¿eso que es?

* uso de la variable cif cuando ya tienes cifras.

* primeracifraa=&s; Si ya habías hecho antes la asociación. :rolleyes:

* ***************

Te dejo una salida del código que te pongo a posteriori sin y con con muchos printf,. Actívalos para que veas lo que el programa hace, que es ni  más ni menos que lo que tú quieres:


Citar

Introduzca un número:22 11 8 132 324 9 2132 6972 6515 0

22 SI cumple la condicion
11 SI cumple la condicion
8 es menor de 10
132 NO cumple la condicion
324 SI cumple la condicion
9 es menor de 10
2132 SI cumple la condicion
6972 SI cumple la condicion
6515 NO cumple la condicion



Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void funcion(int numero, int *cifrass, int *primeracifraa, float *sumaa);
  6.  
  7. int main(){
  8.  int i,numero, cifras=0, primeracifra=0;
  9.  float suma=0;
  10.  int *cifrass=&cifras;
  11.  int *primeracifraa=&primeracifra;
  12.  float *sumaa=&suma;
  13.  printf ("Introduzca un n%cmero:",163);
  14.  fflush (stdout);
  15.  while((scanf("%d", &numero)==1 && numero!= 0 )!=0){
  16.    cifras=0,suma=0;
  17.    if (numero>9){
  18.      funcion (numero, cifrass, primeracifraa, sumaa);
  19.      if(*primeracifraa*((*cifrass)+1)==*sumaa) {
  20.        printf("\n%d SI cumple la condicion",numero);
  21.        fflush(stdout);
  22.      }
  23.      else
  24.      printf("\n%d NO cumple la condicion",numero);
  25.    }
  26.    else
  27.      printf("\n%d es menor de 10",numero);
  28.  }
  29.  return 0;
  30. }
  31.  
  32. void funcion(int numero, int *cifrass, int *primeracifraa, float *sumaa){
  33.  int i,num=numero,cifras=0;
  34.  for(i=10;numero/i!=0;i=i*10)
  35.      (*cifrass)++;
  36.  (*primeracifraa)=numero/ pow(10,*cifrass);
  37.  for(i=*cifrass;i>=0;i--){
  38.    (*sumaa)+=(int)(num/(pow(10,i)));
  39.    num=(int)fmod(num,pow(10,i)) ;
  40.  }
  41. }
  42.  


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>  /*es solo por el system, en realidad esta de mas*/
  3. #include <math.h>
  4.  
  5. void funcion(int numero, int *cifrass, int *primeracifraa, float *sumaa);
  6.  
  7. int main(){
  8.  int i,numero, cifras=0, primeracifra=0;
  9.  float suma=0;
  10.  int *cifrass=&cifras;
  11.  int *primeracifraa=&primeracifra;
  12.  float *sumaa=&suma;
  13.  //printf ("*cifrass= = %d   *primeracifraa=%d   *sumaa=%d\n",*cifrass,*primeracifraa,*sumaa);
  14.  system("pause");*/
  15.  printf ("Introduzca un n%cmero:",163);
  16.  fflush (stdout);
  17.  while((scanf("%d", &numero)==1 && numero!= 0 )!=0){
  18.    //printf ("\nnum=%d",numero);
  19.    cifras=0,suma=0;
  20.    if (numero>9){
  21.      funcion (numero, cifrass, primeracifraa, sumaa);
  22.      if(*primeracifraa*((*cifrass)+1)==*sumaa) {
  23.        printf("\n%d SI cumple la condicion",numero);
  24.        fflush(stdout);
  25.      }
  26.      else
  27.      printf("\n%d NO cumple la condicion",numero);
  28.    }
  29.    else
  30.      printf("\n%d es menor de 10",numero);
  31.  }
  32.  return 0;
  33. }
  34.  
  35. void funcion(int numero, int *cifrass, int *primeracifraa, float *sumaa){
  36.  //puts("\nENTRO");
  37.  //printf ("numero= %d   *cifrass= = %d   *primeracifraa=%d   *sumaa=%d\n",numero,*cifrass,*primeracifraa,*sumaa);
  38.  int i,num=numero,cifras=0;
  39.  //*cifrass=&cifras;
  40.  for(i=10;numero/i!=0;i=i*10){
  41.      (*cifrass)++;
  42.      //printf ("\*cifra=%d   i=%d\n",*cifrass,i);
  43.  }
  44.  //printf ("numero= %d   *cifrass= = %d   *primeracifraa=%d  \n",numero,*cifrass,*primeracifraa);
  45.  (*primeracifraa)=numero/ pow(10,*cifrass);
  46.  //printf ("\*primeracifraa=%d \n",*primeracifraa);system("pause");
  47.  
  48.  for(i=*cifrass;i>=0;i--){
  49.    (*sumaa)+=(int)(num/(pow(10,i)));
  50.    num=fmod(num,pow(10,i)) ;
  51.    //printf ("\nnum=%d   %d   sumaa=%g \n",num,(int) (num/pow(10,i)),*sumaa);system("pause");
  52.  }
  53. }
  54.  

De todas formas, si querías usar punteros tal vez lo que sigue era lo adecuado:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. void funcion(int numero, int *cifras, int *primeracifra, int *suma);
  7.  
  8. int main(){
  9.  int i,numero,cifras=0,suma=0,primeracifra=0;
  10.  printf ("Introduzca un n%cmero:",163);
  11.  fflush (stdout);
  12.  while((scanf("%d", &numero)==1 && numero!= 0 )!=0){
  13.  
  14.    if (numero>9){
  15.      funcion (numero, &cifras, &primeracifra, &suma);
  16.      if(primeracifra*(cifras+1)==suma) {
  17.        printf("\n%d SI cumple la condicion",numero);
  18.        fflush(stdout);
  19.      }
  20.      else
  21.      printf("\n%d NO cumple la condicion",numero);
  22.    }
  23.    else
  24.      printf("\n%d es menor de 10",numero);
  25.  }
  26.  return 0;
  27. }
  28.  
  29. void funcion(int numero, int *cifras, int *primeracifra, int *suma){
  30.  int i,num=numero;
  31.  *cifras=0;*suma=0;*primeracifra=0;
  32.  for(i=10;numero/i!=0;i=i*10)
  33.      (*cifras)++;
  34.  *primeracifra=(int)(numero/ pow(10,*cifras));
  35.  for(i=(*cifras);i>=0;i--){
  36.    *suma+=(int)(numero/ pow(10,i));
  37.    numero=(int)fmod(numero,pow(10,i)) ;
  38.  }
  39. }
  40.  

O si lo quieres con variables globales, cosa que en principio se desaconseja:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int  cifras, primeracifra, suma;
  6.  
  7. void funcion(int numero);
  8.  
  9. int main(){
  10.  int i,numero;
  11.  printf ("Introduzca un n%cmero:",163);
  12.  fflush (stdout);
  13.  while((scanf("%d", &numero)==1 && numero!= 0 )!=0){
  14.    if (numero>9){
  15.      funcion (numero);
  16.      if(primeracifra*(cifras+1)==suma) {
  17.        printf("\n%d SI cumple la condicion",numero);
  18.        fflush(stdout);
  19.      }
  20.      else
  21.      printf("\n%d NO cumple la condicion",numero);
  22.    }
  23.    else
  24.      printf("\n%d es menor de 10",numero);
  25.  }
  26.  return 0;
  27. }
  28.  
  29. void funcion(int numero){
  30.  int i,num=numero;
  31.  cifras=0;suma=0;primeracifra=0;
  32.  for(i=10;numero/i!=0;i=i*10)
  33.      cifras++;
  34.  primeracifra=(int)(numero/ pow(10,cifras));
  35.  for(i=cifras;i>=0;i--){
  36.    (suma)+=(int)(num/ pow(10,i));
  37.    num=(int)fmod(num,pow(10,i)) ;
  38.  }
  39. }
  40.  

Espero que disfrutes entre tanto código. ;) ;) ;)

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



448  Programación / Programación C/C++ / Re: Process returned 0 en: 21 Enero 2014, 03:51 am
leosansan si tienes razon el primer codigo me falto poner varias cosas, pero ahora el codigo que me da problemas es el ultimo que postee, el que tiene algunas cosas modificadas


Es que yo la prueba la hice con el segundo código. :rolleyes:



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


449  Programación / Programación C/C++ / Re: [?] Error fgets (Solucionado) en: 21 Enero 2014, 02:53 am
Hola, bueno no me leí todo el hilo pero diría que se trata de problemas con el salto de línea y fgets(). Dejo aquí mi pequeño granito de arena:
........................................
Si no tiene nada que ver con el hilo pido disculpas, pero es que con tanto post la verdad que da un poco de pereza encontrar el problema.

Buena aportación xiruko, da una nueva perspectiva.

Ahora sólo falta que diga que se rechaza por menor o mayor número de cifras. ;)


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


450  Programación / Programación C/C++ / Re: Limpieza de buffer de teclado en lenguaje C. en: 20 Enero 2014, 23:37 pm
.........................
    scanf ..............
..........................


Con toda humildad y respeto, creo que tomas la tangente usando el scanf cuando de lo que se trataba era de cómo actuar ante la función fgets.

Sinceramente espero una aportación tuya que nos saque de la duda, ya que este tema ha surgido en otro tema y nos tiene con soluciones, que si bien hacen correctamente la labor, hecho de menos una solución más elegante y/o simple por parte tuya. Para que veas la alta estima en que te tengo ;)


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



P.D: Otro hilo que trata el tema es error_fgets.
 
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 132
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines