Tutorial De Introduccion A La Programacion Estructurada En C

Iniciado por Xa0s, Junio 11, 2010, 02:25:11 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Ok. He decidido ir creando de a poco un tutorial sobre C que comenzará desde 0.
Si no saben absolutamente nada sobre C entonces este es el momento perfecto para comenzar a aprender siguiendo este tutorial.
Antes que nada voy a aclarar que lo estoy haciendo exclusivamente para las webs a las que pertenzco asi que si alguien lo toma, menciona el autor y la fuente. No es muy dificil.
Ok. Les dire mas o menos como va el plan. Dividire este tutorial en 6 partes. Publicare una parte por semana. Si puedo publicar mas seguiro pues asi sera (probablemente pueda adelantar bastante fines de semana).
Las 6 partes del tutorial iran colocadas como respuesta a este hilo que acabo de crear.
Aquella persona que tenga dudas, por favor no responda aqui sino que cree un tema nuevo. Una vez que termine las 6 partes cerrare el tema.
Le pido a algun moderador global o administrador que ahiera este tema ya que podra ayudar mucho a los interesados en aprender a adentrarse en lo que es C ya que como no modero este area yo no puedo hacerlo  ::).
Ok. Les dire como seran los titulos de los temas:

1. Teoria Del Lenguaje C/C++
2. Cadenas De Caracteres
3. Funciones
4. Punteros
5. Arreglos
6. Caracteres
Y por ultimo cuando ya terminemos todo les dejare una serie de ejercisios. Los ejercicios que les dejare seran ejemplos de parciales y finales tomados de mi universidad asi que tendran cierto nivel (supongo).

Para todo lo que hagamos YO PERSONALMENTE trabajo con el compilador Dev C++. Aqui se los dejo para que lo descarguen si quieren:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ok... Esta es la presentacion, intentare dejar listo para esta noche el primer tema asi pueden ir comenzando a leer los interesados.
Ante cualquier consulta repito crean un tema nuevo o pueden agregarme a mi msn No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o escribirme.

Suerte!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PARTE 1: TEORIA DEL LENGUAJE C/C++

Como es algo muy largo no pondre todo en 1 solo post. Lo hare en varios.

a) El Clásico "Hola Mundo"

Para comenzar vamos a decir que C es un lenguaje que facilita un metodo estructurado para el diseño de aplicaciones.
Al comenzar este tutorial voy a suponer que ya tienen el compilador a mano y ganas de aprender.
No vamos a perder el tiempo hablando de toda la historia de C. Vamos a comenzar por lo que nos interesa. Y como en todo lenguaje lo primero que haremos es un "Hola Mundo"

Código: c
/* Nuestro primer programa
hecho en C */
#include <stdio.h>
#include <conio.h>
main()
{
printf("Hola Mundo");
getch();
}


Bueno ahora comencemos a explicar.
En una aplicacion en C podemos dejar comentarios dentro de la misma. Esto sirve por ejemplo para cuando hagamos una aplicacion indicar cada paso para cuando veamos en otro momento el codigo nos sea mas facil ubicar todo. O si hacemos un codigo que luego vera otra persona ya que no todos programamos de la misma manera.
En C podemos insertar 2 tipos de comentarios.
Los comentarios que solo tienen 1 linea se ponen luego de 2 barras (//) Por ejemplo:

Código: c
// Esto es un comentario


Ahora. Si nuestro comentario tiene mas de una linea, comenzamos con /* y terminamos con */ Por ejemplo, el comentario que pusimos al principio de nuestro Hola Mundo que fue:

Código: c
/* Nuestro primer programa
hecho en C */


La línea:

Código: c
#include <stdio.h>


Es una libreria que utiliza C. C ya tiene ciertas bibliotecas desarrolladas y guardadas que sirven para entrada y salida de datos, strings, problemas matematicos, etc....
Las lineas que se inician con # son ejecutadas por el procesador antes de la compilacion del programa indicandole que debe incluir el contenido del archivo stdio.h
En el caso de stdio.h contiene funciones que luego vamos a utilizar en el hola mundo como el printf y otro tambien muy utilizado pero que en este caso no lo usamos que es el scanf que ya lo veremos.

La libreria conio.h la debemos declarar porque utilizamos la funcion getch que esta incluida dentro de dicha libreria.

La linea:

Código: c
main()


forma parte de toda aplicacion que hagamos en C. Los parentesis significan que es un bloque constructivo conocido como funcion.
Simpre, todos los programas que hagamos en C comienzan a ejecutarse por el main.
Todas las acciones que se realicen iran entre corchetes los cuales podran ver se abren en la linea de abajo y se cierra al finalizar la aplicacion.

Ahora vamonos a todas las acciones que se realizan dentro del bloque main. Podemos encontrar la linea:

Código: c
printf("Hola Mundo");


La fucion printf sirve para mostrar algo en la pantalla. En este caso mostramos Hola Mundo, lo cual va escrito entre parentesis y comillas dobles.
Luego de cada accion se debe finalizar con un punto y coma, siempre.
La siguiente linea que encontramos es:

Código: c
getch();


Esta funcion que se incluye dentro de la libreria conio.h lo que hace es congelar la pantalla. De este modo nos queda la consola mostrandonos el mensaje "Hola Mundo" hasta que presionemos una tecla y en ese momento prosigue.
Como luego del getch(); cerramos la llave del bloque main y terminamos el programa, cuando presionen una tecla la aplicacion finalizara.
Si no incluimos el getch(); la aplicacion correria y al no quedar congelada se cerraria rapidamente y no podriamos alcanzar a leer el "Hola Mundo"...

Muy bien los invito a que practiquen y hagan experimentos hasta aqui... ya vamos avanzando de a poco. Acaban de hacer su primera aplicacion en C
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

b) Printf, Scanf, Variables y Tipos de Variables

Ok. Ahora veremos un poco mas en profundidad las funciones de stdio.h printf y scanf y nos introduciremos en lo que son las variables y los tipos de variables existentes en C.

Anteriormente hemos mostrado en pantalla la palabra "Hola Mundo".. pero que pasa si le queremos dar un formato un poco mejor?. Para eso usaremos el caracter de escape que es una barra invertida (\) y combinada con otro caracter nos puede servir para ciertas cosas:

Código: c
\n // Para bajar una linea
\t // Tabulador Horizontal
\\ // Imprime una barra invertida
\ " // Imprime una comilla doble
\% // Imprime el simbolo %


Por ejemplo:

Código: c
printf("Me llamo Bernardo, Mi nick es Xa0s.\nNaci el dia 13\\02\\92");


Con este codigo lo que hariamos seria imprimir:

Me llamo Bernardo, Mi nick es Xa0s
Naci el dia 13\02\92

Insertando un salto de linea y las barras invertidas de la fecha tal como lo he indicado arriba.

Bueno. Ahora que ya hemos explicado un poco mejor lo que es printf antes de pasar a scanf vamos a aprender un poco de variables.
Las variables son cadenas de caracteres que deben tener entre 1 y 32 digitos. Se aceptan guiones bajos.. Por ejemlo una variable llamada "rt_hacker" seria correcta. Tambien se aceptan numeros pero no pueden comenzar con un numero.
Es importante decir que C distingue mayusculas y minusculas por lo que si hablamos de la variable XA0S es distinto a hablar de xa0s.
Que son las variables?. Las variables son entonces una cadena de caracteres en la cual podemos guardar algun tipo de dato que luego necesitaremos utilizar.

Las variables se declaran del siguiente modo:

Tipo Nombre_de_variable

Los tipos de variables definen cuantos bytes se reservaran en memoria para almacenar el dato.
Las variables pueden ser:

  • ENTERAS: Numero sin decimales entre -32.768 y 32.767. Estas variables reciben el nombre int, ocupan 2 bytes y el formato que utilizaremos sera %d (ya veremos para que sirven los formatos)
  • ENTERO LARGO: Numero sin decimales cuando necesitamos almacenar cantidades mas grandes que con los enteros. Se llaman long, ocupan 4 bytes y su formato es %ld
  • PUNTO FLOTANTE: Numeros con hasta 6 decimales. Se llama float, ocupa 6 bytes y su formato es %f
  • DOBLE PUNTO FLOTANTE: Numeros con hasta 10 decimales. Se llaman double. Ocupan 8 bytes y si formato es %lf
  • CARACTER: Un solo caracter. Se llama char, ocupa 1 byte y su formato es %c
  • STRING: Cadena de caracteres. Se llama string. La palabra que se utiliza es char[n] donde n es el numero maximo de caracteres. Ocupa tantos bytes como caracteres y su formato es %s

    Muy bien estos son todos los tipos de variables ahora declaremos una de cada una para dar un ejemplo:

    Código: c
    int numero; // Declaramos una variable entera llamada numero
    long nu_mero; // Declaramos un entero largo llamado nu_mero
    float num3ro; // Declaramos un punto flotante llamado num3ro
    double Numero; // Declaramos un doble punto flotante llamado Numero
    char caracter; // Declaramos un caracter llamado caracter
    char caracter25[25]; // Declaramos una cadena de caracteres de un maximo de 25, reservando 25bytes en memoria llamada caracter25.


    Es importante notar que luego de declarar las variables pusimos un punto y coma (;). SIEMPRE luego de una accion va el punto y coma.

    Ahora vamos a hacer un ejercicio en el que pedimos a una persona que ingrese un numero entero y mostramos un mensaje en antalla que diga "El numero que usted ha elegido es: X"

    Código: c
    #include <stdio.h>
    #include <conio.h>
    int a;
    main()
    {
    printf("Por favor ingrese un numero...\n");
    scanf("%d",&a);
    printf("\n\nEl numero que usted ha elegido es: %d", a);
    getch();
    }


    Bueno. Ya hemos explicado las primeras dos lineas en el hola mundo. Ahora veremos que en la tercer linea dice:

    Código: c
    int a;


    Aquí hemos declarado la variable llamada "a" del tipo int (entero). En esta variable almacenaremos el numero que una persona ingrese para luego mostrarlo en pantalla. Notese que hemos declarado la variable fuera del main.
    De hacerlo dentro no habria ninguna diferencia. La diferencia entre declararlo dentro y fuera es que si lo declaramos fuera nos servira para todas las funciones de la aplicacion. En cambio si lo declaramos dentro del main nos servira solo para el main. Pero de aqui a un par de capitulos mas adelanta trabajaremos solo con el bloque main.

    En fin. Dentro del bloque main las acciones que se realizan son:

    Código: c
    printf("Por favor ingrese un numero...\n");
    scanf("%d",&a);
    printf("\n\nEl numero que usted ha elegido es: %d", a);
    getch();


    Con el primer printf mostramos un mensaje pidiendo que ingresen un numero y bajamos una linea para que cuando la persona escriba el numero aparezca en la linea de abajo. Asi queda mas ordenado.
    Ahora hemos utilizado por primera vez el scanf. Tal como el printf sirve para mostrar datos en pantalla, el scanf sirve para tomar datos que el usuario ingrese. Para tomar un dato debemos colocar dentro del parentesis, en primer lugar entre comillas el formato del dato que queremos tomar. Recordemos que antes cuando explique los distintos tipos de variable dije cual era el formato de todas:

    int --> %d
    long --> &ld
    float --> %f
    double --> %lf
    char ---> %c
    string --> %s

    En el caso de la variable que declaramos es una integer (entera en ingles) (int) por lo tanto su formato es %d.
    Entonces colocamos el formato entre comillas, cerramos las comillas y seguido de una coma la variable donde queremos almacenar el dato que queremos guardar. Al tratarse de un entero debemos poner antes de la variable el caracter "&".

    Finalmente imprimimos una nueva linea. Lo primero que hacemos es dejar 2 espacios en blanco para que nos quede mas ordenado. Entonces dejara dos espacios desde la linea en la cual el usuario ingreso el numero y luego imprimira la leyenda... "El numero que usted ha elegido es" y luego otra vez nos encontramos con el formato. Eso le indica que debe imprimir en la pantalla un numero entero. Pero que entero debe imprimir?. Eso se lo indicamos luego de la leyenda, cerramos la comilla, ponemos una coma y el nombre de la variable que queremos mostrar.

    Ahora vamos a hacer uno un poco mas complejo. Vamos a pedir que ingrese 2 numeros en ves de 1. Y luego una leyenda que diga "El primer numero ingresado fue X y el segundo Y".
    Adelante...

    Código: c
    #include <stdio.h>
    #include <conio.h>
    main()
    {
    int x,y;
    printf("Ingrese un numero...\n");
    scanf("%d",&x);
    printf("\nIngrese otro numero...\n");
    scanf("%d",&y);
    printf("\nEl primer numero ingresado fue %d y el segundo %d",x,y);
    getch();
    }


    Bueno. Aqui primero declaramos las variables x y la y. Al igual que la vez anterior pedimos que ingrese un numero con printf y lo almacenamos en una variable con scanf. Luego repetimos el proceso para tomar el segundo numero.
    Ahora para mostrar los dos numeros en pantalla hemos puesto la leyenda.. "El primer numero ingresado fue" y luego el formato %d indicando que debe imprimir un numero entero.. y luego seguimos diciendo "y el segundo..." y otra vez el formato %d indicando que debe imprimirse otro numero entero. Y luego debemos indicarle que numeros. Entonces se lo indicamos POR ORDEN. Separados por comas decimos que el primer %d pertenece al valor de X y el segundo pertenece al valor de Y.

    Otro dato importante es que al declarar una variable podemos asignarle enseguida un valor. Por ejemplo. Yo quiero declarar la variable del tipo caracter "abc" y cuyo valor por defecto sea "h".. entonces haria asi:

    Código: c
    char abc="h";


    Ok. Por ahora hasta aqui llegamos con variables y las funciones printf y scanf.
    Antes de seguir si no les ha quedado nada claro les pido que por favor practiquen y si tienen dudas pregunten. No les hara daño a la vista leerlo mas de una vez al texto.
    Suerte!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

c) Operadores Logicos Y Relacionales, If, Switch

Bueno. Ahora amos a comenzar con los operadores logicos y relacionales en C.
Los operadores relacionales, tal como indica la palabra es la que nos permite relacionar dos valores y son:

  • x < y 
    x menor a y

  • x > y
    x mayor a y

  • x <= y
    x menor o igual a y

  • x >= y
    x mayor o igual a y

  • x == y
    x igual a y

  • x != y
    x distinto a y

    Y los operadores logicos que son:

  • x && y
    x y y
  • x || y
    x o y
  • x ! y
    x no y

    Utilizando estos operadores logicos y relacionales podemos adentrarnos en lo que son las condiciones.
    Para eso vamos a aprender IF (Si en ingles).

    Para esto vamos a hacer una aplicacion que pida que ingresen 2 numeros. Compare los numeros y muestre una leyenda indicando cual de los 2 es el mayor. Y si son iguales que lo diga. Numeros enteros. Vamos a hacerlo...

    Código: c
    #include <stdio.h>
    #include <conio.h>
    main()
    {
    int x,y;
    printf("Ingrese un numero...\n");
    scanf("%d",&x);
    printf("\nIngrese otro numero...\n");
    scanf("%d",&y);
    if(x>y)
    {
    printf("\n%d es el mayor",x);
    }
    else
    {
    if(x<y)
    {
    printf("\n%d es el mayor",y);
    }
    else
    {
    printf("\n%d y %d son iguales",x,y);
    }
    }
    getch();
    }


    Bueno.. delclaramos las librerias, las variables, pedimos con printf que ingresen dos numeros y los tomamos y almacenamos con scanf. Eso ya no tengo que explicarlo.
    Vamos a detenernos en el if.. vemos que pusimos la condicion IF y entre parentesis pusimos que x debia ser mayor que y.
    Si esto se determina VERDADERO. Osea, x es mayor que y. Se ejecuta todo lo que se encuentra entre las llaves.
    Si esto se determina falso. Osea que x es menor o igual que y. Se ejecuta el segundo bloque que viene luego del else.
    Al hacer una condicion el segundo bloque no es obligatorio pero el primero si. Es decir, SIEMPRE tiene que realizarse una accion en caso que la condicion sea verdadera pero no es necesario el else, se puede terminar cerrando la llave del bloque que se ejecuta en caso de ser verdadera y listo.
    En este caso particular no porque tenemos que indicar que numero es el mayor, por lo tanto si esta condicion se determina falsa sabemos que x no es mayor que y pero puede ser menor o puede ser igual. Entonces vamos a comprobar nuevamente con otra condicion dentro de el bloque else de la condicion que ya creamos para comprobar si y es mayor que x. En caso de darse verdadero ya sabemos esto, en caso de ser falso, antes comprobamos que x no era mayor que y y ahora comprobamos que y tampoco es mayor que x por lo tanto son iguales.

    La condicion es algo sencillo. Nos permite comprar dos o mas cosas utilizando operadores logicos o relacionales.

    Muy bien ahora pasemos a lo que es un Switch.
    Mediante la funcion Switch podemos analizar una variable por ejemplo y segun su valor establecer distintas acciónes que se daran.
    Quiza sea dificil comprender leyendo la explicacion pero con un ejemplo todo queda solucionado.

    Hagamos una aplicacion que pida ingresar un numero del 1 al 5. Y que luego escriba con letras el numero que la persona ingreso.
    Hagamoslo...

    Código: c
    #include <stdio.h>
    #include <conio.h>
    int num;
    main()
    {
    printf("Ingrese un numero del 1 al 5:\n");
    scanf("%d",&num);
    switch(num)
    {
    case 1:
    printf("Has ingresado el numero uno");
    break;
    case 2:
    printf("Has ingresado el numero dos");
    break;
    case 3:
    printf("Has ingresado el numero tres");
    break;
    case 4:
    printf("Has ingresado el numero cuatro");
    break;
    case 5:
    printf("Has ingresado el numero cinco");
    break;
    default:
    printf("El numero ingresado es incorrecto");
    }
    getch();
    }


    Bueno. Como veran declaramos la variable entera num y pedimos al usuario que ingrese un numero. Seguido de esto utilizamos la fucion switch con la variable num.. lo que se ve en esta linea:

    Código: c
    switch(num)


    Y luego entre llaves vamos mencionando los posibles valores de num y las acciones a realizar en cada uno.
    Vemos que fuimos pusiendo...

    Código: c
    Case 1 // En caso de ser 1 el valor de num
    Case 2 // En caso de ser 2 el valor de num
    Case 3 // En caso de ser 3 el valor de num
    Case 4 // En caso de ser 4 el valor de num
    Case 5 // En caso de ser 5 el valor de num


    Luego de cada case van dos puntos ( : ) y la accion a realizar.
    Luego de definir la accion a realizar se ingresa el comando break;
    Esto debe ingresarse siempre menos en el ultimo case. En ese caso no es obligatorio.
    Nuestro ultimo case.. no lo llamamos asi sino que lo llamamos default. El default es la accion que se ejecuta en caso que ninguna de las definidas anteriormente sea valida. Por ejemplo.. si el numero ingresado no es un numero del 1 al 5 va a mostrar las acciones de default.
    No es obligatorio poner una accion por defecto en un switch.

    Ok. Los invito a que practiquen con esto, que hagan sus propios ejercicios y jueguen con el lenguaje C.
    Muy bien. Para terminar con la primera parte solo me quedaria explicar los bucles While, Do While y For y con eso ya la terminariamos pero ahora es algo tarde y estoy cansado asi que mañana termino sin falta esta primera parte y comenzare ya con la segunda.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

d) While - Do While - For

Ok vamos a proseguir por donde deje anoche. Habiamos visto la condicion If y Switch.
Ahora vamos a ver la estructura repetitiva While.
Como acabo de decir, while es una estructura repetitiva. ¿Qué quiero decir con esto?. Quiero decir que mientras una condicion se determine verdadera se va a ejecutar un determinado bloque una y otra vez hasta que la condicion se determine falsa. En ese momento prosigue...

Veamoslo con un ejemplo. Queremos hacer una aplicacion que le pida a una persona ingresar un numero entero y que luego se impriman todos los numeros hasta llegar a ese. Por ejemplo si el usuario introduce el numero 5 que se impriman los numeros 1, 2, 3, 4, 5
Hagamoslo...

Código: c
#include <stdio.h>
#include <conio.h>
int num1, num2=0;
main()
{
printf("Ingrese un numero...\n");
scanf("%d",&num1);
while(num1!=num2)
{
printf("%d\n",num2);
num2++;
}
printf("\nFin");
getch();
}


Muy bien lo que hicimos es declarar dos variables enteras num1 y num2.. A num2 le dimos el valor 0.
Luego pedimo al usuario que ingrese un numero y lo almacenamos en la variable num1. Y aqui comenzamos con el while.
Como condicion pusimos que num1 tenia que ser distinto a num2. En caso de que esto sea verdadero se ejecuta el bloque que hay entre las llaves, en caso que sea falso sigue ejecutando el resto de la aplicacion. Supongamos que el usuario ingreso el numero 5. num2 tiene valor 0 y num1 tiene valor 5 por lo tanto la condicion "num1 distinto a num2" es verdadera, por lo tanto se ejecuta el bloque.. que en este caso es:

Código: c
printf("%d\n",num2);
num2++;


Con esto lo que hacemos es, en la primer linea imprimir en pantalla el valor de num2 como ya sabran. Y en la segunda linea lo que hacemos es aumentar el valor de num2 en 1. En C, decir num2++ es igual a decir num2 = num2+1 y del mismo modo si queremos disminuir un numero, en ese caso seria num2-- y seria lo mismo que decir num2 = num2-1
Entonces, imprimimos el numero 0 que era el valor de num2 y luego lo aumentamos en 1 por lo que ahora num2 va a tener un valor de 1.
Como la condicion se dio verdadera se ejecuta el bloque y luego de ejecutar el bloque va a volver a comprobar la condicion. num1 sigue siendo 5, num2 ahora es 1. La condicion se vuelve a dar verdadera ya que num1 sigue siendo distinto a num2. Por lo tanto se va a imprimir en pantalla el numero 1 que es el valor de num2 y se va a aumentar nuevamente en 1. Ahora num2 tiene un valor de 2.
Otra vez se vuelve a comprobar la condicion. Sigue siendo verdadera. num2 tiene valor 2 y num1 5. Por lo tanto se va a imprimir en pantalla el 2 y va a aumentar uno y va a quedar con valor 3. Y asi se seguira repitiendo hasta el momento que num2 aumente un numero y quede con valor 5. En ese momento cuando num1 tenga valor 5 y num2 tambien valor 5, la condicion "num1 distinto a num2" se va a determinar falsa ya que son iguales. Aqui entonces acaba el bucle repetitivo y sigue con el resto del codigo. En este caso el resto del codigo es:

Código: c
printf("\nFin");
getch();


Por lo que va a imprimir en pantalla la palabra "Fin" y va a dejar congelada la aplicación.

Bueno. Creo que ha quedado mas que claro el funcionamiento de While. Ahora vamos a pasar a Do While que es muy parecido al anterior.
En el while, primero damos la condicion, si la condicion es verdadera ejecuta el bloque sino sigue de largo. Osea, si la condicion se determina falsa desde un primer momento, NUNCA ejecuta el bloque del while.
Con Do While en camio, primero especificamos las acciones a ejecutar y luego la condicion. Por lo tanto dichas acciones se van a ejecutar por lo menos 1 vez. Luego de ejecutarlas 1 vez llegara a la condicion, si la condicion se determina verdadera lo volvera a ejecutar del mismo modo que con While hasta que sea falsa. Si se determina falsa desde un primer momento seguira de largo pero ya habra ejecutado 1 vez las acciones. ¿Se entiende?
Vamos a hacer un ejemplo parecido al anterior...

Código: c
#include <stdio.h>
#include <conio.h>
int num1, num2=100;
main()
{
printf("Ingrese un numero entero menor a 100\n");
scanf("%d",&num1);
while(num1>=100)
{
printf("\nEl numero debe ser menor a 100, ingreselo nuevamente\n");
scanf("%d",&num1);
}
do
{
printf("\n %d",num1);
num1++;
} while(num1<=num2);
printf("\nFin");
getch();
}


Bueno aqui se las he complicado un poco porque les puse While y Do While en un mismo ejemplo para que vean bien como funciona.
Ok. En primer lugar declaramos las varianles num1 y num2 y pedimos al usuario que ingrese un numero menor a 100.
Luego vemos que aparece un while.
La condicion es "num1 mayor a 100". Si la condicion se da verdadera significa que el idiota del usuario no sabe lo que significa ingresar un numero menor a 100 y ha ingresado uno mayor. Entonces, se ejecuta el bloque del while en el que se le pide que vuelva a ingresar un numero y se sobreescribe en la variable num1. Luego de pedirle que vuelva a ingresar un numero se vuelve a comprobar. Si el usuario ha ingresado un numero mayor a 100 volvera a ejecutarse el bloque de while asi que hasta que no ingrese uno menor no va a poder seguir adelante nunca porque la condicion while va a seguir siendo verdadera y no va a seguir ejecutando la aplicacion.
Cuando esta condicion se de falsa se sigue adelante.
Si la persona desde el principio ingreso un numero correcto, por ejemplo 70. La condicion se va a dar falsa desde el primer momento asi que no va a ejecutar las acciones del while ninguna vez.
Luego del while nos encontramos con esto:

Código: c
do
{
printf("\n %d",num1);
num1++;
} while(num1<=num2);
printf("\nFin");
getch();


Aquí esta el famoso Do While.
Lo que esta entre las llaves del Do son las acciones que se van a realizar. Lo que esta entre parentesis en el While que aparece al terminar el Do es la condicion.
La primera vez el Do se va a ejecutar si o si. Por lo tanto se va imprimir el pantalla el valor de num1. Supongamos que el usuario introdujo 70. Entonces se imprimira 70 y se aumentara en 1 por lo tanto ahora el valor sera 71.
Luego se comprueba la condicion "num1 menor o igual a num2". Recordemos que al declarar num2 le dimos un valor de 100 algo que fue totalmente al pedo porque no era necesario haber creado una variable que solo usariamos una vez. Podriamos haber creado unicamente la variable num1, no la num2 y luego en el while que es en el unico lugar que usamos num2, en ves de poner "num<=num2" ondriamos "num1<=100"
Bueno.. en este caso es 71 por lo tanto es menor a 100. La condicion es VERDADERA. Por lo que se volvera a ejecutar el bloque Do, aumentara a 72 y otra vez se dara verdadera y asi hasta que llegue a 100 cuando se determine falsa ya que seran iguales.
En ese momento sigue ejecutando el resto del codigo que en este caso al igual que en el ejemplo anterior solo es mostrar un menaje en pantalla y congelar la aplicacion.

Muy bien. While y Do While ya estan claros.
Ahora vayamos con For.

A diferencia de While y Do While que lo hemos analizado anteriormente. A for lo voy a utilizar cuando se EXACTAMENTE la cantidad de repeticiones que se deben hacer.
La sintaxis de for es:

Código: c
for(variable = expresion; condicion; accion a la condicion)
{
acciones;
}


Bueno. Para darlo a entender nada mejor que un ejemplo... Vamos a imprimir en pantalla todos los numeros desde el 1 hasta el 300.

Código: c
#include <stdio.h>
#include <conio.h>
int a;
main()
{
for(a=1;a<=300;a++)
{
printf("%d\n",a);
}
getch();
}


Como veran. Primero que nada declaramos la variable a. Luego en el foro pusimos en primer lugar la variable asignandole un valor, en este caso le dimos el valor 1. Luego separado con un punto y com ( ; ) la condicion que en este caso es "a menor o igual a 300" y en tercer lugar la progrecion o accion de la condicion, que en este caso es ir aumentando en 1.
Entonces, mientras la condicion "a menor o igual a 300" sea verdadera se ejecuta lo que esta dentro del bloque y luego se ejecuta la accion de la condicion es decir se le suma uno. Luego de hacer esto se vuelve a comprobar la condicion y si es verdadera otra vez se ejecuta lo que hay dentro del bloque y luego se ejecuta la accion de la condicion, aumentandose nuevamente en uno.. y asi hasta que se de falsa.

He visto y seguro que muchos tambien en varios foros, que algunos tienen como firma una especie de tira comica en la que una profesora le pide a su alumno que escriba en el pizzaron 300 veces algo.. no recuerdo si eran 300 veces ni que es lo que le pide que escriba pero vamos a suponer que le pide que escribe 300 veces "no comere en clase".. y el niño en el pizzaron utiliza la sentencia for del mismo modo que lo hicimos nosotros para escribirlo.. seria algo asi.

Código: c
#include <stdio.h>
#include <conio.h>
int a;
main()
{
for(a=1;a<=300;a++)
{
printf("No comere en clases\n");
}
getch();
}


Como veran esto es igual al anterior solo que en ves de imprimir el valor de a que va aumentando, escribimos la frase "No comere en clases"

Bueno. Aqui terminamos la parte 1. Me ha llevado buen rato escribir todo esto asi que si lo ponen en otro lado respeten el autor y la fuente.
En unos minutos voy a dejarles algunos ejercicios para que practiquen todas las cosas que hemos visto en esta primera parte y mi recomendacion para los que estan aprendiendo es que si no entendieron algo, crean un nuevo tema y preguntan. Que si continuan con la segunda parte cuando no han entendido todavia la primera va a ser para peor.

Ok. Los dejo un rato mientras copio algunos ejercicios.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PARTE 2 - CADENA DE CARACTERES

Ok tenia planeado dejarles algunos ejerccios para que practiquen toda la parte uno pero la parte 2 es algo corta asi que creo que les dare primero esta parte y luego los ejercicios  :notefumesporrosxD

Bueno. Esta parte habla sobre "Cadena de Caracteres"
Una cadena de caracteres es el conjunto de numeros, letras y simbolos.
En C se llaman Arreglos de caracteres, donde arreglo es una estructuras de datos relacionados que reciben un nombre.
Los arreglos ocupan lugar en memoria. Cada caracter ocupa 1 byte.
Por ejemplo, si queremos guardar una cadena de caracteres con un nombre, se haria de la siguiente manera:

Código: c
char nombre[15]; // Donde 15 son los bytes que se reservan y es la cantidad estimada de la cadena de caracteres


Es importante que si queremos guardar un nombre no pongamos que se reserven 100 bytes ya que un nombre no tendra eso y estaremos usando varios bytes para nada.

Si nosotros creamos una cadena de caracteres con una longitud maxima de 5 por ejemplo, y se ingresa una palabra de 8 caracteres, se guardaran los primeros 5 unicamente ya que 5 es la cantidad maxima que pusimos.

En toda la primera parte habiamos trabajado unicamente con numeros. Ahora vamos a ampliarnos un poco mas hacia lo que es cadena de caracteres y trabajar con letras tambien.
Vamos a hacer una aplicación que nos pregunte cual es nuestro nombre y que luego que lo ingresemos nos diga.. "Tu nombre es" y nuestro nombre.

En la parte 1 seccion B habiamos hablado de los tipos de variables en la cual mencionamos la cadena de caracteres y dijimos que su formato era %s.
Antes habiamos trabajado siempre con %d que es el formato de los numeros enteros.

Muy bien hagamos la aplicacion...

Código: c
#include <stdio.h>
#include <conio.h>
char nombre[10];
main()
{
printf("Ingresa tu nombre...\n");
scanf("%s",nombre);
printf("\nTe llamas %s",nombre);
getch();
}


Fijense que a comparacion de como veniamos haciendo antes con los numeros, en el scanf no necesito poner el simbolo & antes del nombre del la variable en el cual quiero guardar el dato ingresado por el usuario.
Ok. Les pido que compilen esa aplicacion y pongan su nombre. SOLO SU NOMBRE y vean como les dice "Te llamas Pedro" por ejemplo.
Una vez que hayan hecho eso vamos a reservar mas bytes. Vamos a reservar unos 50. Por lo que la tercera linea quedaria:

Código: c
char nombre[50];


Y vamos a escribir nuestro nombre y apellido completo..
¿Que sucede al hacer esto?
Seguramente han notado que cuando dejaron un espacio para poner su segundo nombre o su apellido no ha guardado el resto cierto? Ha guardado solo hasta que dejaron un espacio y el resto se ha "perdido".
Esto es porque C entiende un espacio como que ha terminado la cadena de caracteres y no guarda nada despues de eso.
Pero entonces... ¿Cómo hacemos para guardar una cadena de caracteres con espacios?
Para eso vamos a utilizar el siguiente formato al momento de hacer el scanf

Código: c
scanf(" %[^\n]", nombre);


Entre los corchetes se pueden enumerar todos los caracteres que se quieren entrar pero no es algo muy recomendado ya que son muchos caracteres entonces mejor se le indica cual es el que NO SE VA A CONSIDERAR, es decir el caracter que va a indicar fin de entrada de datos.
Para esto se coloca el simbolo ^ y el caracter de fin.
De este modo se considera todos menos el enter, y la entrada se corta con el enter.

MUY IMPORTANTE: Entre " y % dejar un espacio en blanco. De este modo siempre que se cargue un nuevo nombre se limpia el buffer de entrada de datos.

Todo esto se aplica al scanf. Luego para mostrar los datos en el printf se hace igual que lo hemos hecho siempre. Con el formato de las cadenas de caracteres que es %s y el nombre de la variable a mostrar.

Ahora si pueden poner si nombre y apellido y no tendran problemas para verlo. Aquí les dejo como quedaria el source:

Código: c
#include <stdio.h>
#include <conio.h>
char nombre[50];
main()
{
printf("Ingresa tu nombre y apellido...\n");
scanf(" %[^\n]",nombre);
printf("\nTe llamas %s",nombre);
getch();
}


Ok.. pero con cadenas de caracteres tambien podemos realizar otras acciones como copiar, comparar, concatanear u otras...
Para ello debemos habilitar la biblioteca string.h por lo tanto ya se suma otra biblioteca a nuestro diccionario  :wasaaa!!xD
En esta biblioteca estan definidas dichas funciones y solo debemos llamarlas y listo.

Si tenemos que asignar el valor de una variable char a otra char NO se utiliza el signi = como podria hacerse con los numeros enteros

Código: c
num1 = num2


En este caso debemos utilizar la funcion de la libreria string.h llamada strcpy()
Dicha funcion es:

Código: c
strcpy(s1,s2);


Lo que hace esto es copiar el valor de la cadena de caracteres s2, en la cadena s1.
Hagamoslo con un ejemplo. Creemos dos variables del tipo char. Pidamos ingresar unicamente el nombre el cual lo almacenaremos en una variable. Luego con dicha funcion la copiaremos el valor de esa variable a la otra y la imprimiremos.

Código: c
#include <stdio.h>
#include <conio.h>
#include <string.h>
char nom1[10], nom2[10];
main()
{
printf("Ingrese su nombre...\n");
scanf("%s",nom1);
strcpy(nom2,nom1);
printf("Tu nombre es %s",nom2);
getch();
}


En primer lugar como veran se agrego la linea:

Código: c
#include <string.h>


Luego se le pidio al usuario que introduzca un nombre cuyo valor se guardo en la variable nom1.
Luego con la funcion strcpy copiamos el valor de nom1 en nom2 y finalmente imprimimos nom2 y dejamos congelada la aplicación.

Pero que pasa si queremos copiar solo parte de una variable en otra?. Por ejemplo solo los primeros 3 caracteres?
En ese caso se haria de este modo:

Código: c
strcpy(s1,s2,3);


Como veran se le pasa un tercer parametro con la cantidad de caracteres a copiar.
Vamos a reemplazar en el ejemplo que hicimos anteriormente las siguientes lineas:

Código: c
strcpy(nom2,nom1);
printf("Tu nombre es %s",nom2);


Y vamos a poner.

Código: c
strcpy(nom2,nom1,3);
printf("Las 3 primeras letras de tu nombre son %s y tu nombre completo es %s",nom2,nom1);


Y ahora pruebenlo nuevamente.
Ahora bien. Como comparamos si una variable es igual a otra?
Para esto utilizamos otra fucion incluida dentro de string.h que es strcmp()
Por ejemplo:

Código: c
strcmp(S1,S2);


Esto comara la cadena s1 con s2 y devuelve un valor entero.
Devuelve 0 si ambas son iguales, < 0 si S1 es menor a S2 y > 0 si S1 es mayor a S2.

Pero.. que significa que S1 es mayor o menor a S2?
Todos los caracteres se corresonden a un codigo universal como ASCII o EBCDIC donde siguen el orden alfanumerico. Esto permite ir comparando caracter por caracter y si sus codigos son iguales devuelve un 0. Si el caracter de S1 es anterior al de S2 devuelve < 0 y si es posterior > 0.

NADA
NULO

N y N so iguales. Entonces compara el siguiente. A esta antes que U es decir el codigo ASCII de la A es menor al de la U o sea al restarlos da negativo, no compara mas y devuelve < 0

ESPECIE
ESPECIAL

Hasta la I compara caracter por caracter y todos son iguales. Pero luego la E esta despues que la A, osea que al restarlos da positivo. Ahi no compara mas y devuelve > 0

Ahora vamos a hacer una aplicacion que pida ingresar 2 nombres y compare si son iguales no.

Código: c
#include <stdio.h>
#include <conio.h>
#include <string.h>
char n1[10],n2[10];
main()
{
printf("Ingrese un nombre:\n");
scanf("%s",n1);
printf("\nIngrese otro nombre:\n");
scanf("%s",n2);
if(strcmp(n1,n2)==0)
{
printf("\nLos nombres son iguales");
}else
{
printf("\nLos nombres son distintos");
}
getch();
}


Bueno. Con esto terminamos la segunda parte. Como dije era algo corta. Asi que ahora si les pondre ejercicios de la primera y segunda parte para que los hagan y vean si van bien para la tercera...
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PRACTICAS PARTES 1 Y 2

Ok primero os dare una serie de ejercicios resueltos y finalmente les dare algunos para resolver.
Quien tenga alguna duda crea un nuevo tema y pregunta.

Problema Nº1:

Dado el siguiente programa C:

Código: c
#include <stdio.h>
main()
{
int x, cuad, cubo;
printf("X\t cuad(X)\t cubo(X)\n");
for(x=cuad=cubo=0;x<=10;x++, cuad=x*x,cubo=x*x*x)
printf("%d\t %d\t %d\n",x,cuad,cubo);
}


Escribir el programa anterior utilizando la proposicion While y la proposicion Do While.

Aclaracion: Como veran en el problema no se ha encerrado la accion del for entre llaves. Cuando las acciones solo son 1 como en este caso que se utiliza el printf no es necesario poner llaves. Cuando son varias acciones si. En mi caso particular uso siempre lleves por cuestion de orden pero eso esta en cada uno. Esto se aplica al for, al if, while, do while y a los case del switch.

Utilizando While:

Código: c
#include <stdio.h>
#include <conio.h>
int x=0, cuad=0, cubo=0;
main()
{
printf("X\t cuad(X)\t cubo(X)\n");
while(x<=10)
{
cuad=x*x;
cubo=x*x*x;
printf("%d\t %d\t %d\n",x,cuad,cubo);
x++;
}
getch();
}


Utilizando Do While:

Código: c
#include <stdio.h>
#include <conio.h>
int x=0, cuad=0, cubo=0;
main()
{
printf("X\t cuad(X)\t cubo(X)\n");
do
{
cuad=x*x;
cubo=x*x*x;
printf("%d\t %d\t %d\n",x,cuad,cubo);
x++;
}while(x<=10);
getch();
}


Problema Nº2:

Ingresar 20 numeros e informar cuatos fueron mayores, cuantos menores y cuantos iguales a cero.

Código: c
#include <stdio.h>
#include <conio.h>
int cuenta=0, n, mayor=0, menor=0, igual=0;
main()
{
while(cuenta<20)
{
printf("Ingrese un numero\n");
scanf("%d",&n);
if(n<0)
{
menor++;
}
else
{
if(n>0)
{
mayor++;
}
else
{
igual++;
}
}
cuenta++;
}
printf("Hay %d mayores, %d menores y %d iguales",mayor,menor,igual);
getch();
}


Problema Nº3:

Ingresar 10 numeros, mostrar el mayor y el menor de ellos.

