Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Anta en 12 Septiembre 2011, 22:52 pm



Título: Programacion en C basico
Publicado por: Anta en 12 Septiembre 2011, 22:52 pm
Hola soy nuevo y realmente se que en lo que he leido aqui apoyan en dudas y tengo una gran duda....

sinceramente tiene como 2 semanas  en esto ahora que baje infinidad de manuales en C y C++ para guiarme por un ejemplo no allo tal respuesta..

esta es la duda...

como seria la logica para poder iniciar con cero en un ingreso de datos... solo me gustaria saber que sentencia usar he usado if, swich, for pero cuando ingreso 01 se me cierra o no me compila he usado hasta case pero sinceramente creo que ese no puede ser en este caso... gracias


Título: Re: Programacion en C basico
Publicado por: Eternal Idol en 12 Septiembre 2011, 23:58 pm
Deja tu codigo, no entiendo cual es el problema, si haces fgets (con stdin) + sscanf (con %d) al poner 01 el valor es 1.


Título: Re: Programacion en C basico
Publicado por: Anta en 13 Septiembre 2011, 00:29 am
Deja tu codigo, no entiendo cual es el problema, si haces fgets (con stdin) + sscanf (con %d) al poner 01 el valor es 1.

Citar
#include <stdio.h>
#include <conio.h>
void main ()
{
int A,R[6],i;
clrscr();
printf ("Programa que........ \n");
    for (i=0; i<=6; i++)
   {
    printf ("Introduce numeros binarios \n");
    scanf ("%d",& R);
    if (R>1)
      printf (" No introduciste numero binario; \n  ");
    }
    A=3;
    for (i=0; i<=6; i++)
    {
        if (R==A)
         printf ("LOS NUMEROS NO LLEVAN SECUENCIA \n ");
          else
        if(R<=1)
        {
       A=R;
       printf("numeros aceptados \n");
             }    }
             printf("Los numeros son:");
             for (i=0; i<=6; i++)
                  printf("%d",R);
      getch();
   }

me refiero a un ingreso de numeros ceros y unos por ejemplo ingresar numeros:
01010101 y que me lo acepte pero que al ingresar 0010101 no, he estado probando muchas combinaciones de sentencias pero nose si este bien


Título: Re: Programacion en C basico
Publicado por: rir3760 en 13 Septiembre 2011, 00:55 am
Revisa los temas fijos de este foro, descarga un buen libro de C y estudia este paso a paso.

Ello porque en el programa tienes muchos errores de concepto:

* Evita el uso de conio (no es necesario en tu programa) y define la función principal como "int main(void) ..." o "int main() ..." indicando su valor de retorno con al menos "return 0;".

* En C y C++ cuando se declara un array se indica su numero de elementos N y se accede a estos mediante los indices 0 a N-1. Tu iteras siete veces (de forma inocua) pero lo correcto, de nuevo, son seis.

* La llamada:
Código
  1. scanf ("%d",& R);
Técnicamente es correcta pero es un error lógico ya que solo lees el valor del primer elemento del array (deberia ser "&R[ i ]" o su equivalente "R + i").

* Después comparas "R" contra diversos valores lo cual no es correcto ya que "R" en el contexto en que se utiliza resulta en la dirección en memoria del array, deberías utilizar "R[ i ]".


Finalmente no puedes utilizar scanf y similares para leer números en base 2, en su lugar utiliza fgets para leer una linea de texto y strtol para obtener el numero.

Un saludo


Título: Re: Programacion en C basico
Publicado por: Eternal Idol en 13 Septiembre 2011, 01:11 am
R deberia ser de 8 elementos. ¿Se supone que es un byte, no?

Código:
for (i = 0; i < 8; i++)

El [ i ] no sale dentro de la etiqueta codigo lamentablemente.

Despues de hacer el bucle para obtener los valores podrias hacer otro con x = 0; x < 4 (no incluido) y la condicion R[x * 2] diferente de cero o R[x * 2 + 1] diferente de uno determinaria facilmente si se cumple el postulado de que las parejas sean siempre 01. Si es que eso era lo que querias ... ¿De donde sale esta historia?

PD. Es introdujiste.


Título: Re: Programacion en C basico
Publicado por: Anta en 13 Septiembre 2011, 02:10 am
kk lo intentare si he descargado muchos manuales de C incluidos los de esta pagina...

lo que intento hacer es que por ejemplo un numero limitado de digitos digamos [10] en el cual solo acepte  010101010101 no importa si es 01 o 0101 o 01010101 y que cualquier digito que se ponga 01001 este mal y arroje un error y em regrese de nuevo ala insercion de digitos solo que sea intercalados los ceros y unos... tratare de intentarlo gracias por la ayuda  :-*


Título: Re: Programacion en C basico
Publicado por: rir3760 en 13 Septiembre 2011, 05:42 am
En ese caso debes leer la entrada como cadena y comparar los caracteres pares contra '0' y los impares contra '1'.

Mas o menos asi:
Código
  1. char cad[ALGUN_VALOR];
  2. int i;
  3.  
  4. /* Se lee la cadena almacenando esta en "cad" */
  5.  
  6. for (i = 0; cad[i] == '0' + (i % 2); i++)
  7.   ;
  8. if (cad[i] == '\0')
  9.   puts("Cadena valida");
  10. else
  11.   puts("Cadena NO valida");

Muy limitado pero funciona. Una vez manejes mas del lenguaje la podrias mejorar (por ejemplo descartando el espacio blanco al principio de la cadena).

Un saludo


Título: Re: Programacion en C basico
Publicado por: Anta en 13 Septiembre 2011, 06:09 am
muchas gracias en vdd no imagine hacer las comparaciones de ese tipo todos los ejemplos que lei solo decia q cero era = a valor nulo y que para que pudiera dar 1 tendria q poner lo q es [--i].... muchas gracias lo intentare

Citar
#include<stdio.h>
#include<string.h>

main()

{
    char n[10]={0101010101};
    int i;
   
     printf("Ingresar Digitos\n");
      scanf("%c", &n);
     
      for (i = 0; n == '0' + (i % 2); i++);
        if (n == '\0')
       puts("Cadena valida\n");
         else
           puts("Cadena NO valida\n");
           
       return 0;
           
}


se me  facilito mucho intentarlo con tu codigo pero no logro cuando lo ejecuto que el exe se quede abierto solo pongo datos me los valida en el rango y se cierra casi al instante uso el DEV c++ sera que sea por eso? :-[


Título: Re: Programacion en C basico
Publicado por: satu en 13 Septiembre 2011, 09:32 am
Hola

Escribe esto justo antes del return 0

Código
  1. while(getchar()!='\n') ; //Esto limpa el buffer de entrada
  2. getchar(); //Esto espera a que pulses una tecla
  3.  

Saludos


Título: Re: Programacion en C basico
Publicado por: rir3760 en 13 Septiembre 2011, 14:56 pm
No debes utilizar "%c" en la llamada a scanf ya que esta lee un solo carácter, en su lugar debes utilizar "%s" para leer una palabra. Y hay que eliminar el operador "dirección de" (el '&') ya que no es necesario cuando se trata de un array.

En la declaración del array su inicialización esta mal y no es necesaria (scanf no permite una validación rigurosa, en el mejor de los casos se debe comprobar su valor de retorno). El primer condicional "if" esta mal al comparar "n" cuando debería ser "n[ i ]". También el for esta mal.

Hay que agregar la comprobación para verificar que el numero de caracteres en la palabra sea par.


Y no debes incluir el encabezado <string.h>, de nuevo consigue un buen libro.

Con las correcciones (colocaría solo un fragmento pero se tiene que corregir casi todo):
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char n[10];
  7.   int i;
  8.  
  9.   printf("Ingresar Digitos\n");
  10.   scanf("%s", n);
  11.  
  12.   for (i = 0; n[i] == '0' + (i % 2); i++)
  13.      ;
  14.   if (n[i] == '\0' && i % 2 == 0)
  15.      puts("Cadena valida\n");
  16.   else
  17.      puts("Cadena NO valida\n");
  18.  
  19.   return 0;
  20.  
  21. }

En cuanto a Dev-C++ lo mejor es cambiar a otro entorno (no recuerdo uno (salvo ese) que no soporte la generacion de la pausa de forma automatica).

Un saludo


Título: Re: Programacion en C basico
Publicado por: Anta en 14 Septiembre 2011, 15:23 pm
muchas gracias me ayudaron mucho ahora tratare de hacer en el mismo codigo que acepte los valores invertidos de 10101010 siempre en pares de dos cuando termine posteare mis resultados  :D