Autor
|
Tema: Mi primero pograma en C! (Leído 3,732 veces)
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
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: /* 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
Mensajes: 50
|
Hola He visto el codigo y tengo las siguientes observaciones: 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() //ejemplo de uso de strcmp() de la biblioteca estandar "string.h" para comparar dos cadenas char pass[MAX_CHAR]; ... printf("Introduzca password: "); fgets(pass ,MAX_CHAR ,stdin ); if(strcmp(pass ,"batman es mi vecino")==0) { //contraseña verdadera }else { //contraseña falsa }
|
|
« Última modificación: 2 Mayo 2012, 00:58 am por exel »
|
En línea
|
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
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: #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: 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
Mensajes: 50
|
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. #include <stdio.h> #include <string.h> #define MAX_CHAR 100 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"); } return 0; }
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
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
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 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[AYUDA] Pograma online...
Programación Visual Basic
|
GaMeouT
|
5
|
2,259
|
19 Febrero 2008, 21:11 pm
por [{O_o}]
|
|
|
Editar Codigo Hexadecimal desde mi pograma VB
Programación Visual Basic
|
GaMeouT
|
8
|
6,065
|
4 Febrero 2008, 12:55 pm
por Hendrix
|
|
|
ayuda con mi pograma solo me falta una pequeñes
Scripting
|
alejandro el pogramador
|
0
|
1,550
|
20 Febrero 2012, 19:17 pm
por alejandro el pogramador
|
|
|
primero el diseño web o javascript?
Desarrollo Web
|
aixeiger
|
3
|
2,004
|
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,462
|
3 Diciembre 2018, 00:01 am
por CalgaryCorpus
|
|