Mostrando entradas con la etiqueta C. Mostrar todas las entradas
Mostrando entradas con la etiqueta C. Mostrar todas las entradas

lunes, 22 de octubre de 2012

Estructuras de control en C: switch

Si queremos ver varios posibles valores, sería muy pesado tener que hacerlo con muchos “if” seguidos o encadenados. La alternativa es la orden “switch”, cuya sintaxis es
switch (expresión)
{
   case valor1: sentencia1;
     break;
   case valor2: sentencia2;
     sentencia2b;
     break;
   ...
   case valorN: sentenciaN;
     break;
   default:
     otraSentencia;
};


Es decir, se escribe tras “switch” la expresión a analizar, entre paréntesis. Después, tras varias órdenes “case” se indica cada uno de los valores posibles. Los pasos (porque pueden ser varios) que se deben dar si se trata de ese valor se indican a continuación, terminando con “break”. Si hay que hacer algo en caso de que no se cumpla ninguna de las condiciones, se detalla tras “default”.
Vamos con un ejemplo:
 


#include <stdio.h>
 
int main()
{
  char tecla;
 
  printf("Pulse una tecla y luego Intro: ");
  scanf("%c", &tecla);
  switch (tecla)
  {
    case ' ': printf("Espacio.\n");
              break;
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    case '0': printf("Dígito.\n");
              break;
    default:  printf("Ni espacio ni dígito.\n");
  }
 
  return 0;
}



Fuente
Curso de programación en C por Nacho Cabanes

miércoles, 17 de octubre de 2012

Estructuras Repetitivas en C: while y do... while

-while
Si queremos hacer que una sección de nuestro programa se repita mientras se cumpla una cierta condición, usaremos la orden “while”. Esta orden tiene dos formatos distintos, según comprobemos la condición al principio o al final.
En el primer caso, su sintaxis es
while (condición)
   sentencia;
Es decir, la sentencia se repetirá mientras la condición sea cierta. Si la condición es falsa ya desde un principio, la sentencia no se ejecuta nunca. Si queremos que se repita más de una sentencia, basta agruparlas entre { y }. Como ocurria con "if", puede ser recomendable incluir siempre las llaves, aunque sea una única sentencia, para evitar errores posteriores difíciles de localizar.
Un ejemplo que nos diga si cada número que tecleemos es positivo o negativo, y que pare cuando tecleemos el número 0, podría ser:
 

#include <stdio.h> int main() { int numero; printf("Teclea un número (0 para salir): "); scanf("%d", &numero); while (numero!=0) { if (numero > 0) printf("Es positivo\n"); else printf("Es negativo\n"); printf("Teclea otro número (0 para salir): "); scanf("%d", &numero); } return 0; }
 
En este ejemplo, si se introduce 0 la primera vez, la condición es falsa y ni siquiera se entra al bloque del “while”, terminando el programa inmediatamente.
Nota: si recordamos que una condición falsa se evalúa como el valor 0 y una condición verdadera como una valor distinto de cero, veremos que ese “while (numero != 0)” se podría abreviar como “while (numero)”.

-do ... while

Este es el otro formato que puede tener la orden “while”: la condición se comprueba al final. El punto en que comienza a repetirse se indica con la orden “do”, así:
do
sentencia;
while (condición);
Al igual que en el caso anterior, si queremos que se repitan varias órdenes (es lo habitual), deberemos encerrarlas entre llaves. Nuevamente, puede ser recomendable incluir siempre las llaves, como costumbre.
Como ejemplo, vamos a ver cómo sería el típico programa que nos pide una clave de acceso y nos nos deja entrar hasta que tecleemos la clave correcta. Eso sí, como todavía no sabemos manejar cadenas de texto, la clave será un número:
 

#include <stdio.h> int main() { int valida = 711; int clave; do { printf("Introduzca su clave numérica: "); scanf("%d", &clave); if (clave != valida) printf("No válida!\n"); } while (clave != valida); printf("Aceptada.\n"); return 0; }
 
En este caso, se comprueba la condición al final, de modo que se nos preguntará la clave al menos una vez. Mientras que la respuesta que demos no sea la correcta, se nos vuelve a preguntar. Finalmente, cuando tecleamos la clave correcta, el ordenador escribe “Aceptada” y termina el programa.

Fuente de información:

sábado, 13 de octubre de 2012

Ejemplo Ejercicio #3 Lenguaje C: for

Hacer un programa de tablas de multiplicar utilizando la sentencia "for" con menú principal con las siguientes opciones:
1) Realizar la tabla del 2.
2) Realizar múltiples tablas.
3) Realizar tablas introduciendo los límites.

Programa en ejecución:


Códigos:


/* Solución Ejercicio #3 Lenguaje C por Johnel Santil */ #include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { system("color 80"); // Menú de opciones int a, b, bi, bf, c, x; printf("-------------------------------------------------------------------------------\n"); printf("|-----------------------> JOHNEL SANTIL DEL ROSARIO <-----------------------|\n"); printf("|----------------------------> 10-SISM-1-045 <-----------------------------|\n"); printf("|-----------------------------> SECCION 0742 <------------------------------|\n"); printf("-------------------------------------------------------------------------------\n"); printf("|------------------> PROGRAMA DE TABLAS DE MULTIPLICAR <-------------------|\n"); printf("-------------------------------------------------------------------------------\n\n"); printf(" <---[ MENU DE OPCIONES ]---> \n\n"); printf("]-----> DIGITE (1) PARA REALIZAR TABLA DEL 2 \n\n"); printf("]----------> DIGITE (2) PARA REALIZAR MULTIPLES TABLAS \n\n"); printf("]-----------------> DIGITE (3) PARA REALIZAR TABLAS INTRODUCIENDO LOS LIMITES \n\n"); printf("________________________________________________________________________________\n\n\n"); printf("Digite su opcion con uno de los numeros indicados: "); scanf("%d", &x); if (x==1) { // Primera opción system("cls"); printf("\n----------------------> TABLA DE MULTIPLICAR DEL 2 <------------------------\n\n"); for (a=2; a==2; a++) { for (b=1; b<=12; b++) printf(" %d X %d = %d\n", a, b, a*b); printf("\n\n\n"); printf("]-----------> PRESIONE CUALQUIER TECLA PARA SALIR "); } getch(); } if (x==2) { // Segunda opción system("cls"); printf("---------------------------> MULTIPLES TABLAS <----------------------------\n\n"); for(a = 1; a <= 12; a++) { printf("========================\n"); for (b = 1; b <= 12; b++) { c = a * b; printf(" %d x %d = %d \n",a, b, c); } } printf("\n\n]-----------> PRESIONE CUALQUIER TECLA PARA SALIR "); getch(); } if (x==3) { // Tercera opción system("cls"); printf("---------------------> TABLA INTRODUCIENDO LOS LIMITES <---------------------\n\n"); printf("Digite de cual numero sera la tabla: "); scanf("%d", &bi); printf("\nAhora digite hasta que numero seran los multiplicadores: "); scanf("%d", &bf); printf("\n\n"); if (bi <= bf) { printf("> ESTA ES LA TABLA DE MULTIPLICAR DEL NUMERO %d MULTIPLICADO HASTA EL %d <\n",bi,bi, bf); printf("-------------------------------------------------------------------------------\n"); for(a = bi; a <= bf; a++) { c = bi * a; printf(" %d x %d = %d \n", bi, a, c); } printf("\n\n"); printf("]----------->PRESIONE CUALQUIER TECLA PARA SALIR"); getch(); } else { // Mensaje de error 2 system("cls"); system("color 9f"); printf("\n-----------------------------> PANTALLAZO AZUL <-------------------------------\n\n"); printf("-------------------------------------------------------------------------------\n\n\n"); printf(" ERROR FATAL 2:\n\n"); printf("El valor que con el que va a hacer la multiplicacion es mayor que el valor de\n"); printf("hasta donde quiere hacer la multiplicacion\n\n\n"); printf("]------------>PRESIONE CUALQUIER TECLA PARA SALIR"); getch(); } } else if (x>3) { // Mensaje de error 1 system("cls"); system("color 9f"); printf("\n-----------------------------> PANTALLAZO AZUL <-------------------------------\n\n"); printf("-------------------------------------------------------------------------------\n\n\n"); printf(" ERROR FATAL 1:\n\n"); printf("Usted ha elegido una opcion invalida ya que no es una de las opciones propuestas\n\n"); printf("]------------>PRESIONE CUALQUIER TECLA PARA SALIR"); getch(); } }

sábado, 6 de octubre de 2012

Estructuras Repetitivas en C: for


Ésta es la orden que usaremos habitualmente para crear partes del programa que se repitan un cierto número de veces. El formato de “for” es
for (valorInicial; CondiciónRepetición; Incremento)
  Sentencia;
Así, para contar del 1 al 10, tendríamos 1 como valor inicial, <=10 como condición de repetición, y el incremento sería de 1 en 1. Por tanto, el programa quedaría:


#include <stdio.h> int main() { int contador; for (contador=1; contador<=10; contador++) printf("%d ", contador); return 0; }
Recordemos que “contador++” es una forma abreviada de escribir “contador=contador+1”, de modo que en este ejemplo aumentamos la variable de uno en uno.

En un “for”, realmente, la parte que hemos llamado “Incremento” no tiene por qué incrementar la variable, aunque ése es su uso más habitual. Es simplemente una orden que se ejecuta cuando se termine la “Sentencia” y antes de volver a comprobar si todavía se cumple la condición de repetición.
Por eso, si escribimos la siguiente línea:
for (contador=1; contador<=10; )
la variable “contador” no se incrementa nunca, por lo que nunca se cumplirá la condición de salida: nos quedamos encerrados dando vueltas dentro de la orden que siga al “for”.
Un caso todavía más exagerado de algo a lo que se entra y de lo que no se sale sería la siguiente orden:
for ( ; ; )

Los bucles “for” se pueden anidar (incluir uno dentro de otro), de modo que podríamos escribir las tablas de multiplicar del 1 al 5 con:
 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); return 0; }
 
En estos ejemplos que hemos visto, después de “for” había una única sentencia. Si queremos que se hagan varias cosas, basta definirlas como un bloque (una sentencia compuesta) encerrándolas entre llaves. Por ejemplo, si queremos mejorar el ejemplo anterior haciendo que deje una línea en blanco entre tabla y tabla, sería: 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) { for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); printf("\n"); } return 0; }
Al igual que ocurría con "if" y con "while", suele ser buena costumbre incluir siempre las llaves, aunque haya una única orden que se repita en el "for", para evitar funcionamientos incorrectos si después hay que añadir más sentencias que deban repetirse y se olvida incluir las llaves en ese momento.

Para “contar” no necesariamente hay que usar números. Por ejemplo, podemos contar con letras así:
 

#include <stdio.h> int main() { char letra; for (letra='a'; letra<='z'; letra++) printf("%c", letra); return 0; }
 
En este caso, empezamos en la “a” y terminamos en la “z”, aumentando de uno en uno.

Si queremos contar de forma decreciente, o de dos en dos, o como nos interese, basta indicarlo en la condición de finalización del “for” y en la parte que lo incrementa:
 

#include <stdio.h> int main() { char letra; for (letra='z'; letra>='a'; letra-=2) printf("%c", letra); return 0; }
Ésta es la orden que usaremos habitualmente para crear partes del programa que se repitan un cierto número de veces. El formato de “for” es
for (valorInicial; CondiciónRepetición; Incremento)
  Sentencia;
Así, para contar del 1 al 10, tendríamos 1 como valor inicial, <=10 como condición de repetición, y el incremento sería de 1 en 1. Por tanto, el programa quedaría:
 

#include <stdio.h> int main() { int contador; for (contador=1; contador<=10; contador++) printf("%d ", contador); return 0; }
 
Recordemos que “contador++” es una forma abreviada de escribir “contador=contador+1”, de modo que en este ejemplo aumentamos la variable de uno en uno.

En un “for”, realmente, la parte que hemos llamado “Incremento” no tiene por qué incrementar la variable, aunque ése es su uso más habitual. Es simplemente una orden que se ejecuta cuando se termine la “Sentencia” y antes de volver a comprobar si todavía se cumple la condición de repetición.
Por eso, si escribimos la siguiente línea:
for (contador=1; contador<=10; )
la variable “contador” no se incrementa nunca, por lo que nunca se cumplirá la condición de salida: nos quedamos encerrados dando vueltas dentro de la orden que siga al “for”.
Un caso todavía más exagerado de algo a lo que se entra y de lo que no se sale sería la siguiente orden:
for ( ; ; )

Los bucles “for” se pueden anidar (incluir uno dentro de otro), de modo que podríamos escribir las tablas de multiplicar del 1 al 5 con:
 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); return 0; }
 
En estos ejemplos que hemos visto, después de “for” había una única sentencia. Si queremos que se hagan varias cosas, basta definirlas como un bloque (una sentencia compuesta) encerrándolas entre llaves. Por ejemplo, si queremos mejorar el ejemplo anterior haciendo que deje una línea en blanco entre tabla y tabla, sería: 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) { for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); printf("\n"); } return 0; }
 
Al igual que ocurría con "if" y con "while", suele ser buena costumbre incluir siempre las llaves, aunque haya una única orden que se repita en el "for", para evitar funcionamientos incorrectos si después hay que añadir más sentencias que deban repetirse y se olvida incluir las llaves en ese momento.

Para “contar” no necesariamente hay que usar números. Por ejemplo, podemos contar con letras así:
 

#include <stdio.h> int main() { char letra; for (letra='a'; letra<='z'; letra++) printf("%c", letra); return 0; }
 
En este caso, empezamos en la “a” y terminamos en la “z”, aumentando de uno en uno.

Si queremos contar de forma decreciente, o de dos en dos, o como nos interese, basta indicarlo en la condición de finalización del “for” y en la parte que lo incrementa:
 

#include <stdio.h> int main() { char letra; for (letra='z'; letra>='a'; letra-=2) printf("%c", letra); return 0; }

Fuente:

-Curso de Programación en C por Nacho Cabanes

viernes, 5 de octubre de 2012

Ejemplo Ejercicio #2 Lenguaje C: IF

Solución al programa para realizar operaciones aritméticas y mostrar información de asignaturas a través de un menú, utilizando la sentencia "IF".

Códigos:
/* Ejercicio #2 Programa para realizar operaciones aritméticas y mostrar información de asignaturas a través de un menu, utilizando la sentencia "IF" Realizado por Joan Manuel del Rosario */ #include <stdio.h> #include <conio.h> main() { printf(" \n"); printf("<><><><><><><><><><><><><><><><><> \n \n"); printf("INFORMACION DEL ESTUDIANTE \n \n"); printf("Joan Manuel del Rosario Bautista \n"); printf("10-SISM-1-041 \n"); printf("0742 \n"); printf("<><><><><><><><><><><><><><><><><> \n \n"); int a,b,c,p,y,x; printf("<><> MENU PRINCIPAL <><> \n \n"); printf(" SELECCIONE SU OPCION \n \n"); printf("1- Operaciones Aritmeticas \n"); printf("2- Materias de la seccion 0742 \n"); scanf("%d", &x); if(x==1) { system("cls"); printf(" \n"); printf("OPERACIONES ARITMETICAS \n"); printf(" SELECCIONE SU OPCION \n \n"); printf("1- Suma \n"); printf("2- Resta \n"); printf("3- Multiplicacion \n"); printf("4- Division \n \n"); scanf("%d", &p); if(p==1) { system("cls"); printf(" \n"); printf("SELECCION DE SUMA \n \n"); printf("Introducir primer valor: \n"); scanf("%d", &a); printf("Introducir segundo valor: \n"); scanf("%d", &b); c = a + b; printf("%d + %d = %d \n \n", a,b,c); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } // Cerrar la 2da llave cuando termine la operacion de resta, para que el programa no se corra a LAS MATERIAS DE LA SECCION 0742. if(p==2) { system("cls"); printf(" \n"); printf("SELECCION DE RESTA \n \n"); printf("Introducir primer valor: \n"); scanf("%d", &a); printf("Introducir segundo valor: \n"); scanf("%d", &b); c = a - b; printf("%d - %d = %d \n \n", a,b,c); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } } if(p==3) { system("cls"); printf(" \n"); printf("SELECCION DE MULTIPLICACION \n \n"); printf("Introducir primer valor \n"); scanf("%d", &a); printf("Introducir segundo valor \n"); scanf("%d", &b); c = a * b; printf("%d * %d = %d \n \n", a,b,c); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } else if(p==4) { system("cls"); printf(" \n"); printf("SELECCION DE DIVISION \n \n"); printf("Introducir primer valor \n"); scanf("%d", &a); printf("Introducir segundo valor \n"); scanf("%d", &b); c = a / b; printf("%d / %d = %d \n \n", a,b,c); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } else if(x == 2) { system("cls"); printf(" \n"); printf("<><> MATERIAS DE LA SECCION 0742 <><> \n \n"); printf("SELECCIONE SU OPCION \n \n"); printf("1- SISTEMAS Y PROCEDIMIENTOS II \n"); printf("2- FUNDAMENTO DE ELECTRICIDAD Y ELECTRONICA \n"); printf("3- LENGUAJE C \n"); printf("4- ALGORITMOS COMPUTACIONALES \n"); printf("5- ESTADISTICA II \n"); scanf("%d", &y); } if (y==1) { system("cls"); printf("SELECCION DE: SISTEMAS Y PROCEDIMIENTOS II \n \n"); printf("La finalidad del estudio de sistemas y procedimientos administrativos es ayudar"); printf("a las altas gerencias a planear y obtener las metas de la organización, a que haga"); printf("del conocimiento general lo que se persigue, y contribuir a que el personal"); printf("pueda satisfacer esos deseos. \n \n"); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } else if (y==2) { system("cls"); printf("SELECCION DE: FUNDAMENTO DE ELECTRICIDAD Y ELECTRONICA \n \n"); printf("La finalidad del estudio de fundamento de electricidad y electronica es "); printf("tener los conocimientos basicos de la electronica y sus principios. \n \n"); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } else if (y==3) { system("cls"); printf("SELECCION DE: LENGUAJE C \n \n"); printf("Dispone de las estructuras típicas de los lenguajes de alto nivel pero, \n"); printf("a su vez, dispone de construcciones del lenguaje que permiten un control \n"); printf("a muy bajo nivel, es un lenguaje general que abre campos hacia los lenguajes de alto nivel. \n \n"); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } else if (y==4) { system("cls"); printf("SELECCION DE: ALGORITMOS COMPUTACIONALES \n \n"); printf("Es un conjunto ordenado y finito de pasos para resolver un problema específico."); printf("Para llegar a la realización de un programa es necesario el diseño previo de algoritmo,"); printf("de modo que sin algoritmo no puede existir un programa. \n \n"); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } else if (y==5) { system("cls"); printf("SELECCION DE: ESTADISTICA II \n \n"); printf("es una ciencia formal que estudia la recolección, análisis e interpretación de datos de una muestra representativa,"); printf("ya sea para ayudar en la toma de decisiones o para explicar condiciones regulares o irregulares de algún fenómeno o estudio"); printf("aplicado, de ocurrencia en forma aleatoria o condicional. \n \n"); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } if (x>2) { printf(" \n"); printf("<><> LA OPCION SELECCIONADA NO EXISTE <><> \n"); printf("<><> POR FAVOR, INTENTE DE NUEVO \n \n"); printf("<><> PRESIONE ENTER PARA SALIR <><>"); getch(); } }

Programa ejecutado: