Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 20 de 32

Tema: duda con programa en C version 3.0 y final :D

  1. #1

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    duda con programa en C version 3.0 y final :D

    Buenas noches mis cabros wenos pal C...

    Tengo el siguiente trabajo:

    Tengo que hacer una app que ingrese una cantidad indeterminada de números binarios (1's y 0's) pueden ser 300 números binarios. el programa debe pescar el valor binario y pasarlo a numero decimal de la tabla ascii, ahi viene la gracia del cuento.

    Cuando vea 8 ceros seguidos (00000000) actúa como separador de caracteres. Ejemplo:
    10100100000000100000 = 101001 y 100000 (binarios)


    Ahora, lo único que me resulta es la conversión de binario a decimal, pero el problema que tengo es como hacer para que ingrese la cantidad de numeros binarios y pueda identificar cuando vienen los 8 ceros juntos, porque esa es la gracia del programa, la cual no le encuentro ninguna gracia...

    lo que llevo de codigo es esto. No me molesten por la calidad del codigo, solo importa que la wea funcione

    Código:
    #include <conio.h> 
    #include <stdio.h> 
    #include <string.h> 
    
    int bin2dec(char * sbin); 
    
    int main(void) 
    { 
    char str[20]; 
    printf("Introduzca un numero en formato binario: "); 
    gets(str); 
    printf(" El resultado decimal es: %d", bin2dec(str)); 
    getch(); 
    } 
    
    int bin2dec(char *sbin) 
    { 
    int j=0,sum=0,tmp; 
    int len = strlen(sbin); 
    
    for(j=0;j<len;j++) 
    { 
    if(sbin[j]!='1' && sbin[j]!='0') 
    { 
    printf("Este no es un numero en formato binario."); 
    return -1; 
    } 
    } 
    
    tmp = len-1; 
    for(j=0; j<len; j++) 
    { 
    sum=sum+((sbin[j]-'0')*(tmp?(2<<tmp-1):1)); 
    tmp--; 
    } 
    
    return sum; 
    }
    Como ven ustedes una posible solución? se que VJ sabe harto de C y debe estar viendo esto, dame una ultima manito compare

  2. #2
    Pajarito Nuevo
    Fecha de ingreso
    02 ene, 08
    Mensajes
    70

    Re: duda con programa en C version 3.0 y final :D

    - crea una variable que guarde la siguente posicion tras leer 8 0s segudos (inicialmente es 0).
    - recorre el string:
    - si lees un 0, aumenta un contador, si lees un 1, resetealo a 0.
    - si tu contador llega a 8, copias el string desde la posicion que guardaste al principio hasta la actual menos 8, actualiza tu variable a la posicion actual + 1, y resetea el contador
    - si se te acaba el string, y tu contador es diferente a 8, copias el string desde la posicion guardada hata la actual.

    Basicamente eso seria. Ojo que implementar eso tal cual no es robusto, por lo que debes añadir verificaciones de limites, para evitar seg faults.

  3. #3

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    gracias... pero no me servia, porque no es recursivo lo que toi haciendo y debe ser recursivo, nada de for... solo if

  4. #4
    Buscando el norte
    Avatar de Kensho
    Fecha de ingreso
    16 ago, 06
    Ubicación
    En este cuerpo que me contiene.
    Mensajes
    1,873

    Re: duda con programa en C version 3.0 y final :D

    fx(cadena) {
    if cadena.largo = 0; return '';
    else
    if cadena == ocho ceros; return ' '
    else
    return valorAscii(substring(cadena,8)) + fx(substring(cadena,8,largocadena)) ;
    }


    donde valorAscii retorna un char ascii de un numero binaro dentro de una cadena de tamaño 8 con ceros y unos

    eso?

    pd: es seudocodigo, obvio q no te funciona una "suma" (+) de cadenas.
    A los que contemplan la luna las nubes a veces ofrecen una pausa.

    Portable: Shure se-215 / HifiMan RE-0 / Sennheiser PX-200 II | Studio: Samson Resolv 40a / Fiio A1 | HT: Onkyo TX-SR 308 / Paradigm Titan Monitor v. 6

  5. #5
    Pajarito Nuevo
    Fecha de ingreso
    02 ene, 08
    Mensajes
    70
    Cita Iniciado por - Marmota - Ver mensaje
    gracias... pero no me servia, porque no es recursivo lo que toi haciendo y debe ser recursivo, nada de for... solo if
    Recorre el string de forma recursiva con una funcion que le pases el string, posicion actual, inicial y contador... Es lo mismo

  6. #6

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    es en general, debo rehacer todo el codigo entre en panico por la chucha...

  7. #7
    Pajarito Nuevo
    Fecha de ingreso
    27 mar, 09
    Mensajes
    51

    Re: duda con programa en C version 3.0 y final :D

    Caaaalma, caaaalma.

    Puedes mantener todo el código tal como lo tienes, cambia solo esto:

    printf("Introduzca un numero en formato binario: ");
    gets(str);

    La idea es que hagas un ciclo para la lectura de los datos y ahí hagas las respectivas comprobaciones (los ocho ceros). Una vez hechas las comprobaciones, pasas tu variable y haces lo que haga falta.

    Ejemplo :

    Código PHP:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #define prt printf
    #define rd scanf
    #define limpiar system("pause");system("cls")

    struct contables {
          
    char cuenta[41];
        
    int tipo;
        
    int ide;};

    void main() 
    {        
    start:;

        
    system("cls");
        
    contables borrar={""},cuentas=borrar,buscar=borrar;
        
    char l[1];
        
    char *letra=l;
        
        
    prt("Ingrese la nueva cuenta ");

        [
    B][I]for(c=0;c<41;c++)
        {
            *
    letra=getchar();
            *
    letra=toupper(*letra);    
            if(*
    letra=='\n')
            {
                
    cuentas.cuenta[c]='\0';
                break;
            }
            else
            {
                
    cuentas.cuenta[c]=*letra;
            }
        }[/
    I][/B
    el sector en negrita, es el que te interesa. Lee tus números de esa forma, uno a uno, y evalúa; si es cero, cuenta cuantos llevas, si son menos de 8, concatena en una cadena dedicada a los ceros. Si no, borra la cadena de ceros, y asigna a tu variable a presentar en pantalla la cadena de unos que llevas hasta ese momento. Si es un uno, concatena a continuación de tu cadena de ceros, y borra... bueno, ahí verás, pero insisto; no es necesario que cambies el código. Sólo haz recursiva la captura de datos.

  8. #8

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    a la mierda la recursividad, mantendre el cod original, pero la busqueda de 0's la hare recursiva, uno por uno... los unos los guardo en una cadena y los ceros en otrs

    ahora... como podre hacer eso?

  9. #9
    Pajarito Nuevo
    Fecha de ingreso
    02 ene, 08
    Mensajes
    70

    Re: duda con programa en C version 3.0 y final :D

    Pero no entiendo cual es el problema... tampoco te quiero hacer la tarea, pero creo que deje a prueba de weones la explicacion de un algoritmo posible. Si te complica la recursividad es tan simple como usar una funcion tipo:

    Código:
    void busquedaRecursiva( char * string, int posActual, int posInicio, int cont_0s)
    {
      //Tu wea
    
      busquedaRecursiva( string, posActual++, posInicio, cont_0s);
    }
    posActual es la posicion del string en la que vas, posInicio, la posicion del primer caracter tras una cadena de 8 ceros, y cont_0s es cuantos 0 consecutivos has contado. Lo que tienes que rellenar tiene que verificar si es el ultimo caracter de la cadena de string (buscando por un \0), y/o modificar el posInicio y cont_0s. Eso simplemente llamas despues del gets:

    Código:
    int main(void) 
    { 
      char str[20];
      printf("Introduzca un numero en formato binario: ");
      gets(str); 
      busquedaRecursiva(str, 0, 0, 0); 
      printf(" El resultado decimal es: %d", bin2dec(str));  getch();
    }
    y voila... Puedes hacer lo mismo para todas las weas que tengas un for y quieras pasarlo a recursiva, de forma tan simple como creando una funcion cuyos argumentos son las variables que se usan dentro del for, ademas de agregarle una variable que vaya contando los llamados (iteraciones, en el ejemplo que te di: posActual) y simplemente llamalos con un ++ al final de tu funcion.
    Última edición por Valrak; 29/06/2012 a las 07:54

  10. #10

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    Bueno, al final, trataré de explicar el codigo que llevo

    Código:
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int bin2dec(char * sbin);
    //int contarCeros(char *sbin);
    //int caracterAscii(char *sbin);
    
    int main(void)
    {
    	char str[1000];
    	int i, sum, p;
    	int arregloCeros[1000];
    	int arregloFinal[1000];
    
    
    	printf("\nIntroduzca un numero en formato binario: ");
    	gets(str);
    	printf(" El resultado decimal es:%d\n", bin2dec(str), arregloCeros[i]);//entrego el valor en decimal y si tiene un cero, lo asigno a arregloCeros
    	printf(" El resultado caracter es:%c\n",arregloFinal[p], toascii(sum));//el valor en decimal, lo entrego en formato ascii
    
    	getch();
    
    }
    
    
    int bin2dec(char *sbin)
    {
    
    
    	int j=0,sum=0,tmp, i=0, p=0;
    	int len = strlen(sbin);
    	int contador;
    	int arregloCeros[100];
    	int arregloFinal[1000];
    
    
    	for(j=0;j<len;j++)
    	{
    		if(sbin[j]!='1' && sbin[j]!='0')//si el valor ingresado es distinto de 1 o 0.
    		{
    		printf("Este no es un numero en formato binario.");
    		return -1;
    		}
    	}
    
    	tmp = len-1;
    	for(j=0; j<=7; j++)//recorre el arreglo.
    	{
    		sum=sum+((sbin[j]-'0')*(tmp?(2<<tmp-1):1));//operacion que calcula el valor binario a decimal.
    		tmp--;
    	}
    	return sum;//valor que cambia a decimal
    
    	if(sbin[j]==sbin[j+j])//pregunto si es valor ingresado es igual a mismo valor, para saber si es cero, si es uno, la suma me va a dar 2 y no sirve
    	{
    		contador++;
    		if(contador == 8)//si el contador llega a 8
    		{
    			for(i=0; i<1000; i++)//recorro el arreglo
    			{
    				arregloCeros[i]='/0';//le asigno un valor de espacio, no se si es así, pero se me ocurrio
    
    			}
    		}
    	}
    	else
    	{
    		contador=0;
    	}
    
    
    	for(p=0;p<1000;p++)
    	{
    		arregloFinal[p]=sum;que el valor que dá la suma del calculo de binario a decimal, lo asigno a arregloFinal.
    	}
    
    
    }
    Cuando me debe imprimir por pantalla el caracter, me sale siempre el mismo signo con un valor decimal distinto

    Me sale el numero 21, me sale un , cuando sale un 32, me sale un

    Que alguien entienda mi codigo y me de una solucion por favor

    ---------- Post added at 19:19 ---------- Previous post was at 17:56 ----------

    UP....

  11. #11
    Moderador

    Moderador
    Avatar de [VJ]
    Fecha de ingreso
    09 ene, 06
    Ubicación
    Santiago, Chile
    Mensajes
    10,254

    Re: duda con programa en C version 3.0 y final :D

    Jaja, recien vi el threads

    Honestamente, no se entiende mucho, pero veamos la parte de convertir binarios a decimales.

    Partamos con un ejemplo, tenemos el número binario:

    Código:
    1001011
    Que tiene el valor 75 en decimal. Este cálculo es básicamente

    Código:
    1 * 26 + 0 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20
    Ahora, esta conversión la puedes hacer iterativamente en un for sin mayo problema, pero tu pidieron algo recursivo, así que tenemos que buscar una propiedad matemática recursiva en esta conversión.

    Si te fijas, lo que puse arriba es exactamente lo mismo que decir

    Código:
    1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 + 0 * 24 + 0 * 25 + 1 * 26
    Solo ordene los factores al revés.

    Finalmente fíjate en este paso, lo que acabo de colocar se puede factorizar por dos desde el segundo término en adelante:

    Código:
    1 * 20 + 2 * (1 * 20 + 0 * 21 + 1 *  22 + 0 * 23 + 0 * 24 + 1 * 25)
    Y lo que quedó dentro del parétesis es nuevamente una conversión de número binario a decimal esta vez correspondiente al binario

    Código:
    100101
    (Recuerda que van en orden de mayor a menor potencia)

    Finalmente, este es el mismo número binario que teníamos al comienzo pero sin su último caracter.

    O sea, que es lo que hicimos en términos ya más computines:

    Para convertir recursivamente un string binario a un decimal:

    1. Tomar su valor más pequeño (el que está "más a la derecha") y pasarlo al entero que le corresponda (0 o 1)

    2. Sumarle la conversión a entero del resto del string (recortándole el último caracter) multiplicado por dos.

    CASO BASE (importante en recursión): si el string esta vacío (eventualmente, porque le estás recortado pedazos), retornar el valor neutro, en este caso 0.

    Finalmente, recuerda que en C "recortar" strings no es fácil, pero puedes usar un índice que diga cual es el siguiente caracter que te toca procesar. Rompe un poco la elegancia de usar recursividad pero es mejor que andar jugando con punteros a char*.
    Última edición por [VJ]; 02/07/2012 a las 20:57


    Cotiza tu notebook en SoloNotebooks

    Arma tu tarro en SoloHardware

    Encuentra tu nuevo LCD/LED en SoloElectro


  12. #12

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    pasar de binario a decimal esta listo, lo hace bien

    si ingreso 0011010000000011001, me toma el arreglo y me calcula el valor 0011010000000011001, lo cual esta mal, porque me deberia calcular solo los unos, siendo la suma y el resultado en decimal no mayor a 127, y los ceros no los debe tomar en cuenta, a menos que sean 8 consecutivos...

    el caso del 0011010000000011001 seria así:

    a) 001101 - 000000 - 001100 - 1
    b) 1101 - "espacio" - 11001
    c) 13 - "espacio" - 25

    pero al final me da como valor un 3094, que vendria siendo el valor en decimal de 0011010000000011001...

    como puedo arreglar eso?

  13. #13
    Moderador

    Moderador
    Avatar de [VJ]
    Fecha de ingreso
    09 ene, 06
    Ubicación
    Santiago, Chile
    Mensajes
    10,254

    Re: duda con programa en C version 3.0 y final :D

    Tienes que avanzar por el string contando ceros consecutivos, y si encuentras ocho entonces procesas el string hasta lo que hayas leido hasta ese momento.

    En pseudocódigo:

    Código:
    Entrada: char* input
    
    zero_counter = 0;
    
    siguiente_indice_a_procesar = 0
    
    para cada caracter en la posición "i" en input:
      si el caracter es 0
        zero_counter++
      si no
        zero_counter = 0
    
      si zero_counter == 8
        pasar los caracteres entre "siguiente_indice_a_procesar" y "i - 8" (para no considerar los ceros) a decimal e imprimir
        siguiente_indice_a_procesar = i + 1
    
    al final del for, procesar los caracteres entre "siguiente_indice_a_procesar" y el final del input para obtener el ultimo numero.
    Yo lo implemente asi en C y funciona, la unica diferencia es que yo use un struct para hacer unas partes mas limpias.

    ---------- Post added at 01:10 ---------- Previous post was at 01:07 ----------

    Y ten cuidado con esa implementación de bin2dec, está innecesariamente complicada y de más que tiene un bug, además que solo por las cosas raras que tiene posiblemente te bajen la nota.

    Programar un es un ejercicios de fuerza bruta y poner ifs para todo, busca patrones, elegancia, no solo porque es más entendible sino también porque te hace la vida más fácil.


    Cotiza tu notebook en SoloNotebooks

    Arma tu tarro en SoloHardware

    Encuentra tu nuevo LCD/LED en SoloElectro


  14. #14

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    en un momento hice algo así....
    Código:
    if(sbin[j]==sbin[j+j])//aqui pregunto si el valor del numero ingresado es igual al mismo numero sumado por el mismo numero... onda, si ingreso un 0, la suma es cero y es igual a 0, si ingreso un 1, la suma es 1 + 1 y es igual a 2
    
    int contador;
    int i, j;
    int arregloCeros[1000];
    	{
    		contador++;//aunmento un contador
    		if(contador == 8)// si contador es igual a cero
    		{
    			for(i=0; i<arregloCeros; i++)recorro el nuevo arreglo y le indico que debe ingresar un espacio en ese arreglo
    			{
    				arregloCeros[i]='/0';// es como la forma que se puede ingresar un espacio
    
    			}
    		}
    	}
    en ASCII, el espacio es el numero decimal 32, pero nunca supe como decirle al programa que cuando contador == 8, le asigne el numero decimal 32, porque puede que en programa tb aparezca y genere algo que no se deba.

    Posteo el trabajo que debo hacer mejor? para que se entienda todo.



    ---------- Post added at 02:21 ---------- Previous post was at 02:18 ----------

    Cita Iniciado por [VJ] Ver mensaje
    [/COLOR]Y ten cuidado con esa implementación de bin2dec, está innecesariamente complicada y de más que tiene un bug, además que solo por las cosas raras que tiene posiblemente te bajen la nota.

    Programar un es un ejercicios de fuerza bruta y poner ifs para todo, busca patrones, elegancia, no solo porque es más entendible sino también porque te hace la vida más fácil.
    en general, no es una cosa a evaluar el codigo, porque no es importante, la vez anterior, el codigo era asqueroso de feo y me saque un 64 porque hacia lo que debia hacer.

    pero ahora no me interesa elegancia ni nada de esas cosas, porque no deberia estar dando este ramo, por una mariconada de un profe el año pasado lo estoy haciendo y muy corto de tiempo ademas, porque estaba trabajando, donde ya me sacan jugo y renuncie para subir las notas.

    por una opcion mas que nada personal lo hago asi.

    ---------- Post added at 02:23 ---------- Previous post was at 02:21 ----------

    pasar los caracteres entre "siguiente_indice_a_procesar" y "i - 8" (para no considerar los ceros) a decimal e imprimir
    siguiente_indice_a_procesar = i + 1

    al final del for, procesar los caracteres entre "siguiente_indice_a_procesar" y el final del input para obtener el ultimo numero.
    no entendi esta parte...

  15. #15
    Moderador

    Moderador
    Avatar de [VJ]
    Fecha de ingreso
    09 ene, 06
    Ubicación
    Santiago, Chile
    Mensajes
    10,254

    Re: duda con programa en C version 3.0 y final :D

    Marmota, tu codigo no compila, no se para que están esas llaves.

    Por lo menos necesitas un for o un while para iterar sobre el input, no es más que eso, parte por ahí.

    Ese arreglo arregloCeros no te sirve de mucho.

    Para detectar si el caracter sobre el que estas es cero o no puedes usar una función como esto:

    Código:
    int ctoi(char input) {
        return (int) (input - '0');
    }
    Asi ctoi(sbin[j]) va a ser 0 o 1 (como ints) y no tienes que hacer malabares.

    ---------- Post added at 01:31 ---------- Previous post was at 01:27 ----------

    Cita Iniciado por - Marmota - Ver mensaje

    no entendi esta parte...
    Cuando cuentas 8 ceros, entonces significa que detectaste una nueva letra, usando el ejemplo de tu profe:

    10100100000000100000

    Cuando estes en el octavo cero consecutivo las variables van a estar como sigue:

    siguiente_indice_a_procesar = 0
    i = 13

    por lo que debes pasar a decimal el chunk de texto que esta entre los indices "siguiente_indice_a_procesar" y "i - 8", esto es, entre los indices 0 y 5, que en el ejemplo es justamente "101001", que es el primer valor que quieres sacar.


    Cotiza tu notebook en SoloNotebooks

    Arma tu tarro en SoloHardware

    Encuentra tu nuevo LCD/LED en SoloElectro


  16. #16

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    gracias VJ, seguire mañana, me duele la cabeza y mañana madrugo pa trabajar... nos vemos byeee

    ---------- Post added at 03:13 ---------- Previous post was at 03:07 ----------

    Cita Iniciado por [VJ] Ver mensaje
    Cuando cuentas 8 ceros, entonces significa que detectaste una nueva letra, usando el ejemplo de tu profe:

    10100100000000100000

    Cuando estes en el octavo cero consecutivo las variables van a estar como sigue:

    siguiente_indice_a_procesar = 0
    i = 13

    por lo que debes pasar a decimal el chunk de texto que esta entre los indices "siguiente_indice_a_procesar" y "i - 8", esto es, entre los indices 0 y 5, que en el ejemplo es justamente "101001", que es el primer valor que quieres sacar.
    entendi lo que dices, pero no se en que parte siguiente_indice_a_procesar aumenta o entra en el codigo...

    entendi lo de i-8 para que de la cantidad de datos a analizar y pasar a decimal

  17. #17
    Pajarito Nuevo
    Fecha de ingreso
    02 ene, 08
    Mensajes
    70

    Re: duda con programa en C version 3.0 y final :D

    No entiendo la logica de tu if(sbin[j]==sbin[j+j])... porque no comparar el caracter directamente?. Trata de implementar lo que puso VJ en pseudocodigo ( que es practicamente lo mismo que dije yo con palabras) con sintaxis de C.

    Para extraer el string entre 2 posiciones, mejor copialo y lo imprimes o lo guardas en un arreglo de strings. No entiendo tampoco que ganas con poner caracteres nulos... a parte de romper y perder la referencia del string.
    Última edición por Valrak; 03/07/2012 a las 08:16

  18. #18
    Moderador

    Moderador
    Avatar de [VJ]
    Fecha de ingreso
    09 ene, 06
    Ubicación
    Santiago, Chile
    Mensajes
    10,254

    Re: duda con programa en C version 3.0 y final :D

    Cita Iniciado por - Marmota - Ver mensaje
    gracias VJ, seguire mañana, me duele la cabeza y mañana madrugo pa trabajar... nos vemos byeee

    ---------- Post added at 03:13 ---------- Previous post was at 03:07 ----------


    entendi lo que dices, pero no se en que parte siguiente_indice_a_procesar aumenta o entra en el codigo...

    entendi lo de i-8 para que de la cantidad de datos a analizar y pasar a decimal
    En esta parte del pseudocodigo que coloque se actualiza esa variable

    Código:
    ...
    
    si zero_counter == 8
        pasar los caracteres entre "siguiente_indice_a_procesar" y "i - 8" (para no considerar los ceros) a decimal e imprimir
        siguiente_indice_a_procesar = i + 1
    
    ...


    Cotiza tu notebook en SoloNotebooks

    Arma tu tarro en SoloHardware

    Encuentra tu nuevo LCD/LED en SoloElectro


  19. #19

    Avatar de - Marmota -
    Fecha de ingreso
    18 ago, 06
    Mensajes
    4,045

    Re: duda con programa en C version 3.0 y final :D

    Código:
    for(j=0; j<len; j++)
    	{
    		if(sbin[j]=='0')
    		{
    			count++;
    		}
    		else
    		{
    		count=0;
    		}
    		if(count==8)
    		{
    			??????
    		}
    	}
    VJ, aqui esta mi duda, que coloco aca, tu me decias "pasar los caracteres entre "siguiente_indice_a_procesar" y "i - 8" (para no considerar los ceros) a decimal e imprimir
    siguiente_indice_a_procesar = i + 1"


    que hago? creo un arreglo nuevo? esa duda de "pasar los caracteres entre indice y i-8" no me calza...

    se que soy bruto, pero no logro entender esa parte

  20. #20
    Moderador

    Moderador
    Avatar de [VJ]
    Fecha de ingreso
    09 ene, 06
    Ubicación
    Santiago, Chile
    Mensajes
    10,254

    Re: duda con programa en C version 3.0 y final :D

    Cita Iniciado por - Marmota - Ver mensaje
    Código:
    for(j=0; j<len; j++)
        {
            if(sbin[j]=='0')
            {
                count++;
            }
            else
            {
            count=0;
            }
            if(count==8)
            {
                ??????
            }
        }
    VJ, aqui esta mi duda, que coloco aca, tu me decias "pasar los caracteres entre "siguiente_indice_a_procesar" y "i - 8" (para no considerar los ceros) a decimal e imprimir
    siguiente_indice_a_procesar = i + 1"


    que hago? creo un arreglo nuevo? esa duda de "pasar los caracteres entre indice y i-8" no me calza...

    se que soy bruto, pero no logro entender esa parte
    La forma directa es efectivamente haciendo una copia del arreglo de binarios entre esas dos posiciones, ojo con el tema de los punteros para que no tengas leaks de memoria.

    implementa una función

    Código:
    char* copia(const char* input, int start, int end) {
    ...
    }
    que te retorne una copia del arreglo input entre los indices "start" y "end". Ojo que vas tener que usar punteros y malloc, porque lo que retorne la función no puede ser un arreglo local.

    Por ejemplo dentro de esa funcion vas a tener que hacer algo como esto:

    Código:
    char *output = (char*) malloc((NUMERO_DE_ELEMENTOS_QUE_VA_A_TENER_TU_SALIDA + 1) * sizeof(char));
    Tu vas a tener que calcular "NUMERO_DE_ELEMENTOS_QUE_VA_A_TENER_TU_SALIDA" (a partir de start y end) y le sumas uno al final para setear el caracter final obligatorio ('\0')


    Cotiza tu notebook en SoloNotebooks

    Arma tu tarro en SoloHardware

    Encuentra tu nuevo LCD/LED en SoloElectro


Página 1 de 2 12 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
*