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

#541
Cita de: mcamara46 en 27 Diciembre 2013, 22:35 PM
Gracias, mirare como usar la libreria :D

Otra forma es usar el tipo string que permite cosas como:

Código (cpp) [Seleccionar]

if(a == b)


Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
    string b;
    string a ="leosan san";
    cout << "Bienvenido, soy programa1, usted quien es?" << endl;
    getline (cin,b) ;//permite espacios en blanco a diferencia de cin
    if(a == b)
        cout << "Hola maestro  " << a <<endl;
    else
        cout << "Tu no quieres nada." << endl;
    system("pause");
    return 0;
}


;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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



#542
Cita de: amchacon en 27 Diciembre 2013, 22:43 PM
.......................................................................................

Pero aún así es más eficiente, entre otras cosas porque no tienes llamadas a función y esas cosas. El algoritmo es el mismo básicamente.
.......................................

Supongo que también influye el hecho de que yo empiezo en 3 y voy de dos en dos, obviando de esa forma las operaciones con los pares, que no son primos ni son pocos. Lo que más me ha gustado es la concisión en el código ;)

¡¡¡¡ Saluditos! ..... !!!!
#543
Cita de: minari02 en 25 Diciembre 2013, 20:35 PM
jeje... si ya me he dado cuenta  :xD  :rolleyes:  ;D  :silbar:

Perdona que había quedado en contestar, pero esto de las Fiestas me ocupan familiarmente demasiado.

No quería dejar pasar mi versión de la criba de Eratóstenes, para que no se diga que no ayudamos:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

int main ()
{
   int i, j, cont=1, n;
   //printf ("Introduzca numero: ");
   //scanf ("%d", &n);
   n=1000000;
   int *a;
   a =  malloc (sizeof(int)*n);
   for (i=3;i<=n;i+=2)
       a[i]=i;
   /*printf ("2  ");*/
   for (i=3; i*i<=n;i+=2)
       for (j=i;i*j<=n;j+=2)
           a[i*j]=0;
   for (i=3;i<n;i+=2)
       if (a[i]!=0){
           //printf ("%d  ",a[i]);
           cont++;/**/
       }
   printf("\n total = %d",cont);
   free (a);
   return 0;
}


Sí. ya sé que están desactivados el scanf y el printf, pero quería compararlo con el de amchacon  :laugh: :laugh: Y esto son los resultados, desactivando también los printf en el de amchacon y dejando en ambos casos activo solamente el contador final de primos resultantes:



No es por nada  :laugh: :laugh: pero parece que el mío va de un 25 a un 33 por ciento más rápido, y eso que solamente he podido usar 10^6, cuando en realidad quería meterle más caña, pero ...... en el mío no tengo problema en tomar 10^8, pero el de amchacon se cuelga en mi ordenador desde 10^7. Supongo que es problema mío, y de tener declarada la matriz en el caso de amchacon como int[]. Es un fastidio porque, como ejemplo, no puedo usar en mi ordenata matrices de 1000x1000. ¡SNIFFF!. ¿Os pasa algo parecido a vosotros o podéis manejar rangos superiores a 10^8 o matrices de orden superior a 1000?.

¡OJO!, que los comentarios son en tono jocoso y festivos, que es lo que se lleva por estas fechas.  ;) ;) Nada de piques, ¿vale?.
EN realidad amigo amchacon, tu código me parece una virguería, demuestras unos amplios conocimientos incluso en algo tan simple como el ejemplo que nos ocupa. Espero por lo menos llegar a aproximarme con el tiempo .... y una caña para que sea más llevadero. :laugh: :laugh:


;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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


#544
Cita de: SoyelRobert en 27 Diciembre 2013, 17:18 PM
pero las matrices no tienen porque representar un sistema de ecuaciones a menos que se indique lo contrario, ademas si se llegase a esa prioridad ( 0x = 4) seria conveniente seguir aplicando el algoritmo para obtener unas ecuaciones parametricas facilmente.

Se podria hacer con una funcion recursiva hasta que unicamente queden unos y por arriba y por debajo de estos, ceros...
...........................................

Lo primero parece casi evidente. Pero .....

Las matrices no caen del cielo, tienen su propia génesis. Nacen en la vida real de tratar de simular lo real con modelos matemáticos y ello conlleva al planteamiento, en general de sistemas de ecuaciones, bien en el cálculo  matricial, aplicaciones lineales, cálculo tensorial,etc que a su vez surgen de la necesidad de estudiar "algo" concreto, sea un modelo poblacional, el cálculo de un tensor de inercia para una estructura, resolución de circuitos eléctricos y/ o electrónicos, desarrollo de las ecuaciones de una torre de destilación de una petroquímica, un modelo matemático del comportamiento y predicción atmosférico ..... . Y ese último ejemplo que planteo, si bien lo que digo también es aplicable a los casos anteriores y multitud de casos más, resulta que la cantidad de variables inmersas en el problema puede ser ingente así como las relaciones entre ellas, que originan los sistemas ecuaciones  no siempre representables linealmente tal como estamos acostumbrados.

Y a lo anterior se suma que de una matriz puede interesarnos algo concreto, bien sea el determinante, o norma, o los autovalores u autovectores o ........

Y para todo ello lo mejor es tener previamente su forma triangular, aunque no sea necesariamente cuadrada, o mejor aún su forma diagonal. Y ello cuando es posible dicha actuación, por no hablar de la descomposición LD y de ......etc,etc.

Y es que trabajar con matrices de 100x100 o 1000x1000, por poner un par de ejemplos de matrices "indigestivas" por su tamaño y llenas de números de la vida real, que no suelen ser los bonitos números enteros sino los muy desagradables decimales que tienen a su vez la desagradable costumbre de ser o muy grandes o muy pequeños (pensemos en los problemas que surgen en química y que conllevan el uso de concentraciones) en la vida real es duro.

Nuestros códigos están bien para andar por casa pero cuando las cosas se ponen serias, entiéndase a nivel profesional, nada como los paquetes matemáticos comerciales, tipo el Mathematica o el Matlab, por mencionar los más conocidos. O acaso a alguno de nosotros se nos ocurre meternos a desarrollar un programa de dibujo que nos permita plasmar en un dibujo un edificio. ¡Venga hombre!, que para eso ya están el Autocad con toda su familia de subproductos, o el Cypecad y análogos para calcular su estructura.

Y volviendo al tema de la triangularización/diagonalizaciçon claro que se puede resolver de diferentes maneras , directa como yo plantee, según lo que pedía el autor del tema- no hay que olvidar que es una respuesta a un código planteado -, o por una cadena de funciones que troceen el problema o mediante una función recursiva o que sé yo. Soy demasiado nuevo aún es este mundillo.

Sorry, creo que se me ha ido la olla un poco.
;) ;) ;)

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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


#545
Cita de: tutospaindani en 27 Diciembre 2013, 19:58 PM
por ejemplo que mientras esta ejecutando un bucle pueda hacer otra cosa con el otro no se si me entiendes

Se me ocurren varias ideas ante la impresición de la pregunta. Como ejemplos:

Código (cpp) [Seleccionar]

for (i = 0, j=0;i+j <= n , j<=90;i++,j+=3)


Código (cpp) [Seleccionar]

for (i = 0, j=0;i+j <= n && j<=90;i++,j+=3)


Código (cpp) [Seleccionar]

for (i=3; i<=N;i+=2)
        for (j=i;i*j<=n;j+=2)


Código (cpp) [Seleccionar]

for (i=...;i<....;i++)
    for (j=...;j<....;j++)
{
    ........
    if (i = tal cosa)
        break;//y salgo del bucle del j par volver al i
}


¿Por qué no intentas expresar mejor la idea que te ronda en la cabeza?

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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


#546
Programación C/C++ / Re: Problemas con los ficheros
27 Diciembre 2013, 14:09 PM
Cita de: leosansan en 27 Diciembre 2013, 13:45 PM
También tienes cosas tú, amchacon. Si nos lo dice que gracia tiene la no duda. ¡ Agudiza el ingenio, hombre!  :laugh: :laugh: ;-)

Lo ves, ¡¡¡¡has agudizado el ingenio y dado con la tecla!!!! ;-)

#547
Cita de: amchacon en 27 Diciembre 2013, 13:44 PM
Cualquier matriz con determinante no-nulo se podrá convertir en identidad.

Si tiene un determinante nulo, significa que no es resoluble (o tiene infinitas soluciones).

El problema radica que el cálculo de un determinante de una matriz seria, de 100x100 por ejemplo, pasa por buscar previamente su forma diagonal con alguna de las múltiples variantes de Gauss, Jordan,Cholesky y compañía. ¿Supongo que no estarás pensando en la ineficiente regla de Lapace, por cuanto al número de operaciones que implica en comparación con la diagonalización previa  para una matriz del tamaño indicado?.

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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


#548
Programación C/C++ / Re: Problemas con los ficheros
27 Diciembre 2013, 13:45 PM
Cita de: amchacon en 27 Diciembre 2013, 12:52 PM
Pero dinos que fallo te da  :silbar:

También tienes cosas tú, amchacon. Si nos lo dice que gracia tiene la no duda. ¡ Agudiza el ingenio, hombre!  :laugh: :laugh:

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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


#549
Cita de: jesus++ en 25 Diciembre 2013, 18:12 PM

... el primer paso (y en el q busco ayuda seria escalonar la matriz superiormente) el resto ya lo tengo pensado


A eso es a lo que respondí y tanto superiormente como inferiormente bajo el supuesto que se pueda hacer, que ya es harina de otro costal.

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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


#550
Creo que es más útil el uso de isalpha e isdigit para saber si son alfabéticos o números los caracteres.

Respecto al código sólo vi un fallo en las funciones esLetra y esNumero, ya que su argumento no es una cadena sino un caracter.

En fin, supongo que esta es la salida que buscabas:


Citar
Et1
equ
CODOP = equ
$ffFF
OPERANDO = $ffFF

dos
LDAA
CODOP = LDAA
@4732
OPERANDO = @4732

COMENTARIO
COMENTARIO
tres
sWi
CODOP = sWi
x,5
OPERANDO = x,5

Netq%23
Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el gui
on bajo
RMB
CODOP = RMB
556
OPERANDO = 556

Et12_xyz12
       Error:la longitud maxima de una etiqueta es de ocho caracteres
ADCA
CODOP = ADCA

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define LONG_ETIQUETA 8
#define LONG_CODOPS 5

typedef enum {FALSO,VERDADERO} booleano;
typedef enum {ETIQUETA,CODOP,OPERANDO} linea;

booleano esComentario(FILE *fd);
char *Etiqueta_Codop_Operando(FILE *fd,int linea);
void erroresEtiqueta(char *etiqueta);
void buscarFinLinea(FILE *fd);
void ignorarEspacios(FILE *fd);
booleano esNumero(char caracter);
booleano esLetra(char caracter);

int main()
{
   FILE *fd;
   int car;
   char *etiqueta,*codop,*operando;
   if((fd = fopen("P1ASM.txt","r"))!= NULL)
   {
       while((car = fgetc(fd))!= EOF)
       {
           if(car == ';')
           {
               if(esComentario(fd))
                  printf("COMENTARIO\n");
               else
                  buscarFinLinea(fd);
           }
           else if((isalpha(car)))
           {
               etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
               erroresEtiqueta(etiqueta);
               ignorarEspacios(fd);
               codop = Etiqueta_Codop_Operando(fd,CODOP);
               printf("CODOP = %s\n",codop);
               ignorarEspacios(fd);
               operando = Etiqueta_Codop_Operando(fd,OPERANDO);
               printf("OPERANDO = %s\n\n",operando);
           }
       }
   }
   else
      printf("No se pudo abrir el archivo");
   return 0;
}

booleano esComentario(FILE *fd)
{
   int car;
   while((car = fgetc(fd))!= '\n')
   {
       if(car == ';')
          return 0;
   }
   return 1;
}

void buscarFinLinea(FILE *fd)
{
   int car;
   while((car = fgetc(fd))!= '\n')
       ;
}

void ignorarEspacios(FILE *fd)
{
   int car;
   do
   {
       car = fgetc(fd);
   }while(car == '\t' || car == ' ');
}

booleano esLetra(char caracter)
{
   if (isalpha(caracter))
       return 1;
   else
      return 0;
}

booleano esNumero(char caracter)
{
   if (isdigit(caracter))
       return 1;
   else
      return 0;
}

char *Etiqueta_Codop_Operando(FILE *fd,int linea)
{
   int car,lon = 0,pos;
   char *cadena;
   fseek(fd,-1,SEEK_CUR);
   pos = ftell(fd);
   if(linea == ETIQUETA||linea == CODOP)
   {
       do
       {
           car = fgetc(fd);
           lon++;
       }while(car != '\t' && car != ' ');
   }
   else
   {
       while((car = fgetc(fd)) != '\n')
          lon++;
   }
   cadena = calloc((lon+1),1);
   fseek(fd,pos,SEEK_SET);
   fgets(cadena,lon+1,fd);
   printf ("%s   \n",cadena);
;
   return cadena;
}

void erroresEtiqueta(char *etiqueta)
{
   int tam,i,caracterInvalido = 0;
   tam = strlen(etiqueta);
   if(tam-1 > LONG_ETIQUETA)
      printf("\tError:la longitud maxima de una etiqueta es de ocho caracteres\n");
   for(i = 0;i<tam-1;i++)
   {
       if(!(esLetra(etiqueta[i]))&&(!esNumero(etiqueta[i]))&& (etiqueta[i] != '_')){

           caracterInvalido = 1;
       }

   }
   if(caracterInvalido==1)
      printf("Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
}


;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

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