Código: c
#include <stdio.h>
#include <conio.h>
int cuenta=0, n, mayor, menor;
main()
{
printf("Ingrese un numero\n");
scanf("%d",&n);
n=mayor=menor;
while(cuenta<9)
{
printf("Ingrese un numero\n");
scanf("%d",&n);
if(n<menor)
{
menor=n;
}
if(n>mayor)
{
mayor=n;
}
cuenta++;
}
printf("El mayor es %d y el menor es %d",mayor,menor);
getch();
}


Problema Nº4:

Ingresar 5 numeros. Calcular y listar el promedio.

Código: c
#include <stdio.h>
#include <conio.h>
int cuenta=0, n, suma=0;
float promedio;
main()
{
while(cuenta<5)
{
printf("Ingrese un numero\n");
scanf("%d",&n);
suma+=n;
cuenta++;
}
promedio=suma/5;
printf("El promedio es %.2f",promedio);
getch();
}


Muy bien. En este ejercicio para el promedio he utilizado el tipo de variable float porque puede tener decimales. Notese que cuando imprimi el promedio puse %.2f
Esto sirve para que si tiene muchos decimales solo se impriman 2. No mas de 2. Sin esto se imprime todos los decimales soportados por el float.

Ok. Ahora les dare ejercicios sin resolver para que hagan ustedes:

Problema Nº1:

Ingresar la medida de un angulo y determinar si es AGUDO, OBTUSO, RECTO, NULO O LLANO. Si el valor es mayor que 180º listar la leyenda "Dato No Valido", e ingresar un nuevo valor.

Problema Nº2:

Hacer un programa, tal que dado un numero cualquiera A ingresado, si es positivo calcule la raiz cuadrada, si es negativo calcule su cuadrado lisando el valor y el resultado. Si es cero, listar por pantalla "INGRESÓ UN VALOR NULO"

Problema Nº3:

Leer una lista de diez numeros, contar cuantos de ellos son mayores que 23.

Problema Nº5:

Leer una lisa de edades de 15 personas, determinar y listar el promedio de edad de los mayores de 18, el promedio de lso menores de 18 y la cantidad de personas de 18 años de la lista

Problema Nº6:

Hacer un programa que permita imprimir los numeros naturales de 1 a 30, con sus cuadrados y sus cubos

Problema Nº7:

Ingresar dos numeros cualquiera, calcular el producto y determinar si es positivo, negativo o cero. Listar el resultado y la leyenda correspondiente.

Problema Nº8:

Ingresar un numero y determinar todos los multiplos de 3 desde 0 hasta dicho numero

Problema Nº9:

Ingresar los datos de un rectangulo y calcular y lista los valores del perimetro, superficie y la diagonal, como asi una leyenda que aclare cada valor.

Problema Nº10:

Una empresa conoce para cada empleado los siguientes datos:

- Nombre
- Sueldo
- Categoria

Hay 100 empleados, distribuidos en 3 categorias (1, 2 y 3), se pide:

a) Total de sueldos que paga la empresa
b) Cantidad de empleados que ganan mas de $2000
c) Cantidad de empleados que ganan menos de $500 y cuya categoria sea 1
d) Nombre del empleado que mas gana
e) Sueldo maximo
f) Total de sueldos de cada categoria
g) Sueldo promedio

Problema Nº11:

Una empresa elaboradora de desinfecantes incrementa las ventas debido a la cólera.
En cada factura de venta se registra la siguiente información:

- Nro. de factura
- Nro. de articulo
- Cantidad (en litros)
- Precio unitario (en litros)

El ingeso de datos finaliza con el Nro de factura = 0
Se pide:

a) Cuál fue la facturacion mensual
b) Cuanto se vendio el articulo 1 (en litros)
c) Cuantas facturas de mas de $1500 se emitieron

Problema Nº12:

Ingresar para un relevamiento los siguientes datos:

- Tipo de ambiente (Casa, departamento, PH)
- Cantidad de ambientes
- Precio
- Ciudad

Hasta que el tipo de inmueble sea 0 y el barrio sea 0 calcular y mostrar:

a) El precio promedio por tipo de inmueble
b) El precio promedio de la ciudad de Sevilla segun la cantidad de ambientes
c) De todas las casas que porcentaje son de Barcelona
d) El barrio cuyo departamento de 4 ambientes sea mas caro
e) La cantidad de ambientes y el nombre de ciudad del dep. mas economico
f) El valor total de las casas de la ciudad Madrid
g) En la ciudad de Saragoza que porcentaje de PH hay?

Ok diviertanse con estos ejercicios, si quieren practicar mas me piden y yo les pasare en un tema nuevo o donde sea.
Lo proximo sera la PARTE 3. En cuanto pueda la hago.

Suerte!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PARTE 3 - FUNCIONES

Ok. Gracias ps1c0s1s. Creo que me esta quedando bien el tutorial  :wasaaa!!xD
Bueno. En esta tercera parte veremos el tema de FUNCIONES.
Este tema es muy corto y facil asi que si entendieron los anteriores no tendran problemas para entender este.
Una vez que lo termine les dare una serie de ejercicios para que sigan practicando. Espero que los hagan todos asi se les mete bien en la cabeza todo.
Ok. Vamos a comenzar.

Las funciones son una especie de programas dentro de otro programa. Nos permiten organizar varias acciones bajo un solo nombre.
De este modo podemos dividir un proyecto grande en pequeñas partes.
La division del codigo en funciones tiene la ventaja de que estas se puedan reutilizar en el mismo programa o en otros sin la necesidad de volver a escribir linea por linea todo.

En C las funciones no pueden anidarse. Es decir, no se puede crear una funcion dentro de otra funcion.

Una funcion se define de la siguiente manera:

Código: c
Tipo de retorno Nombre(tipo1 argumento1, tipo2 argumento2, tipo3 argumento3.... tipoN argumentoN)
{
Cuerpo de la funcion. Acciones a realizar
return expresion;
}


TIPO DE RETORNO: Es el tipo de resultado que dara una funcion. Por ejemplo si hacemos una funcion que calcule la suma de dos numeros enteros, el resultado que dara la funcion sera otro numero entero, por lo tanto es de tipo int. Los tipos de funciones son los mismos que habiamos definido con las variables: int, long, char, double, etc...
NOMBRE: Es el nombre que tendra la funcion. Entre 1 y 32 caracteres. Puede comenzar con una letra o guion bajo. Igual que las variables.
TIPOS Y ARGUMENTOS: Son las variables y agumentos que utilizaremos dentro de la funcion. Por ejemplo int n1, int n2
CUERPO: Son las acciones que se van a realizar
RETURN: Las funciones se finalizan con el retorno, el valor que van a devolver.

Vamos a hacer un ejemplo de una funcion que sirve para sumar dos numeros:

Código: c
int suma(int n1, int n2)
{
int total;
total=n1+n2;
return total;
}


Como veran. La funcion es del tipo int, se llama suma. La lista de parametros que pongo entre parentesis son dos del tipo int con nombres n1, n2.
Luego dentro de la funcion creo la variable entera total. Las variables que creemos dentro de la funcion serviran solo DENTRO. No seran validas en el main o en otra funcion.
Ahora las variables que declaremos fuera de las funciones y del main podran ser utilizadas en cualquier lado.
Luego le asignamos a esa variable total la suma de n1 y n2. Y finalmente retornamos el valor de total.

Ahora vamos a ver como declaramos una funcion y como la llamamos.
Vamos a hacer un ejemplo. Un programa que pedira ingresar dos numeros y dira cual de ellos es el mayor.

Código: c
#include <stdio.h>
#include <conio.h>
int mayor(int n1, int n2);
main()
{
int num1, num2, r;
printf("Ingrese un numero...\n");
scanf("%d",&num1);
printf("Ingrese otro numero...\n");
scanf("%d",&num2);

while(num1==num2)
{
printf("Los numeros ingresados son iguales. Ingrese un numero distinto a %d\n",num2);
scanf("%d",&num2);
}

r = mayor(num1,num2);
printf("El mayor es %d",r);
getch();
}

int mayor(int n1, int n2)
{
if(n1<n2)
{
return n2;
}else{
return n1;
}
}


Ok analicemos. Vemos que en la tercer linea aparece esto:

Código: c
int mayor(int n1, int n2);


Aqui lo que estamos haciendo es declarando una funcion que luego desarrollaremos. Declaramos el tipo, nombre y argumentos con su correspondiente tipo entre parentesis. Luego un punto y coma y seguimos...
Esto es obligatorio. Si no hacen esto, cuando llaman a la funcion desde el main en la linea:

Código: c
r = mayor(num1,num2);


Les dara un error ya que C va leyendo desde la primera linea hacia abajo por lo tanto al momento de leer eso todavia no leyo la funcion y no "conoce" de su existencia. En caso que no declaremos la funcion, tendremos que desarrollarla antes de llamarla en el main. Es decir, todo el desarrollo de la funcion mayor tendria que ir antes del main para que cuando la llamemos desde el main esa parte ya haya sido leida.

Luego de declarar la funcion ya podemos utilizarla sin problemas en el main.
Cuando la llamamos, fijense que hicimos lo hicimos por el nombre de la funcion y entre parentesis le pasamos los valores que van a tener los argumentos n1 y n2. En este caso el argumento n1 va a tener el valor de num1 y el argumento n2 va a tener el valor de num2.
Finalmente esta funcion va a retornar un valor que sera el valor del numero mayor y ese valor que retorne se va a almacenar en la variable r ya que pusimos que r era igual a la funcion mayor con los valores num1 y num2.

Ahora veamos como hicimos la funcion...

Código: c
int mayor(int n1, int n2)
{
if(n1<n2)
{
return n2;
}else{
return n1;
}


Comenzamos diciendo nuevamente el tipo, nombre de funcion y los argumentos entre parentesis, y luego entre llaves definimos las acciones. El argumento n1 va a tener el valor de num1 porque asi lo definimos al llamar a la funcion desde la linea:

Código: c
r = mayor(num1,num2);


y el argumento n2 va a tener el valor de num2.
Con un if comparamos si n1 es menor a n2.
Si la condicion se da verdadera retornamos el valor de n2 ya que seria el mayor.
Si la condicion se da falsa significa que el mayor es n1 por lo tanto retornamos ese valor.

Muy bien. Como habran visto funciones es un tema muy corto y facil. Ya hemos terminado con lo que es funciones.
A continuacion voy a dejarles una serie de ejercicios para que puedan practicar.
Recuerden que por cualquier cosa solo deben hacer la consulta y listo.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

EJERCICIOS PARTE 3:

Ok aqui les dejo varios ejercicios para que practiquen. Espero que los hagan y no sigan de largo sin practicar porque asi va a ser muy probable que en algun punto se pierdan o no terminen de entender bien algunos conceptos.

Problema Nº1:

Realizar una función que indique entre dos numeros cuál es el mayor. Generar un programa que muestre su funcionamiento.

Problema Nº2:

Escribir una funcion que calcule el factorial de un numero entero.
Aclaracion: Imagino que muchos no tendran p*** idea de que es un factorial. El factorial de un numero es la suma de todos los numeros hasta llegar a ese. Por ejemplo el factorial de 6 es el resultado de 1+2+3+4+5+6 osea 21

Problema Nº3:

Escribir una función que se le pase como parámetro dos numeros, n1 y n2 y tiene que devolver, la suma de todos los numeros multiplos de 3 comprendidos entre n1 y n1*n2
Ej: Si se pasa n1=3 y n2=5 habria que devolver suma = 3+6+9+12+15

Problema Nº4:

Escribir una funcion que calcule el maximo comun divisor de dos numeros enteros.

Problema Nº5:

Hacer una funcion que dada una hora representada por 3 numeros, hora, minutos y segundos devuelva el numero total de segundos

Problema Nº6:

Un numero entero se dice un numero perfecto si sus divisores, incluyendo a 1 (pero excluyendo al numero mismo) suman igual que el numero. Por ejemplo 6 es un numero perfecto porque 6 = 1+2+3. Escribir una funcion que determine si el parametro "n" es un numero perfecto. Utilizar esta funcion en un programa que determine e imprima todos los numeros perfectos entre 1 y 1000. Imprimir los factores de cada numero perfecto para poder confirmar que el numero es efectivamente perfecto.

Problema Nº7:

Escribir una funcion que calcule el valor del termino de la sucesion del Fibonacci correspondiente a un numero entero determinado.

Problema Nº8:

Escribir una funcion que calcule el numero combinatorio de N elementos tomados de a K. Generar un programa que muestre su funcionamiento.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PARTE 4 - PUNTEROS

Bueno hoy nos toca hablar de punteros.
Este tema les puede complicar la vida si no han entendido bien temas anteriores asi que presten atencion.

Bueno vamos a comenzar explicando.
Las memorias de las computadoras estan formadas por un conjunto de Bytes.
Cada bytes tiene un numero asociado. Una dirección de memoria.

Entonces. Cuando nosotros creamos una variable, dicha variable reserva un lugar en la memoria dentro del cual se guarda el contenido. Por dar un ejemplo la direccion 10012.
Un puntero lo que hace es guardar la direccion de memoria de una vairiable.

Por ejemplo. Creo la variable float pi cuyo valor es 3.14 y esta guardada en la dirección de memoria 10012. Entonces, yo puedo acceder al ese valor (3.14) llamando directamente a la variable pi o bien accediendo desde la direccion de memoria.

Para acceder a esta dirección de memoria utilizamos el operador &

¿Cómo declaramos un puntero?
Pues declarar un puntero es similar a una variable. En primer lugar debemos definir el tipo de puntero que corresponde a la variable que va a apuntar. Por ejemplo. Si vamos a guardar en un puntero la dirección de memoria de la variable del tipo float llamada pi, el puntero tambien tiene que ser float. Y vamos a definirle un nombre antes del cual tiene que aparecer el signo *. Vamos a dar un ejemplo:

Código: c
float pi=3.14, *puntero;


Aquí creamos una variable float llamada pi con el valor 3,14 y un puntero llamado puntero, tambien float.

Ok. Vamos a hacer un pequeño ejercicio definiendo una variable y mostrando el valor y la direccion de memoria:

Código: c

#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf("Ingrese un numero entero...\n");
scanf("%d",&n);
printf("\n\nEl numero ingresado es: %d",n);
printf("\nLa direccion de memoria es: %d",&n);
getch();
}


Ok. Como veran esto no es nada diferente a lo que hemos hecho hasta ahora de hecho no si han llegado hasta este punto del tutorial no deben tener ningun problema en entender el codigo.
Fijense que primero imprimimos el numero ingresado, y luego imprimimos en pantalla la direccion de memoria de la variable "n". Y fijense que cuando indicamos que es lo que tiene que mostrar ponemos &n. Como dije antes, ese & es el operador que indica que accedemos a la dirección de memoria.

Ok. Ahora hagamos el mismo ejemplo que recien solo que trabajando con puntero. Ademas de la variable n vamos a crear un puntero, y guardar en el la direccion de memoria de n. Y luego vamos a imprimir el valor de n y la direccion de memoria de puntero.

Código: c
#include <stdio.h>
#include <conio.h>
main()
{
int n, *puntero;
printf("Ingrese un numero entero...\n");
scanf("%d",&n);
puntero=&n;
printf("\n\nEl numero ingresado es: %d",n);
printf("\nLa direccion de memoria es: %d",puntero);
getch();
}


Ok. Notese que cuando declaramos el puntero, utilizamos * delante. Luego cuando le asociamos a ese puntero la direccion de memoria de n lo hacemos con la linea:

Código: c
puntero=&n;


Sin el *. Y luego cuando lo imprimimos en el printf tampoco lo usamos...
Ahora hagamos lo siguiente. En la linea:

Código: c
printf("\nLa direccion de memoria es: %d",puntero);


Vamos a poner *puntero en vez de puntero a ver que pasa...
¿Han visto?
Les ha imprimido el mismo valor que n. Porque cuando ponemos "puntero" nos estamos refiriendo a la direccion de memoria. Y cuando ponemos "*puntero" nos estamos refiriendo al valor guardado en esa direccion de memoria.

Entonces, los punteros guardan la direccion de memoria en la cual se encuentra una variable. Hasta aqui perfecto. Pero la pregunta del millon es. ¿Para qué nos sirve esto?

Supongamos que se desea cambiar el valor de una variable a traves de una funcion.
Vamos a hacer un ejemplo:

Código: c
#include <stdio.h>
#include <conio.h>
int cambiarvalor(int num);
main()
{
int n=5;
cambiarvalor(n);
printf("\nEl valor de n es: %d\nY la direccion de memoria es: %d",n,&n);
getch();
}
int cambiarvalor(int num)
{
num = 0;
printf("El valor de num es: %d\nY la direccion de memoria es: %d",num,&num);
}


Bueno. Como vemos en este ejemplo se crea una variable n, y una funcion cambiarvalor con un parametro int llamado num.
Se le da el valor 5 a n, se imprime en pantalla su valor y su direccion de memoria.
Luego se llama a la funcion cambiarvalor a la cual se le pasa el valor de n y se cambia a 0 y se muestra el nuevo valor y la direccion de memoria.
Pero la direccion de memoria no coincide. Y es porque nosotros no cambiamo el valor de n sino de num. Entonces como podemos cambiar el valor?. Utilizando un puntero, ya que si nosotros intentamos cambiar el valor directamente a n, como la variable esta creada dentro del main nos daria un error, porque lo que se declara en el main solo puede usarse en el main, no es valido en una funcion. Lo que se declara fuera si puede usarse en todo.
Entonces, la unica opcion que tenemos es utilizar un puntero que guarde la direccion de memoria de n y pasar a la funcion la direccion de memoria y que entonces la funcion lo que haga es reemplazar el valor de dicha direccion de memoria, por lo tanto estaria reemplazando el valor de n.
Vamos a hacer un ejemplo...

Código: c
#include <stdio.h>
#include <conio.h>
int cambiarvalor(int *num);
main()
{
int n=5;
printf("El valor de n es: %d y la direccion de memoria es: %d",n,&n);
cambiarvalor(&n);
printf("\nEl valor de n es: %d y la direccion de memoria es: %d",n,&n);
getch();
}
int cambiarvalor(int *num)
{
*num = 0;
}


Como veran creamos una funcion cambiarvalor cuyo parametro num es un puntero. Le damos a la variable n valor 5, imprimimos la direccion de memoria y el valor en pantalla. Luego llamo a la funcion cambiarvalor y le paso la direccion de memoria de n y dentro de la funcion cambio el valor de la direccion de memoria de n por c.
Luego de llamar la funcion y que el valor sea mostrado vuelvo a imprimir el valor de n  y la direccion de memoria.
Fijense que la direccion de memoria de ambas lineas es la misma, pero el valor es distinto.
Acabamos de hacer un cambio mediante punteros.

OK. Esto es todo sobre punteros. Ahora aprovechare a dejale un par de ejercicios para que hagan sobre este tema antes de pasar a la siguiente parte.

EJERCICIOS DE LA PARTE 4:

Problema Nº1:

Realizar un programa que lea 25 numeros enteros positivos, determine el mayor numero par y el menor impar de todos. Se debe utilizar una funcion que calcule el menor, el mayor y la determinacion de si es impar o no. La función definida deberá retornar el resultado correspondiente. El programa principal debe imprimir los 25 numeros y lo retornado por la funcion.

Problema Nº2:

Dado el siguiente programa. ¿Qué valores imprime?

Código: c
#include <stdio.h>
#include <conio.h>
int f(int *x, int y){
*x=*x-1:
y=y+1;
printf("%d %d - ", *x,y);
}
main()
{
int i,b,a;
i=b=a=0;
for( ;i<3;i++)
{
printf("%d %d - ",a,b);
f(&a,b);
printf("%d %d - ",a,b);
}
getch();
}


Problema Nº3:

Leer 3 numeros reales y mostrar el mayor y el menor utilizando una sola función

Problema Nº4:

Un señor tiene una reunion a un cierto horario (hora, minutos). Llama por telefono y avisa que llegará X minutos mas tarde. Cual es el nuevo horario?

Problema Nº5:

Leer código de articulo, costo y categoria (1 o 2) hasta que codigo sea 0. Definir una funcion que por cada articulo leido calcule: la ganancia que será el 10% del costo si este es mayor a 100$ o sino el 25% y el IVA si es categoria 1 será del 10,5% sino el 21% del costo+ganancia.
Mostrar el precio final como costo+ganancia+IVA.

Ok los dejo con esto. La proxima parte es ARREGLOS. Por favor como digo siempre si no saben hasta aquí no sigan avanzando.
Suerte!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PARTE 5 - ARREGLOS

Bueno despues de un tiempo que habia dejado algo abandonado el curso por falta de tiempo escribo la quinta parte que es Arreglos y ya casi estamos por terminarlo. Luego de esto solo queda 1 parte mas.

Bueno vamos a definir lo que es un arreglo. Un arreglo es una serie de elementos que ocupan un determinado espacio de memoria y que estan relacionadas entre si.
Para declarar los arreglos vamos a hacerlo igual que si fuera una variable, solo que luego de especificar el nombre del arreglo vamos a decir entre corchetes cuantos lugares de guardaran.
Vamos a dar un ejemplo.

Código: c
int num[5]; // Con esto declaramos un arreglo entero llamado num con 5 lugares.


Entonces, en la variable num podemos guardar 6 valores enteros en: num[0],num[1],num[2],num[3],num[4],num[5]
Nosotros indicamos que en num guardamos 5 espacios. Pero estos comienzan desde 0 asi que en realidad son 6.
Es como si tuvieramos 6 variables en 1. Porque a traves de un nombre de variable y un subindice (el numero que esta entre corchetes) nosotros podemos guardar y obtener valores.

Bueno. Vamos a hacer un ejercicio en el cual creamos un arreglo de 3 lugares y utilizando printf y scanf vamos a pedir que ingresen 4 numeros (para los espacios 0, 1, 2 y 3) y luego vamos a mostrarlos en pantalla.

Código: c
#include <stdio.h>
#include <conio.h>
main()
{
int a[3], i;
for(i=0;i<4;i++)
{
printf("Ingrese un numero...\n");
scanf("%d",&a[i]);
}
printf("\n\n----------------\nNumero 0: %d\nNumero 1: %d\nNumero 2: %d\nNumero 3: %d",a[0],a[1],a[2],a[3],a[4]);
getch();
}


Bueno vamos por partes.

Código: c
int a[3], i;


Creamos el arreglo a y la variable i. Vemos que lo podemos hacer en la misma linea sin problemas. Un arreglo es basicamente una variable.

Código: c
for(i=0;i<4;i++)
{
printf("Ingrese un numero...\n");
scanf("%d",&a[i]);
}


Utilizamos un bucle for con la variable i que es igual a 0 y va de 0 a 3 sumando 1.
Pedimos que ingresen un numero y a ese numero que ingresan lo guardamos en a donde i es el valor de la variable y que sera 0, 1, 2 y 3.

Código: c
printf("\n\n----------------\nNumero 0: %d\nNumero 1: %d\nNumero 2: %d\nNumero 3: %d",a[0],a[1],a[2],a[3],a[4]);


Mostramos los valores en pantalla como lo vinimos haciendo siempre indicando el subindice del arreglo a.
Como veran.. no cambia mucho el manejo que hemos hecho siempre sobre las variables. De hecho no ha cambiado nada solo se le agregan los subindices.
Bueno ahora vamos a aplicar operaciones matematicas sobre los arreglos.
Vamos a utilizar el mismo codigo que antes, hacemos un arreglo de 3 espacios, pedimos que ingresen los valores y luego mostramos en pantalla el resultado de el valor del subindice 0 por el del subindice 1 y el valor del subindice 2 mas el del subindice 3.
Quedaria algo asi...

Código: c
#include <stdio.h>
#include <conio.h>
main()
{
int a[4], i;
for(i=0;i<4;i++)
{
printf("Ingrese un numero...\n");
scanf("%d",&a[i]);
}
printf("\n\n----------------\nNumero 0*1: %d\nNumero 2+3: %d",a[0]*a[1],a[2]+a[3]);
getch();
}


Bueno, este codigo es muy similar al anterior con la diferencia de que en esta linea:

Código: c
printf("\n\n----------------\nNumero 0*1: %d\nNumero 2+3: %d",a[0]*a[1],a[2]+a[3]);


Imprimimos en pantalla 2 valores que son a[0]*a[1] osea, el valor del subindice 0 de a por el valor del subindice 1 de a. Y... a[2]+a[3].

Bueno. Hemos visto como declarar arreglos y cargar datos en el. A los datos los cargaremos con un for.
Pero que tal si no sabemos cuantos espacios debemos reservar en un arreglo?
En ese caso va a ser un poco distinto.. Supon que tenemos un arreglo, pero no sabemos cuantos valores debemos almacenar en el. Entonces creamos el arreglo con un numero como maximo.
Por ejemplo.. yo no se cuantos espacios debo reservar pero seran 100 como maximo no mas que eso. En ese caso debere pedirle al usuario que especifique la cantidad de valores a ingresar y luego si cargar los datos.
Lo haremos de esta manera:

Código: c
#include <stdio.h>
#include <conio.h>
main()
{
int a[100], i, c;
do{
printf("Ingrese la cantidad de espacios a reservar....\n");
scanf("%d",&c);
}while(c<1 || c>100);
for(i=0;i<=c;i++)
{
printf("Ingrese un numero para el subindice %d...\n",i);
scanf("%d",&a[i]);
}
printf("\n\n--------------\n");
for(i=0;i<=c;i++)
{
printf("Valor de %d = %d\n",i,a[i]);
}
getch();
}


Bueno analicemos por partes.

Código: c
int a[100], i, c;


En primer lugar creamos el arreglo con 100 espacios. Ese sera el maximo aunque nosotros no sabemos cuantos utilizaremos de esos 100. Y creamos otro par de variables que utilizaremos.

Código: c
do{
printf("Ingrese la cantidad de espacios a reservar....\n");
scanf("%d",&c);
}while(c<1 || c>100);


Utilizamos un bucle do while para pedir al usuario que ingrese la cantidad de espacios que se utilizaran con la condicion de que este numero que ingresen no debe ser menor a 1 es decir, no puede ser ni cero ni negativo y no debe ser mayor a 100. Osea debe ser entre 1 y 100.
Si se da como verdadera esta condicion vuelve a pedir que se ingrese la cantidad de espacios, de lo contrario pasa a lo siguiente.

Código: c
for(i=0;i<=c;i++)
{
printf("Ingrese un numero para el subindice %d...\n",i);
scanf("%d",&a[i]);
}


Utilizamos un for que va desde 0 hasta el numero ingresado pidiendo que se ingrese el valor para asignarle a un determinado subindice.

Código: c
printf("\n\n--------------\n");


Luego de ingresar todos los valores, dejamos 2 renglones, ponemos una linea y dejamos otro renglon para separar bien una cosa de otra.

Código: c
for(i=0;i<=c;i++)
{
printf("Valor de %d = %d\n",i,a[i]);
}
getch();
}


Nuevamente utilizamos un for pero esta vez para mostrar los valores que previamente habiamos ingresado.

Muy bien ahora lo que vamos a ver es como podemos buscar un valor en los subindices. Por ejemplo. Tengo un arreglo de 10 espacios. Quiero buscar en en alguno de esos 10 espacios esta guardado el valor "56". ¿Cómo hago esto?
De la siguiente manera....

Código: c
#include <stdio.h>
#include <conio.h>
main()
{
int a[10], i, b, w=0;
for(i=0;i<=10;i++)
{
printf("Ingrese un numero para el subindice %d...\n",i);
scanf("%d",&a[i]);
}
printf("\n\n--------------\nIngrese el valor que desea buscar:\n");
scanf("%d",&b);
while(a[w] != b && w<=10)
{
w++;
}
if(w==11)
{
printf("No se encuentra el numero %d",b);
}
else
{
printf("El numero %d se encuentra en el subindice %d",b,w);
}
getch();
}


Bueno veamoslo por partes.

Código: c
int a[10], i, b, w=0;


Primero creo el arreglo, y creo un par de variables que vamos a utilizar luego. Como veran el arreglo es de 10 espacios.

Código: c
for(i=0;i<=10;i++)
{
printf("Ingrese un numero para el subindice %d...\n",i);
scanf("%d",&a[i]);
}


Utilizamos un bucle for. La variable i es igual a 0. El bucle for se ejecutara hasta que i sea menor o igual a 10. En cada ejecucion vamos a sumarle 1 a i.
Pedimos que ingresen un numero para cada subindice y los guardamos.

Una vez que el usuario ya ingreso todos los numeros del arreglo sigue la siguiente linea:

Código: c
printf("\n\n--------------\nIngrese el valor que desea buscar:\n");
scanf("%d",&b);


Aqui lo que hacemos primero es imprimir una linea para separar y que quede mas ordenado. Y pedimos al usuario que ingrese el valor que desea buscar en el arreglo.
A este valor que el usuario ingresa lo guardamos en la variable b.

Código: c
while(a[w] != b && w<=10)
{
w++;
}


Utilizamos un while para buscar el valor dentro del arreglo. En las primeras lineas cuando creamos el arreglo y una serie de variables habiamos creado la variable w con el valor 0. Aqui decimos que mientras a[w] osea.. el valor del arreglo a con subindice w sea distinto al valor que ingreso la persona para buscar Y w sea menor o igual a 10 entonces ejecutamos lo que esta entre llaves. Si se determina falsa entonces se termina el mientras.
Vamos a explicarlo con un ejemplo supongamos que ingresamos los 11 valores para a[10] y a[3] es igual a 12. Y luego de ingresar todos los valores nosotros buscamos el valor 12.
El while comenzara con w en valor 0. Entonces la condicion sera que mientras a[0] sea distinto a 12 y w sea menor o igual a 10, entonces ejecutamos las acciones de while. Como el valor 12 lo pusimos en a[3], entonces a[0] sera distinto y al ser w igual a 0 tambien se cumple la segunda condicion que es que w sea menor o igual a 10. Entonces se ejecutan las acciones del while y a w se le suma 1. Entonces w pasa de ser 0 a ser 1. Ahora otra vez se vuelve a ejecutar el while. Y comprueba... mientras a[w] sea distinto a 12. Ahora sera mientras a[1] sea distinto a 12 y w (osea 1) sea menor o igual a 10, la condicion es verdadera y se vuelve a ejecutar las acciones. Y el w suma 1 y queda en 2 ahora. Volvera a comprobar... si a[2] es distinto a 12. Como 12 es el valor de a[3], a[2] va a ser distinto. Y como w es igual a 2, entonces se cumple la segunda condicion que es w menor o igual a 10. Entonces otra vez se ejecuta las acciones del while y se suma 1. Y ahora w es igual a 3. Y vuelve a comprobar.. la primera condicion es que a[w] sea distinto a 12. Como w es 3 la condicion seria a[3] distinto a 12. Pero en esta ocacion no se cumple, porque nosotros dijimos que el 12 lo habiamos guardado en a[3] por lo tanto a[3] es igual a a[3], no distinto. A pesar que la segunda condicion se cumpla porque w que es 3 es menor a 10, la primera no se cumple y eso es suficiente para que se termine con el while y w queda con el valor 3. En cambio si nosotros buscamos un valor que en ningun momento ingresamos. w seguira incrementandose en 1 hasta llegar hasta 10. Al llegar hasta 10 comprobara que a[10] sea distinto al numero que ingresaron para buscar.. como sera distinto comprobara la segunda condicion que es que w, osea 10 sea menor o igual a 10. Es igual asi que se cumple entonces ejecuta la accion y se le suma 1 y ahora quedara en 11 y ahi cuando vaya a comprobar la segunda condicion no se cumplira porque 11 no es menor o igual a 10.
Entonces podemos decir que... a traves de el while, la variable w quedara con el numero del subindice de a que contiene el valor que nosotros buscamos, y en caso de que el numero que nosotros buscamos no se encuentre en el arreglo, w quedara con el valor 11 al terminar el while. Con estos datos nosotros podemos hacer lo siguiente:

Código: c
if(w==11)
{
printf("No se encuentra el numero %d",b);
}
else
{
printf("El numero %d se encuentra en el subindice %d",b,w);
}


Una simple condicion if. Si w es igual a 11 entonces mostramos un mensaje que no se pudo encontrar el valor b, ya que si w es igual a 11 significa que ha pasado ya por todo el arreglo y no ha encontrado ninguna coincidencia.
Sino.. mostrara el mensaje diciendo que el valor b se encuentra en el subindice w.

Se entendio?
Ahora bien. Como nos manejamos con arreglos en funciones?
Pues bien. Si tenemos planeado trabajar en funciones debemos saber que...
Al declarar una funcion debemos definir que recibiremos un arreglo poniendo corchetes. Por ejemplo:

Código: c
int funcion1(arreglo[],variable);


No es necesario que pongamos la cantidad de los espacios entre los corchetes.
Luego, cuando llamemos a la funcion, no es necesario que le pasemos el arreglo con corchetes ni nada. Simplemente la llamamos de la siguiente manera:

Código: c
x = funcion1(arreglo,variable);


Si nosotros pasamos el arreglo asi sin corchetes ni nada lo pasara todo. Pero si nosotros queremos pasar el subindice 4 por ejemplo, entonces si ponemos:

Código: c
x = funcion1(arreglo[4],variable);


Muy bien lo que vamos a hacer para que se entienda esto es una calculadora utilizando vectores. La calculadora lo que hara es sumar, restar, dividir o multiplicar 2 numeros utilizando vectores.
Hagamosla...

Código: c
#include <stdio.h>
#include <conio.h>
int sumar(int num[]);
int restar(int num[]);
int dividir(int num[]);
int multiplicar(int num[]);
int w;
main()
{
int a[1], i, b;
for(i=0;i<=1;i++)
{
printf("Ingrese el Num %d...\n",i+1);
scanf("%d",&a[i]);
}
printf("\n\n--------------\nIngrese el numero segun la accion que desea hacer:\n1. Suma\n2.Resta\n3.Multiplicar\n4.Dividir\n");
scanf("%d",&b);
switch(b)
{
case 1:
sumar(a);
break;
case 2:
restar(a);
break;
case 3:
multiplicar(a);
break;
case 4:
dividir(a);
break;
default:
printf("La opcion elegida no es valida");
}
printf("El resultado es %d",w);
getch();
}
int sumar(int num[])
{
w=num[0]+num[1];
}   
int restar(int num[])
{
w=num[0]-num[1];
}
int multiplicar(int num[])
{
w=num[0]*num[1];
}
int dividir(int num[])
{
w=num[0]/num[1];
}


Muy bien este codigo me ha quedado mas largo que los otros.
Expliquemoslo...

Código: c
int sumar(int num[]);
int restar(int num[]);
int dividir(int num[]);
int multiplicar(int num[]);
int w;


Declaramos 4 funciones llamadas sumar, restar, dividir y multiplicar. Estas funciones solo tienen un parametro que es un arreglo entero al que llamamos num. Como veran, lo indicamos con los corchetes.
Tambien creamos la variable w que es en donde guardaremos el resultado que arrojen las funciones.

Sigamos...

Código: c
int a[1], i, b;
for(i=0;i<=1;i++)
{
printf("Ingrese el Num %d...\n",i+1);
scanf("%d",&a[i]);
}


Ya dentro del bloque main creamos un arreglo de 1 espacio (2 valores ya que tiene el subindice 0 y 1) y con un bucle for pedimos que se ingrese el numero 1 y 2. Y lo guardamos en a[0] y a[1].

Código: c
printf("\n\n--------------\nIngrese el numero segun la accion que desea hacer:\n1. Suma\n2.Resta\n3.Multiplicar\n4.Dividir\n");
scanf("%d",&b);


Aqui lo que hacemos es pedir que nos indiquen que se quiere hacer. Si el usuario pone 1 es que quiere sumar, si pone 2 quiere restar, si pone 3 quiere multiplicar y si pone 4 quiere dividor. El numero que ingrese lo guardamos en la variable b.

Sigamos...

Código: c
switch(b)
{
case 1:
sumar(a);
break;
case 2:
restar(a);
break;
case 3:
multiplicar(a);
break;
case 4:
dividir(a);
break;
default:
printf("La opcion elegida no es valida");
}


Ahora utilizamos un switch para realizar determinadas acciones segun el valor de b.
Si es 1 llamamos a la funcion sumar y le pasamos el parametro a. Como veran, a (que es el arreglo) se lo pasamos sin corchetes. Porque al principio cuando declaramos la funcion ya pusimos que ese parametro correspondia a un arreglo, asi que no debemo indicarlo otra vez.
Si nosotros quisieramos pasar un valor en particular por ejemplo a[1] entonces lo pasariamos de este modo.
Si es 2 llamamos a la funcion restar tambien con el parametro a. Y asi con las demas opciones y su correspondiente funcion.
Si el valor de b no es ni 1 ni 2 ni 3 ni 4 entonces muestra un mensaje que dice que la opcion elegida no es valida.

Código: c
printf("El resultado es %d",w);


Finalmente muestra el restultado que se almacenara en la variable w y ahi termina el bloque main. Ahora vemos las funciones...

Código: c
int sumar(int num[])
{
w=num[0]+num[1];
}   


Bueno... no hay mucho que explicar. Simplemente decimos que w es igual a num[0] mas num[1].. recordemos que nuestro arreglo (el que utilizamos en el bloque main) tenia el nombre a pero cuando nosotros declaramos la funcion declaramos el parametro con el nombre num asi que asi debemos referirnos al arreglo dentro de esta funcion.
Lo que hara es sumar num[0] que es lo mismo que a[0] en el bloque main mas num[1] que es lo mismo que a[1] en el main y el resultado lo almacenara en la variable w que al haberla declarado al principio, afuera de cualquier funcion y afuera del main. Podemos utilizarla y actualizarla desde cualquier parte del programa sin problemas.

Bueno gente. Con esto terminamos con todo lo que es arreglos. Se me ha hecho un poquito largo creo pero he explicado con bastante detalle todo.
El proximo post que hare sera para poner varios ejercicios para que practiquen este tema antes de continuar con el ultimo tema y ya terminar este curso.

Ok. Espero que les haya gustado y que lo hayan entendido sin problemas.
Suerte!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Impresionante  :o gracias por este aportazo cuando tenga tiempo pienso seguirlo el curso entero
Salu2  ;D

EJERCICIOS PARTE 5:

Ok. Como ya termine la quinta parte aqui les dejare una serie de ejercicios para que los practiquen y vean si han aprendido bien todo lo anterior.

Problema Nº1:
Introducir un arreglo de 10 componentes.
a) Imrpimir la cuarta componente
b) Imrpimir la segunda componente
c) Imprimir las componentes en orden invertida.
d) Imprimir el producto entre la primera y la ultima componente.
e) Imprimir las componentes de indice impar
f) Imprimir la suma de las componentes de indice par
g) Imprimir la multiplicacion que resulta de intercambiar la primera con la ultima componente
h) Imprimir el vector que resulta de intercambiar la segunda con la ultima componente.

Problema Nº2:
Imprimir el vector dando en primer lugar la cantidad de componentes (N<=8)
a) Imprimir los componentes pares
b) Imprimir la suma de las componentes
c) Imprimir el promedio de las componentes del vector
d) Obtener el modulo de un vector (módulo de un vector es la raíz cuadrad de la suma de los cuadrados de sus componentes)

Problema Nº3:
Dado dos vectores A y B de N<15 elementos cada uno, calcular un vector C tal que C = A+B

Problema Nº4:
Introducir un vector de 10 elementos. Eliminar la primer componente y deslazar todas las demas 1 lugar.

Problema Nº5:
Generar un vector AB con los 15 primeros numeros primos. Imprimir 4, 6, 7 y 9 componente de AB.

Problema Nº6:
Dado un vector, imprimir los valores maximo y minimo.

Problema Nº7:
Dado un vector, imprimir el lugar que ocupa el minimo. Tener en cuenta que este valor puede estar repetid, en ese caso imprimir todos los lugares donde aparece este valor.

Problema Nº8:
Encontrar un elemento de un vector ordenado.

Ok. Con esto creo que ya es suficiente.
Si pueden hacer estos ejercicios entonces una vez que haga la siguiente y ultima parte de este curso de introduccion pueden seguir sin problema.
Como ya he dicho antes, si no terminan de entender, relean, pregunten en caso de ser necesario pero no sigan si no entienden bien todo para no liarse.

Ok. Suerte!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta