elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mi primero pograma en C!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi primero pograma en C!  (Leído 3,744 veces)
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Mi primero pograma en C!
« en: 1 Mayo 2012, 19:52 pm »

Hola, a todos!

Hace una semana empece en esto de la programación en C!, realmente me gusto, siempre pense que era mucho mas dificil, estoy estudiando lic en informatica, apenas voy llevando mis primeras materias, es por eso de decidi desde ahora empezar a programar en C, me descargue un par de libros y empece, yo uso el S.O. ubuntu, y uso Geany, talvez alguien quisiera recomendarme algo mejor, bueno pasemos al programa, aun uso C como una calculadora no he entrado a cosas mas especificas:

Código:
/* Programa que encapsula todos los que he echo */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
int pas, opc, opc1, opc2, opc3, opc4, metro, n, a, b, n2, res;
float eki_me=3.24, eki_pu=39.37, foot, in, resul;
char c;
printf ("\t \t \t Bienvenido a Code-Soft\n");
printf ("\n");
printf ("Para poder acceder al programa tipea la contraseña adecuada\n");
scanf ("%d", &pas);

while (pas==456)
{
printf ("Verificando, password\n");
printf ("\t \t********\n");
printf ("\t \t************\n");
printf ("\t \t*****************\n");
printf ("\t \t***********************\n");
printf ("COMPLETE\n");
printf ("\n");
printf ("Precione cualquier tecla para avanzar\n");
scanf ("%c", &c);
getchar();
goto a1;

a1:
system("clear");
printf ("\t \t \t B I E N V E N I D O\n");
printf ("\n");
printf ("En esta aplicacion podras realizar muchas acciones, selecciona la que gustes\n");
printf ("1: Convertidor de medidas\n 2: saber si es positivo o negativo\n 3: operaciones basicas\n 4: saber si es par o impar\n 5: Salir\n");
scanf ("%d", &opc);

switch (opc)
{
a2:
case 1:
system("clear");
printf ("Esta aplicacion sirve para convertir unidades de medida, elige la opcion que tu decees\n");
printf ("\n");
printf ("1: Convertir de metros a pulgadas\n 2: Convertir de metros  a pulgadas\n 3: regresar al menu\n");
scanf ("%d", &opc1);


switch (opc1)
{
case 1:
system("clear");
printf ("\t Escribe la distancia en metros que va hacer convertida\n");
scanf ("%d", &metro);
foot= metro*eki_me;
system("clear");
printf ("la ekivalencia de metros a pies es: %.2f\n", foot);
printf ("\n");
printf ("Precione cualquier tecla para avanzar\n");
scanf ("%c", &c);
getchar();
goto a2;

case 2:
system("clear");
printf ("\t Escribe la distancia en metros que va hacer convertida\n");
scanf ("%d", &metro);
in= metro*eki_pu;
system("clear");
printf ("la ekivalencia de metros a pulgadas es: %.2f\n", in);
printf ("\n");
printf ("Precione cualquier tecla para avanzar\n");
scanf ("%c", &c);
getchar();
goto a2;

case 3:
system("clear");
goto a1;

default:
system("clear");
printf ("Opcion no valida\n");
printf ("\n");
printf ("Precione cualquier tecla para avanzar\n");
scanf ("%c", &c);
getchar();
goto a2;
}
a3:
case 2:
system("clear");
printf ("Esta aplicacion sirve para saber si el numero tecleado es positivo o negativo\n");
printf ("\n");
printf ("1: Saber si es positivo o negativo\n 2: Regresar al menu\n");
scanf ("%d", &opc2);

switch (opc2)
{
case 1:
system("clear");
printf ("Escribe el numero a evaluar\n");
scanf ("%d", &n);
if (n==0)
{
printf ("El puto numero es 0\n");
scanf ("%c", &c);
getchar();
goto a3;
}

else
{
if (n>0)
{
printf ("El numero es positivo\n");
scanf ("%c", &c);
getchar();
goto a3;
}

else
{
printf ("El numero es negativo\n");
scanf ("%c", &c);
getchar();
goto a3;
}
}

case 2:
system("clear");
goto a1;

default:
system("clear");
printf ("Opcion no valida\n");
printf ("\n");
printf ("Precione cualquier tecla para avanzar\n");
scanf ("%c", &c);
getchar();
goto a3;
}

a4:
case 3:
system("clear");
printf ("Bienvenido, aqui podras realizar operaciones basica con dos numeros\n");
printf ("Escoge una opcion \n");
printf ("\n");
printf (" 1= Suma\n 2= Resta\n 3= Multiplicacion\n 4= Divicion\n 5= Regresar al menu\n");
scanf ("%d", &opc3);
switch (opc3)
{
case 1:
system("clear");
printf ("Dijite el primer numero: \n");
scanf ("%d", &a);
printf ("Dijite el segundo numero: \n");
scanf ("%d", &b);
resul= (a+b);
printf ("El resultado de la SUMA es: %.2f", resul);
scanf ("%c", &c);
getchar();
goto a4;

case 2:
system("clear");
printf ("Dijite el primer numero: \n");
scanf ("%d", &a);
printf ("Dijite el segundo numero: \n");
scanf ("%d", &b);
resul= (a-b);
printf ("El resultado de la RESTA es: %.2f", resul);
scanf ("%c", &c);
getchar();
goto a4;

case 3:
system("clear");
printf ("Dijite el primer numero: \n");
scanf ("%d", &a);
printf ("Dijite el segundo numero: \n");
scanf ("%d", &b);
resul= (a*b);
printf ("El resultado de la MULTIPLICACION es: %.2f", resul);
scanf ("%c", &c);
getchar();
goto a4;

case 4:
system("clear");
printf ("Dijite el primer numero: \n");
scanf ("%d", &a);
printf ("Dijite el segundo numero: \n");
scanf ("%d", &b);
resul= (a/b);
printf ("El resultado de la DIVICION es: %.2f", resul);
scanf ("%c", &c);
getchar();
goto a4;

case 5:
system("clear");
goto a1;

default:
printf ("Opcion no valida\n");
scanf ("%c", &c);
getchar();
goto a4;
}

a5:
case 4:
system("clear");
printf ("Bienvenido, aqui podras evaluar un numero y saber si es par o impar\n");
printf ("Escoge una opcion \n");
printf ("\n");
printf (" 1= Evaluar un numero\n 2= Regresar al menu\n");
scanf ("%d", &opc4);
switch (opc4)
{
case 1:
system("clear");
printf ("Escribe el numero a evaluar\n");
scanf ("%d", &n2);
res= n2%2;
if (res==0)
{
printf ("El numero %d es PAR", n2);
}
else
{
printf ("El numero %d es IMPAR", n2);
}
scanf ("%c", &c);
getchar();
goto a5;

case 2:
system("clear");
goto a1;

default:
printf ("Opcion no valida\n");
scanf ("%c", &c);
getchar();
goto a4;
}

case 5:
system("clear");
exit(0);
getchar();
getchar();
break;

}

}
exit(0);
getchar();
getchar();

return 0;
}

Si ven el codigo, se pueden dar cuenta que la dichosa contraseña es 456, mi pregunta es esta, habra algun modo, de que C lea una contrasea escrita, como "mi contraseña", lo intente y no pude, espero y alguien pueda ayudarme, ah y tambien algunos comentarios sobre el codigo, si estoy asiendo algo mal, gracias agradezco todo.....


En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
exel

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: Mi primero pograma en C!
« Respuesta #1 en: 2 Mayo 2012, 00:47 am »

Hola

 He visto el codigo y tengo las siguientes observaciones:

Citar
Utilizas mucho la funcion getchar() innecesariamente, especialmente al final del codigo

He encontrado muchos errores ortograficos

OTROS ERRORES:
linea 44; la opcion 1 y 2 son las mismas. La opcion 1 es de metros a pies
linea 55; no abuses de la funcion para limpiar la pantalla
linea 160,172,184,196; si solo sumas numeros enteros, para que utilizas una variable float como refult
linea 196; que sucede si la variable b es igual a cero
linea 248; deberia ser goto a5, y no goto a4
linea 252; linea innecesaria

Para que goto? Linea 27-29. No deberias usar goto para saltar de un cuerpo de seleccion o iteracion a otro. No es aconsejable utilizar goto dentro de switch: el goto deberia ir debajo del case
Por ultimo te aconsejo no utilizar goto porque dicha funcionalidad vuelve innentendible cualquier codigo y es considerado una mala practica.

Para los puristas en C es preferible utlizar if y no switch.

Para que utilizar tantas variables opc1,opc2,opc3,opc4 si al final cumplen la misma funcion.

n y n2 cumplen escencialmente la misma funcion.

foot,in y resul cumplen escencialmente la misma funcion. Sin embargo son variables float innecesariamente, y si fueran variablen int entonces la variable res tambian cumpliria la misma funcion.

En el cuerpo de cualquier funcion, iteracion, o seleccion no deberia haber mas codigo depues de invocar a exit(0) ya que no se ejecuta y por lo tanto es innecesario; observa al final del codigo.

Es conveniente que te acostumbres a identar el codigo; cuanto mas lineas tenga, mas confuso sera entenderlo sin perderse.

En cuanto al tema de la contraseña existen muchas formas de aplicar la solucion dependiendo del nivel de proteccion que quieras dar; la mas sencilla es esta: strcmp()

Código
  1.  
  2.  
  3. //ejemplo de uso de strcmp() de la biblioteca estandar "string.h" para comparar dos cadenas
  4.  
  5. char pass[MAX_CHAR];
  6.  
  7. ...
  8.  
  9. printf("Introduzca password: ");
  10. fgets(pass,MAX_CHAR,stdin);
  11.  
  12. if(strcmp(pass,"batman es mi vecino")==0)
  13. {
  14. //contraseña verdadera
  15. }else
  16. {
  17. //contraseña falsa
  18. }
  19.  


« Última modificación: 2 Mayo 2012, 00:58 am por exel » En línea

barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Mi primero pograma en C!
« Respuesta #2 en: 2 Mayo 2012, 02:08 am »

Guaaoo! realmente se ve que sabes mucho, gracias por todas las observaciones, las tomare en cuenta para modificar el codigo y hacerlo mas reducido y entendible, y gracias por el codigo de las contraseña, tenia una idea que era comparar cadenas pero no sabia, y si no es mucha molestia, lo intente compilar y me marca dos errores mira:

Código:
#include <stdio.h>
#include <string.h>
int main ()
{
char pass[MAX_CHAR];
 
printf("Introduzca password: \n");
fgets(pass,MAX_CHAR,stdin);
 
if(strcmp(pass,"batman es mi vecino")==0)
{
printf ("Contraseña verdadera\n");

}
else
{
printf ("La contraseña es incorrecta\n");
}
}

Lo que el compilador dice es:
Citar
paaass.c:5:12: error: ‘MAX_CHAR’ no se declaró aquí (primer uso en esta función)
paaass.c:5:7: aviso: variable ‘pass’ sin usar [-Wunused-variable]
paaass.c:19:1: aviso: el control alcanza el final de una función que no es void [-Wreturn-type]
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
exel

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: Mi primero pograma en C!
« Respuesta #3 en: 2 Mayo 2012, 02:51 am »

 Como dice: MAX_CHAR no esta definida y por lo tanto hay que hacerlo. Es comun que los nombres en MAYUSCULAS sean constantes declaradas con la sentencia #define como muestro a continuacion.

 Otro error es que main() (el cuerpo principal) como es una funcion, debe retornar un valor entero como lo muestra la linea 5. Es por eso que al final hay que agregar un return o un exit() como tu lo haces.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX_CHAR 100
  4.  
  5. int main ()
  6. {
  7. char pass[MAX_CHAR];
  8.  
  9. printf("Introduzca password: \n");
  10. fgets(pass,MAX_CHAR,stdin);
  11.  
  12. if(strcmp(pass,"batman es mi vecino")==0)
  13. {
  14. printf ("Contraseña verdadera\n");
  15.  
  16. }
  17. else
  18. {
  19. printf ("La contraseña es incorrecta\n");
  20. }
  21. return 0;
  22. }
  23.  

Nose cuanto tiempo llevas con C, pero si es tu primer programa eso quiere decir que avanzas rapido. Bien por ti
« Última modificación: 2 Mayo 2012, 02:59 am por exel » En línea

barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Mi primero pograma en C!
« Respuesta #4 en: 2 Mayo 2012, 05:22 am »

Olaa gracias realmente por responder en serio...!! pues como veras aun me estoy afinando en esto, aqui mismo en el foro encontre buenos libros, y con las preguntas y respuestas uno se ayuda jejeje  ;D pero igual, empece en C el ase como 4 dias, aunque no es mi primer pograma, habia echo otros pero de forma sencilla, ya sabes el "Hola, mundo!" y eso pero pues este es que siento que fue el mas estable y tambien el que me costo mas, todo un dia de trabajo, es por eso que decidi publicarlo, para recabar opiones asi como la tuya, que por cierto es muy buena exel! y con mi entorno de trabajo el Geany en ubuntu es bueno, o talvez deberia usar uno mas complejo, por decirlo asi, un primo mio usa, pero en windows uno que se llama LABWINDOWS\CVI2010 aunque es muy pesado, para ser solo de C/C++ tiene un buen entorno de trabajo, para insertar estructuras o sentencias, el porgrama mismo lo ase y solo el usuario rellena, aparte tambien se le puede poder GUI al programa escrito, directamente ahi, como si usaras Dremweaver, bueno gracias de nuevo por ayudarme, jejeje gracias en serio!!  ;-)
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Pograma online...
Programación Visual Basic
GaMeouT 5 2,261 Último mensaje 19 Febrero 2008, 21:11 pm
por [{O_o}]
Editar Codigo Hexadecimal desde mi pograma VB
Programación Visual Basic
GaMeouT 8 6,090 Último mensaje 4 Febrero 2008, 12:55 pm
por Hendrix
ayuda con mi pograma solo me falta una pequeñes
Scripting
alejandro el pogramador 0 1,552 Último mensaje 20 Febrero 2012, 19:17 pm
por alejandro el pogramador
primero el diseño web o javascript?
Desarrollo Web
aixeiger 3 2,011 Último mensaje 10 Abril 2013, 17:44 pm
por mordrake
Primero en Entrar, primero en salir FIFO, Cola o Fila
Programación C/C++
AlbertoBSD 9 3,518 Último mensaje 3 Diciembre 2018, 00:01 am
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines