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

#231
Cita de: NOB2014 en  7 Abril 2014, 15:42 PM
...................................................
...........lo que me trae ahora es que alguien me diga cómo puedo poner el operador en una variable como la operador luego lo pondré en un arreglo para con un if establecer el correspondiente.-    ......................... ....................


Lo primero es lo primero y es ni más ni menos que eliminar de la subcadena auxiliar los espacios en blanco, que luego la lían parda. Esto lo consigues con una pequeña modificación en tu código:

Código (cpp) [Seleccionar]
for (i = inicio + 1, j = 0; i < final; i++)
   if (cadena[i]!=' '){
   auxiliar[j] = cadena[i];
   j++;
   }
auxiliar[j] = '\0';
 printf("\n%s\n", auxiliar);


Lo segundo es que a priori estableces que los números se compongan de un solo dígito, cuando podrían estar formados por varios dígitos y ya te fastidiarían las cuentas de dónde está el signo,etc. Esto lo puedes arreglar con:

Código (cpp) [Seleccionar]
i=0;
 for (j=0,k=0;auxiliar[j];j++){
   if (isdigit(auxiliar[j])){
     aux[k][i]=auxiliar[j];
     i++;
   }
   if (!isdigit(auxiliar[j])){
     op=auxiliar[j];
     aux[k][i]='\0';
     i=0,k++;
   }
 }
 aux[k][i]='\0';


Y lo del operador, que lo pillas en el trozo de código anterior en op, basta con usar una variable char op que guarde el tipo de operación y luego en un switch seleccionarla de forma automática. Algo como:

Código (cpp) [Seleccionar]
switch(op){
   case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
   break;
   case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
   break;
   case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
   break;
   case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
   break;
   /******* y mas *******/
 }
 printf("\nRESULTADO: %d", resultado);


Y ya tendrías una salida como esta, con la segunda linea de código:

Código (cpp) [Seleccionar]
char cadena[100] = "3 * 5 + (1 5 * 2 5  0) + 5", auxiliar[100] = {'\0'}, aux[10][10] = {'\0'}, op;

Citar

15*250

RESULTADO: 3750



Queda mucho por hacer, por ejemplo que exista más de  una operación, que los números sean decimales, etc. Pero todo se va andando despacito.

Salu2!.
#232
Cita de: do-while en  8 Abril 2014, 11:22 AM
¡Buenas!

El "error" de la primera función supongo que será debido a que solo devuelves un valor cuando el número tiene dos divisores. Si no los tiene no devuelves nada y supongo que tomará como valor de retorno el último valor devuelto por la función (lo que implicaría que la llamada a la función se está realizando siempre en la misma posición de la pila...). Si no es eso, ni idea.

¡Saludos!

Creo que estas en lo cierto do-while.

Una forma de evitar lo que sucede en tu primer  código es que retorne "algo" si no es primo, algo parecido a lo que propone amchacon:


Código (cpp
    ) [Seleccionar]
if (contador == 2)
         return x;
    else
        return 0;


Y en la función main:

Código (cpp) [Seleccionar]

    for(x = 1; x <= 100; x++){
      if (primo(x)!=0)
        printf("%d\n", primo(x));
     }  //fin de for


Y ya te funciona el código inicial sin problemas ya que ahora retorna la función primo si o si.

Salu2!.
#233
Programación C/C++ / Re: Arreglos Ayudaaa!
7 Abril 2014, 14:46 PM
Cita de: amchacon en  7 Abril 2014, 12:49 PM
................................................
Aclarate, a es una variable o un arreglo? :huh:


Es un arreglo, se ve al citar el mensaje:

Código (cpp) [Seleccionar]

#include<stdio.h>
#include<time.h>
#include<conio.h>

int main()
{
 int min,max,num,i,j,n,aux=0;
 float r;
 srand(time(NULL));
 int A = time(NULL);
 printf("Este programa genera numeros aleatorios segun el rango que establezca el usuario");
 printf("\n\nDigita el numero donde iniciaran tus numeros aleatorios: ");
 scanf("%d",&min);
 printf("\nDigita el numero donde terminaran tus numeros aleatorios: ");
 scanf("%d",&max);
 printf("\nCuantos numeros deseas imprimir: ");
 scanf("%d",&n);
 int a[n];
 printf("\n");
 for(i=0; i<n; i++){
   a[i]=(rand()%(max-min)+min+1);
   if(a[i]%2==0)
     printf("\nPar: %d,",a[i]);
   else
   printf("\nImpar: %d,",a[i]);
 }
 printf("\n\n");
 printf("\nNumeros primos: ");

 /******************/

 getche();
 return 0;
}


Le faltaba la librería conio.h para el uso de getche, además de lo ya mencionado de declarar main como int y su return correspondiente.

Respecto a los números primos mira el enlace que te te puso amchacon.


Y para cuando cuelgues el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices y arrays.
¡¡¡¡ Saluditos! ..... !!!!


#234

Lo que me gusta del C es su minimalismo: por qué usar funciones que tu te puedes crear, pasando de las librerías correspondientes  ;):

Citar

9 - 2


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

int main(){
  int i,j,i0,i1;
  char cadena[100] = "3 * 5 + (9 - 2) + 5", cadena1[100];
  for (i=0;cadena[i]; i++){
    if (cadena[i]=='(')
      i0=i;
    if (cadena[i]==')'){
      i1=i;
      break;
    }
  }
  for (i=i0+1,j=0;i<i1; i++,j++)
    cadena1[j]=cadena[i];
  cadena1[j]='\0';
  printf("\n %s", cadena1);
  printf("\n\n");
  return 0;
}


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


#235
Cita de: criser20 en  5 Abril 2014, 20:45 PM
gracias y por cierto no sabrás de algún libro que explique cosas como esta que me pueda servir para futuras referencias?

En la página de inicio tienes un enlace a diversos libros muy válidos.

Si te digo la verdad he llegado a un punto en  que los libros sólo me dicen más de los mismo, en cambio las diversas cosas que aprendo  y muy interesantes en los diversos foros en los que participo, es crema.

Yo te aconsejo seguir de entrada dos o tres buenos libros y nada si te trabas en alguno de los ejercicios colgar en el foro tus avances. Seguro que con las respuestas que te ofrezcan los usuarios iras sacando poco a poco buenos códigos y/o prácticas de programación. La práctica lo es casi todo, eso si, con un nivel de  teoría correcto y profundo.  


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


#236
Cita de: criser20 en  5 Abril 2014, 19:52 PM
se que seria asi lo que no se como hacer eso :/ y en el libro que tengo solo habla de lo basico y no aparece eso >.<

Para empezar tienes que arreglar lo de la matriz.

Como  ya te indiqué en dos de los temas anteriores, no puedes declararla antes de conocer sus dimensiones.


* Esto no:

Código (cpp) [Seleccionar]
int opc, f, c,  matriz[f][c] ;

* Esto si:

Código (cpp) [Seleccionar]

.........................
int  f, c;
 printf("numero de filas:");
 scanf("%d", &f);
 printf("numero de columnas:");
 scanf("%d", &c);
 int matriz[f][c];
...........................


Y respecto al tema del punto silla sólo tienes que seguir los pasos que te indicó noele1995.

Por ejemplo, primero calculas el máximo de cada columna (los valores de mayor y menor pones tu los que consideres, aunque para hacerlo bien habría que usar la librería limits.h y elegir el máximo=INT_MIN y mínimo=INT_MAX de los int):


Código (cpp) [Seleccionar]
int i,iM,jm ,j,k,mayor=-1000,menor=1000;
 for (j=0; j<m; j++){
   mayor=-1000,menor=1000;
   for(i=0; i<n; i++) {
     if (matriz[i][j]>mayor){
       mayor=matriz[i][j];
       iM=i;
     }
   }


Y una vez localizado el máximo de una columna, cosa que hace el código anterior, miras cual es el mínimo de la fila donde está ese máximo:

Código (cpp) [Seleccionar]
for (k=0; k<m; k++){
     if (matriz[iM][k]<menor){
       menor=matriz[iM][k];
       jm=k;
     }
   }


Y ya sólo queda comparar si el mayor de la columna coincide con el mínimo de la fila correspondiente:

Código (cpp) [Seleccionar]
if (mayor==menor)
     printf ("\nPunto de silla el a[%d][%d]=%d\n",iM,jm,matriz[iM][jm]);


Si aplicas lo anterior a la matriz:

Citar
1       2       3
2       3       4
1       5       2



obtendrás:

Citar
Punto de silla el a[1][0]=2

Espero que lo tengas ahora más claro.

Saludos!.
#237
Cita de: amchacon en  4 Abril 2014, 12:23 PM
Realmente no es un problema de programación, sigue el mismo orden que las operaciones matemáticas normales.

..Para las cuales aquí tienes una referencia.

En cualquier caso, en la primera expresión tendrías, matemáticamente hablando, un paréntesis de más, sería más bien:


Código (cpp) [Seleccionar]
int a = 3 + 4 *8 * (4 - ( 9 + 3) /6); //67

Saludos!.
#238
Cita de: xiruko en  4 Abril 2014, 00:53 AM
Hola, por qué no pruebas con sprintf()?
...................................
Saludos!

Y que no se olvide de incluir la librería <cstdio> para tal fin.

Saludos!
#239
Programación C/C++ / Re: media con arreglos
4 Abril 2014, 16:31 PM
Además de lo indicado por eferion en cuanto a que no es un arreglo dinámico debes declarar como int la variable arr después de introducir el valor de n:

Código (cpp) [Seleccionar]

.....................
int opc, n ;
....................
printf("cuantos numeros desea evaluar?");
   scanf("%d", &n);
   int  arreglo[n] ;
   media(n, arreglo);
................................


Y luego en la función media sería:

Código (cpp) [Seleccionar]
void media(int n,int arr[n])

Y para que la media de un valor correcto, es decir con decimales que es lo usual en estos casos, como tienes declarados como int a x y arr debes hacer un cast a float e imprimir como %f o %g:

Código (cpp) [Seleccionar]

.............................  
for (j=0;j<n;j++)
   x+=arr[j];
printf("\nla media es %f: \n", (float)x/n);
system("pause");
......................


Por cierto, observa que en el for he quitado las llaves. Siempre que el cuerpo de un for, if, etc tenga una sola línea no son necesarias. También he puesto una pausa para ver el resultado antes de que se limpie la pantalla con el system("CLS").



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




#240
Cita de: amchacon en  3 Abril 2014, 20:43 PM
Como anotación, te diré que eso ya está implementado en la librería estándar:
Código (cpp) [Seleccionar]
#include <sstream>

//...

stringstream linea;
linea<<Numero;

cout<<linea.str()<<endl;


Pues tal como lo pones me sale un número raro, sin dejarme introducir el número.

Sé que el fallo lo tengo yo, pero ¿dónde?.

Saludos!.