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

#501
Creo que esta es la salida que buscas:



No me gusta ni pizca el código que te paso, pero no quería modificarte el tuyo de forma sustancial: :rolleyes: :rolleyes: :rolleyes:

Código (cpp) [Seleccionar]

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

void binarioConvertir(int, char[]);

int main(void){

   char cadena[] = "daniel", cad_binaria[8] = "";
   int ascii=0, i=0, binarioMayuscula=0;

   while(i<6){
       ascii = cadena[i];
       binarioConvertir(ascii,cad_binaria);
       convertir_a_decimal(cad_binaria);
       printf("\n%c en decimal %3d en binario %s", cadena[i], ascii, cad_binaria);
       if (cad_binaria[1] = '1')
           cad_binaria[1] = '0';
       printf(" -->mayuscula-->%c-->",convertir_a_decimal(cad_binaria) );
       printf(" %s-->%d",cad_binaria,convertir_a_decimal(cad_binaria));
       i++;
   }
   printf("\n\n");
   return 0;
}

void binarioConvertir(int num, char cad[]){
   int i=0, izq=0, der=0, aux=0;
   while(num>0){
       if(num%2 == 0)
           cad[i] = '0';
       else
           cad[i] = '1';
       num = num/2;
       i++;
   }
   der=6;
   while(izq<3){
       aux      = cad[izq];
       cad[izq] = cad[der];
       cad[der] = aux;
       der--;
       izq++;
   }
   cad[7] = '\0';
}

int convertir_a_decimal (char cad[]){
   int decimal=0,i;
   for (i=6;i>=0;i--){
       if (cad[6-i]!='0'){
           decimal+=pow (2,i*((cad[6-i])-48));
       }
   }
   return decimal;


}


Todo es jugar con el valor del caracter en la posición 1.

Te he añadido la conversión a decimal usando las potencias de 2. Lo he hecho con "pow" por ganseria xD. ;)


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


#502
Cita de: SoyelRobert en  3 Enero 2014, 14:56 PM
Estoy intentado hacer un programa al cual se le introduce un texto por teclado y que vaya cambiando las vocales por su siguiente vocal:

Si lee una 'a' devuelve una 'e'.

Si lee una u devuelve una 'a'.

No se tienen en cuenta mayusculas ni vocales acentuadas.
...................................................................
Una vez lo consiga hacer con la entrada por teclado y la salida por monitor el siguiente paso seria hacerlo con ficheros. salu2

Antes que nada procura indentar o sangrar el código para que sea más legible y elige las etiquetas de C++, aunque el código sea en C. Salen de esa forma coloreado y es más fácil leerlo.

Y en tema pon una breve descripción de lo que buscas, no aclara nada eso de "problema con el siguiente codigo [C]"

Te pongo el código con las correciones que me han parecido y que no se aparten de tu código original. Por cierto,  ya veras cómo salir del bucle.   ;) ;) ;).


Código (cpp) [Seleccionar]

#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main (){
   char c;
   do{
       puts ("Introduzca vocal:");
       scanf("%c",&c);
       while (getchar ()!='\n');
       if(esVocal(c)!=0)
           printf("%c\n", sigVocal(c));
   }while(c!= EOF);
   return 0;
}

int esVocal (char c){
   int si_o_no=0;
   if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
       si_o_no=1;
   else si_o_no=0;
   return si_o_no;
}

char sigVocal (char c){
   if(c=='a')
       c='e';
   else if(c=='e')
       c='i';
   else if(c=='i')
       c='o';
   else if(c=='o')
       c='u';
   else if(c=='u')
       c='a';
   return c;
}


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

:rolleyes: ;) ;) ;) :rolleyes:
#503

Y YO REPITO LO DE:

¿Y un cafetito también no se te apetece?

Perdona, igual no lo sabes por no haberte leído las reglas del foro: no se hacen tareas desde cero, sólo se resuelven dudas sobre un código que previamente has tenido que hacer tú. ¿Lo pillas?.

:rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

Y para cuando postees 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.



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

:rolleyes: ;) ;) ;) :rolleyes:
#504
Cita de: joanj94 en  2 Enero 2014, 21:08 PM
He provado de todo, y no hay manera estoy desesperao xD

¡¡¡Chacho!!!, tranquilito.

No me convence del todo tu código así que lo he "variado" un poquitito.

Y ya que no usas para entrar las cadenas ninguna función -scanf, gets, fgets, etc-, da la sensación que no quieres usar las funciones más habituales. Eso me lleva a que en este caso tampoco tendría sentido usar strcpy, strlen, isupper, bool, isblank, strcmp , vamos "ná de ná" y mucho menos las correspondientes librerías <ctype.h>, <string.h> y<stdbool.h>.

Así que sólo uso la mísera librería <stdio.h> y su función asociada getchar. ¡¡¡Todo un reto!!!.

Y opara que veas que funciona, un pantallazo:



Código (cpp) [Seleccionar]

#include <stdio.h>

void pillo_cadena (char cad[600],int flag);
int con_pal,con_frase,cont_l_on_palabras,lon_frase;
void palabras_en_palabras (char palabras[],char frase[]);
void ordenar (char cadena[10]);
int comparar (char temp1[10],char temp2[10]);
int longitud_cadena (char cadena[10]);
char convertidor(char caracter);

char palabras[10],n_palabras[10][51],temp [10],frase[600];

int main (){

    char palabras[]="leon San noel.";
    char frase[]="NeoL aSN sAn Nas LeoN.";
    /*
    Acticva lo que sigue para introducir a mano
    los datos y desactiva entonces los dos anteriores
    */

    /*int flag=0;
    char palabras[10],frase[600];
    palabras[0]=frase[0]='\0';
     flag=1;
    printf("Introduce un seguido de palabras (10 max) de 50 caracteres como mucho, terminando con un '.'\n");
    pillo_cadena (palabras,flag);
    flag=2;
    printf("Introduce el texto, separando las palabras con especios i terminando con un '.', las palabras deben de ser de 50 letras max\n");
    pillo_cadena (frase,flag);*/
    palabras_en_palabras (palabras,frase);
    return 0;
}

void pillo_cadena (char cad[600],int flag){
    int i=0;
    int pillo_cad;
    cad[0]='\0';
    do{
        pillo_cad=getchar();
        cad[i]=pillo_cad;
        if (flag ==1)
            palabras[i]=cad[i];
        if (flag ==2)
            frase[i]=cad[i];
        i++;
    } while (pillo_cad != '\n');
    cad[i-1]='\0';
    if (flag ==1)
        palabras[i-1]=cad[i-1];
    if (flag ==2)
        frase[i]=cad[i-1];
}

void palabras_en_frase (char frase[],int con_pal,char temp[]){
    int i,cont=0,cont2=0;
    char aux [10],ch;
    aux [0]='\0';
    for (i=0;frase[i];i++){
        aux[cont]=frase[i];
        ch=frase[i];
        aux[cont]=convertidor (ch);
        cont++;
        if (frase[i]==' ' || frase[i]=='.'){
            aux[cont-1]='\0';
            ordenar  (n_palabras[con_pal]);
            ordenar  (aux);
            if (comparar (aux,n_palabras[con_pal])==0)
                cont2++;
            cont=0;
            aux [0]='\0';
        }
    }
    printf ("\nLa palabra %s tiene %d anagramas " ,temp,cont2);
    printf ("en: %s" ,frase);
}
void palabras_en_palabras (char palabras[],char frase[]){
    int i,j,cont=0,con_pal=0;
    char aux1 [10],temp [10],ch ;
    aux1 [0]=temp [0]='\0';
    for (i=0;palabras[i];i++){
        temp[cont]=palabras[i];
        ch=palabras[i];
        aux1[cont]=convertidor (ch);
        cont++;
        if (palabras[i]==' ' || palabras[i]=='.'){
            aux1[cont-1]=temp[cont-1]='\0';
            for (j=0;aux1[j];j++)
                n_palabras[con_pal][j]=aux1[j];
            n_palabras [con_pal][j]='\0';
            palabras_en_frase (frase,con_pal,temp);
            cont=0,con_pal++;
            aux1 [0]='\0';
        }
    }
}

void ordenar (char cadena[10]){
    int i,j,lon;
    char temp1;
    lon=longitud_cadena (cadena);
    for (i = 1; i < lon; i++){
        for (j = 0 ; j < lon-i; j++){
            if (cadena[j] > cadena[j+1]){
                temp1 = cadena[j];
                cadena[j] = cadena[j+1];
                cadena[j+1] = temp1;
            }
        }
    }
}

int comparar (char temp1[10],char temp2[10]){
    int i,si_o_no=0;
    if (longitud_cadena(temp1) != longitud_cadena(temp2))
        si_o_no=1;
    else {
        for(i=0;temp1[i];i++)
            if (temp1[i]!=temp2[i])
                si_o_no=1;
        si_o_no=0;
    }
    return si_o_no;
}

int longitud_cadena (char cadena[10]){
    int i;
    for (i=0;cadena[i];i++);
    return i;
}
char convertidor(char caracter){
    if (caracter>96 && caracter<123)
            caracter-=32;
    return (caracter);
}


Es muy mejorable usando las funciones que mencioné, como para que se puedan introducir números, más espacios entre palabras -como está sólo admite un espacio entre palabras- etc. Pero bueno, creo que lo que te pongo es lo que pedías. Al menos espero te sirva de orientación. ;)

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

:rolleyes: ;) ;) ;) :rolleyes:
#505
Cita de: joanj94 en  2 Enero 2014, 13:11 PM
(PD: los comentarios y enunciado estan en catalan)

¡¡¡Chacho!!!, afloja un punto. No cuesta tanto castellanizar un código simple y nos ahorras un esfuerzo adicional. ;) ;) ;)

De entrada el código no furula, vamos no compila. Eso porque creo te falta la librería  <stdbool.h>, además de un "return" al final de la función main.

Lo he mirado sólo por encima y me parece poco clara la explicación de lo que hay que introducir y muy rebuscada la solución que planteas.

Los diez nombres que hay que introducir, ¿seguro que pueden llevar espacios y además acabar con punto?. Me parece muy raro si lo que pretendes es buscar anagramas.

Me parece que lo más lógico es que los diez nombres sean simples palabras, sin espacios ni ná de ná, y que la cadena, que es la que parece que puede contener 50 caracteres como máximo, o sea que sí pueda tener espacios y acabar con un punto y ya luego buscar si alguna de las palabras posee anagrama o no en la cadena. ¿Me equivoco?. ¿Puedes sacarme de la duda?.


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

:rolleyes: ;) ;) ;) :rolleyes:



#506

Cita de: m@o_614 en  1 Enero 2014, 02:13 AM
........................
entonces no puedo hacer una búsqueda binaria directamente de un archivo de texto???tomando en cuenta que los codops del archivo estan ya ordenados
........................


Si están ordenados puedes aplicar directamente la búsqueda binaria e ir guardando los resultados en otro fichero auxiliar o en un array/estructura/lista.

Cita de: m@o_614 en  1 Enero 2014, 02:13 AM
........................................
y otra duda que sería más conveniente por ejemplo si tengo la linea:

ABA     NO   INH   1806     2   0   2

si primero tengo que buscar el codop y después ver checar algunas cosas con los demás datos, que seria mas conveniente guardar solo el ABA en una estructura o toda la linea


Yo creo que bastaría ir leyendo sólo los codops, con ellos guardas la línea a la que pertenecen y al final tendrás ordenadas cada línea.

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

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


#507

Más comentaros en números grandes.

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

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


#508
Cita de: m@o_614 en 31 Diciembre 2013, 22:54 PM
Saludos

tengo la siguiente tabla de instrucciones(de un ensamblador) capturada en un archivo txt:
.............................................................
y tengo por ejemplo un código de operación que dice ABY, el cual lo tengo que buscar en este archivo, para ello pense que seria mas rápido si lo hago con una búsqueda binaria, pero me queda la duda de si tengo primero que guardar solamente los códigos de operación(ABA,ADB...) en una estructura de datos para después poder hacer la busqueda, o si tengo que recorrer el archivo completo linea por linea para saber cuantos codops son??
.....................................................


Por lo que tengo entendido, la búsqueda binaria se realiza en un array/estructura/lista previamente ordenada, por lo que en cualquier caso tendrías que recorrer el fichero entero y, guardados los copdops en donde te apetezca- -a mí me gusta la idea de un array -  primero ordenarlo y a continuación aplicarle la búsqueda binaria.

Pero es sólo una idea.


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

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


#509
Cita de: DanielC# en 31 Diciembre 2013, 22:55 PM
........................................................
la intriga es porqué frecuentas ese foro, espero urgente respuesta... :huh: :huh: :huh: :) :) :)
   
Saludos.
Daniel


¿Es que crees que este es el único foro con acción?. Pues no, pero sin dudarlo un instante:es el más activo y entretenido. Se aprende un *uevo. ;) ;) ;)

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

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


#510
Cita de: xiruko en 31 Diciembre 2013, 03:58 AM
...................................
Pensándolo un poco mejor también se podría hacer con máscaras y operaciones a nivel de bit.
Felices fiestas.
......................................

Sólo le veo un pero a lo que haces: modificas la cadena. Y si tuviera que usarla a posteriori no le valdría, a no ser que haga una copia previa de la cadena.  Es una chorrada, ¡¡pero!!, podría ser.

Lo que yo propongo es cuasi-igual, sólo que no modifico la cadena original tan solo la imprimo y paso de la variable "len" ya que se puede evitar su uso.

Salida:


Citar
L -> mayuscula
e -> minuscula
o -> minuscula
S -> mayuscula
a -> minuscula
n -> minuscula
S -> mayuscula
a -> minuscula
n -> minuscula
 -> minuscula
L -> mayuscula
e -> minuscula
o -> minuscula
N -> mayuscula

En mayusculas: LEOSANSAN LEON

En minusculas: leosansan leon



Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
char  cadena[]="LeoSanSan LeoN";
int i;
for (i=0; cadena[i]; i++)
if( cadena[i] & 0x20 )
printf("%c -> minuscula\n", cadena[i]);
else
printf("%c -> mayuscula\n", cadena[i]);

printf("\nEn mayusculas: ");
for (i=0; cadena[i]; i++)
printf("%c", cadena[i]& 0xDF);
putchar ('\n');
printf("\nEn minusculas: ");
for (i=0; cadena[i]; i++)
printf("%c", cadena[i]| 0x20);
   putchar ('\n');
return 0;
}


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

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

P.D: Por ciero, ¿Daniel, Roberto o Pino1952 ?