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

#1001
Cita de: oblivionxor en 19 Febrero 2013, 19:34 PM
.......................... Esa es mi duda???

Y me has creado otra a mí. Espero que alguien como rir o afín nos saque de la duda. :o
por cierto, para mantener el paralelismo con el bidimensional he usado:
Código (cpp) [Seleccionar]
#include <stdio.h>

void intenta_modificar_arreglo( const int b[3] );

/* Inicia la ejecucion */
int main()
{
int a[3] = { 1, 2, 10 };

intenta_modificar_arreglo( a );


return 0;
} /* Fin de main */

/*------------------Definicion de funciones-----------------------*/
void intenta_modificar_arreglo( const int b[3] )
{
int j;
for (j = 0; j <= 2; j++)
   {
     printf( "%d ", b[j] );
   }

} /* Fin de funcion intenta_modificar_arreglo */


Pero no "cantan" ahora los warnings :o :o

Saluditos!.
#1002
Ya te lo está diciendo el compilador: espera un const int y tú le mandas un int. Lo que quiere decir que tienes mal tipificadaos los arreglos, que deberían ser:

Citar
....................................................................
 const int arreglo1[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };                      

 const int arreglo2[2][3] = { 1, 2, 3, 4, 5 };
 
 const int arreglo3[2][3] = { { 1, 2 }, { 4 } };
  .......................................................................

Saluditos!.
#1003
Programación C/C++ / Re: Fracciones en C [Ayuda]
18 Febrero 2013, 16:57 PM
Cita de: 0xDani en 18 Febrero 2013, 16:17 PM
@leosansan, te dejo un truco de preprocesador que he usado mas de una vez aqui para limpiar la pantalla:
.....................................................................................

Muchas gracias, la verdad es que lo veo muy útil. ;-)

Saluditos!.
#1004
Programación C/C++ / Re: Fracciones en C [Ayuda]
17 Febrero 2013, 22:34 PM
Cita de: barnix456 en 16 Febrero 2013, 21:29 PM

Ahora tengo otra duda, por ejemplo corro mi programa, hago una operacion con fracciones por ejemplo, al calcular la resistencia, que es sumado, sumo (2/2)+(2/2) me da de resultado 2, lo cual es correcto, el programa cuando termina de hacer la operacion pulso ENTER y regreso al menu principal, y si eligo la misma opcion de volver a calcular otra resistencia, y pongo unas fracciones como (1/2)+(1/2) y me deberia dar como resultado 1, pero me da como resultado 3, por que aun guarda en su bufer el resultado de 2.



El problema que te aparece no tiene nada que ver con el buffer,

¡ ¡ ¡ quita todos los "fflush(stdin)" del código que no hacen nada ¡ ¡ ¡ .

Es más sencillo y el culpable en el fondo es el goto.

Lo que ocurre es que cada vez que hace una llamada el goto debe encontrar las variables que acumulan o suman con valor de cero o uno en el caso de un contador que tienes por ahí, pero lo que se encuentran es a esas variables con el valor que han tomado anteriormente, de ahí que sumen al valor viejo el nuevo.

Ese efecto lo corriges asignando nuevamente ,después de la etiqueta a la que llama el goto, esas variables a sus valores originales. por ejemplo, en el caso de la resistencia tendrías que poner:


Código (cpp) [Seleccionar]
void resistencia(void)
{
   float res, total=0,suma=0,numerador[sise], denominador[sise];
   int n,cont,opc,cont1=1,n1;
   a:
   total=0,suma=0,cont1=1; /* <==AQUI INICIALIZAS NUEVAMENTE */
   system("clear");
   printf("\t\tRESISTENCA\n\n");
    ..................



Si tienes duda pregunta nuevamente. :rolleyes:

Saluditos!.


P.D: En todo caso habría que poner un "fflush(stdout)" después de cada printf no terminado en \n y ... pero en fin, eso es otro tema.

REEDITO: Perdona que te cambie system (clear) a system (cls) pero así es como me funciona.

Te faltaba además algunos break, tenías entrada de dos resistencias fraccionarias en el cálculo del voltaje -porqué dos o no 3 o 5- y te he cambiado los goto por while, también nombrabas a Numerador como denominador y ya que usas system, en lugar de dos getchar seguidos yo pondría un system(pause). Revisa no obstante por si se ha colado algún gazapo:


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

void resistencia(void);
void intensidad(void);
void voltaje(void);
/***************************************************/
int main()
{
  int opc;
  printf("\n");
  printf ("\t\tC\tE\tP\tR\tO\tG\n");
  printf("\n"); printf("\n");
  printf ("\t\t\tCIRCUITOS EN SERIE \n");
  printf ("\n");
  printf ("Este Software se basa en la ley de OHM\n");
  printf("\n");
  printf("Precione ENTER para continuar\n");
  getchar();
  while (1){
   system("cls");
    printf("ELIJA UNA OPCCION: \n\n \t1)Calcular Resistencia\n\t2)Calcular Intensidad\n\t3)Calcular Voltaje\n\t4)Salir\n");
    scanf("%d",&opc);
    switch (opc)
    {
        case 1:
        {
            resistencia();
            break;
         }
         case 2:
         {
             intensidad();
             break;
         }
         case 3:
         {
             voltaje();
             break;
         }
         case 4:
         {
             exit(0);
         }
       }
  }
  return 0;
}
/***************************************************/
void resistencia(void)
{
   float res, total=0,suma=0,numerador[sise], denominador[sise];
   int n,cont,opc,cont1=1,n1;
   while (1){
     total=0,suma=0,cont1=1; /* <==AQUI INICIALIZAS NUEVAMENTE */
     system("cls");
     printf("\t\tRESISTENCA\n\n");
     printf("Con que tipo de datos desea calcular la resistencia:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n");
     scanf("%d",&opc);
      switch(opc)
     {
         case 1:
         {
             system("cls");
             printf("\t\tEn esta sección calcularemos la resistencia total\n\n");
             printf("Cuantas resistencias tiene el circuito: ");
             scanf("%d",&n);
             printf("\n");
             for (cont=0;cont<=n-1;cont++)
             {
                 printf("Escribe el valor del Numerador %d (_/ ): ",cont); scanf("%f",&numerador[cont]);
                 printf("Escribe el valor del Denominador %d ( /_): ",cont); scanf("%f",&denominador[cont]);
                 printf("\n");
             }
             for(cont=0;cont<=n-1;cont++)
             {
                 suma=suma+(numerador[cont]/denominador[cont]);
             }
             printf("\n");
             printf("El valor de la resistencia total es: %.2f Ohmios",suma);
             getchar();getchar();
             break;
         }
         case 2:
         {
             system("cls");
             total=0;cont1=1;
             printf("\t\tEn esta sección calcularemos la resistencia total\n\n");
             printf("Cuantas resistencias tiene el circuito: ");
             scanf("%d",&n1);
             printf("\n");
             while (cont1<=n1)
             {
                 printf("Escribe el valor de la resistencia %d :> ",cont1);
                 scanf("%f",&res);
                 total+=res;
                 cont1++;
             }
             printf("\n");
             printf("El resultado de el total de las resistencias es: %.2f ohmios",total);
             getchar();getchar();
             break;
         }
         case 3:
             main();
             break;
         case 4:
             exit(0);
       }
   }
}
/***************************************************/
void intensidad(void)
{
   float vol,res,total=0, numerador[sise],denominador[sise],vol1=0,vol2=0,resul;
   int opc,cont;
   while (1){
     system("cls");
     printf("\t\tIntensidad\n"); printf("\n");
     printf("Con que tipo de datos desea calcular la Intensidad:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n");
     scanf("%d",&opc); switch(opc)
     {
         case 1:
         {
             system("cls");
             printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n");
             printf("Escribe el valor del voltaje:\n\n");
             for (cont=1;cont<=1;cont++)
             {
                 printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador[cont]);
                 printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador[cont]);
                 printf("\n");
                 vol1=vol1+(numerador[cont]+denominador[cont]);
             }
             printf("Escribe el valor de la resistencia total:\n\n");
             for (cont=2;cont<=2;cont++)
             {
                 printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador[cont]);
                 printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador[cont]);
                 printf("\n");
                 vol2=vol2+(numerador[cont]+denominador[cont]);
             }
             resul=vol1/vol2;
             printf("\n");
             printf("El valor de la intensidad total es: %.2f Ampers",resul);
             getchar();getchar();
             system("cls");
             break;
         }
         case 2:
         {
             system("cls");
             printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n");
             printf("Cual es el valor del voltaje total: "); scanf("%f",&vol);
             printf("Cual es el valor de la resistencai total: "); scanf("%f",&res); printf("\n"); total=vol/res;
             printf("La intensidad es: %.2f ampers",total);
             getchar();getchar();
             break;
         }
         case 3:
             main();
         case 4:
             exit(0);
       }
   }

}
/***************************************************/
void voltaje(void)
{
   float res,inte,total=0,numerador,denominador,tot1=0,resul;
   int opc;
   while (1) {
     system("cls");
     tot1=0;
     printf("\t\tVoltaje\n\n");
     printf("Con que tipo de datos desea calcular la Intensidad:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n");
     scanf("%d",&opc); switch(opc)
     {
         case 1:
         {
             printf("\t\tEn esta sección calcularemos el voltaje total\n\n");
             printf("Cual es el valor de la resistencia total: \n\n");
             printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador);
             printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador);
             printf("\n");
             tot1=(numerador/denominador);
             printf("Cual es el valor de la intensidad total: "); scanf("%f",&inte); printf("\n");
             resul=inte*tot1;
             printf("El valor de el voltaje total es: %.2f Volts",resul);
             getchar();getchar();
             break;
         }
         case 2:
         {
             system("cls");
             printf("\t\tEn esta sección calcularemos el voltaje total\n\n");
             printf("Cual es el valor de la resistencia total: "); scanf("%f",&res);
             printf("Cual es el valor de la intensidad total: "); scanf("%f",&inte); printf("\n"); total=res*inte;
             printf("El voltaje total es: %.2f vols",total);
             getchar();getchar();
             break;

         }
         case 3:
             main();
             break;
         case 4:
             exit(0);
       }
   }

}
/***************************************************/
#1005
Cita de: krafta en 17 Febrero 2013, 18:00 PM
En todo caso es mejor el while, porque valida primero.
Mientras que en el Do while entra y despues valida
::)

Si no leo mal el código, en el while primero entra, con el scanf, y después valida el while. O sea, lo mismo que en el do-while.:silbar:

Sobre la claridad, opino lo mismo que DickGumshoe.

Saluditos!.
#1006
Cita de: Xafi en 17 Febrero 2013, 18:35 PM
Os dejo aquí este aporte mio sobre el operador condicional para que aprendaís puesto que poca gente lo usa, se puede deber a que muchos tutoriales no lo explican o directamente al poco uso.


Se agradece la intensión, pero ¿de dónde sacas que se usa poco?.

Por ejemplo:

http://foro.elhacker.net/programacion_cc/help_calcular_maximo_de_3_numeros_usando_funcion-t383403.0.html

Y si quieres el máximo de cuatro números introducidos separados por un espacio:


Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdio>
using namespace std;
main()
{
    int a,b,c,d,mayor;
    char ch,cad[100]/*= "17 32 15 27"*/;
    cout <<"Introduzca cuatro numeros separados por un espacio:"<< endl;
    gets (cad);
    sscanf(cad, "%d%c%d%c%d%c%d",&a, &ch ,&b,&ch, &c,&ch, &d  );
    if ((a= a>b ? a:b)>(c= c>d ? c:d))
        cout << a << endl;
    else
        cout << "mayor = " << c << endl;
    return 0;
}



Y así un porrón de ejemplos que han salido ya.

Saluditos!.

P.D: Te doy la razón en el nombre: operador condicional.

#1007
Cita de: BatchianoISpyxolo en 17 Febrero 2013, 20:42 PM

Ahora lo que no tengo claro es que tú pides el tamaño del array al usuario... y, ¿reservamos la memoria estática en tiempo de ejecución? Supongo que será posible...

, esa es la gracia de no tener que predefinir un tamaño para el array.

Saluditos!.
#1008
Cita de: BatchianoISpyxolo en 17 Febrero 2013, 17:38 PM
Porque C permite declarar cualquier elemento en cualquier lugar :P


Creo que no has entendido el sentido de mi observación. Precisamente como se puede declarar en cualquier lugar, por qué dimensionar la "a priori" a 1000 en lugar de "esperar" a recibir la entrada de la dimensión y dimensionara justito después con ese valor, que es justo lo que yo hago. El ya hacerlo estáticamente o dinámicamente sería otra historia a debatir.

Saluditos!.
#1009
Cita de: 7hongo7 en 17 Febrero 2013, 01:48 AM
Vientos "leosansan" me has ayudado con los codigosy me funcionan genial ;-) ;-) ;-) ;-)

Gracias, gracias.

Citarsolamente que ahora tengo otra duda y es que como podría hacer lo mismo pero con una expresion aritmetica :huh: :huh: :huh: :huh: como me publicaste hace tiempo pero el problema es que esa formula ignora completamente el mes y no me imprime lo que requiero se desfasa por un dia el programa, muchas grax carnal la neta me estas ayudando muchisimo

Lo que yo uso es una expresión aritmética, a diferencia de rir que usa funciones del sistema. Y si te fijas bien hace uso de la variable "mes_". Y el código no desfasa en un día. ¿O te estas refiriendo a otro código que has hecho tú o yo?. Aclaramelo please.

Saluditos!.
#1010
¿Me he perdido algo en el camino?.¿ Qué sentido tiene reservar un array de 1000 elementos cuando puede que sólo tenga 10?. ¿No creéis que es mejor crearlo sobre la marcha?   :silbar:

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

int main (void) {
    int i,n;
    do {
      printf("Cantidad de elementos: ");
      fflush (stdout);
      scanf ("%d",&n);
    }while (n<1 || n>1000);
    int lista[n];
    for(i=0; i<n; i++){
        printf("Elemento %d: ", i+1);
        scanf("%d", &lista[i]);
    }
    return 0;
}


Saluditos!.

P.D: Por cierto, el uso de "while (getchar() != '\n' && getchar() != EOF);" es usualmente usado para limpiar el buffer "después" de una entrada, pero donde está no tiene como mucho sentido.  :rolleyes: