Menú principal

Escuela de C/C++

Publicado por cazador.asesino, Enero 12, 2009, 05:04:06 PM

Tema anterior - Siguiente tema

cazador.asesino

Escuela de C/C++



Reglas o guías de la Escuela:

1.- Dirigido a: Todo aquel con ganas de aprender estos lenguajes y por supuesto algo de tiempo disponible.

2.- Si cometo alguna equivocación en alguna explicación, siéntanse libres de corregirme(eso incluye faltas ortográficas) , ya que para eso estamos para compartir conocimientos . Las sugerencias o correciones pueden enviarlas via un mensaje privado o como una respuesta si asi lo creen conveniente.

4.- Trataré de enumerar las instrucciones que son las que deberían ser realizadas por ustedes

5.- Por lo general las definiciones y/o conceptos que coloco serán de wikipedia, caso contrario trataré de mencionar la fuente.

Para empezar, algunos conceptos básicos:

Definición de C (Wikipedia):
C es un lenguaje de programación creado en 1972 por Ken Thompson y Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.

Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.

Definición de C++ :
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.

Compilador
Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es código máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.

Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

IDE
Un entorno de desarrollo integrado o, en inglés, Integrated Development Environment ('IDE'), es un programa compuesto por un conjunto de herramientas para un programador. Puede dedicarse en exclusiva a un sólo lenguaje de programación o bien, poder utilizarse para varios. Ej: Dev C++, un IDE para el lenguaje de programación C++.

Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica GUI. Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macros para Microsoft Word.

Código fuente

El código fuente de un programa informático (o software) es un conjunto de líneas de texto que son las instrucciones que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el código fuente de un programa está descrito por completo su funcionamiento. El código fuente de un programa está escrito por un programador en algún lenguaje de programación, pero en este primer estado no es directamente ejecutable por la computadora, sino que debe ser traducido a otro lenguaje (el lenguaje máquina o código objeto) que sí pueda ser ejecutado por el hardware de la computadora. Para esta traducción se usan los llamados compiladores, ensambladores, intérpretes y otros sistemas de traducción.

El área de la informática que se dedica a la creación de programas y, por tanto a la creación de su código fuente, es la programación.

1.- Los interesados deberán descargar algun IDE para trabajar alli, este puede ser:
    -> Borland C++
    -> Dev C++
    -> Codeblocks
    Personalmente recomiendo cualquiera de los dos últimos.

2.- Asumiré que descargaron el Dev C++ para dar algunas explicaciones, en otro caso como puede ser el Codeblocks el funcionamiento es similar.

Una vez instalado el Dev C++ y abierto el programa,seleccionen en el Menú Archivo - Nuevo - Archivo Fuente se verá de la siguiente manera:



El Área de trabajo es en la que nosotros escribiremos el Código Fuente, una vez listo lo compilamos y ejecutaremos (Presionando F9) .
Cuando compilemos nuestros códigos, se obtendrá una ventanita más o menos como esta:



En la que se mostrarán los resultados.

Por el momento, esta sera la introducción , agregaré más cosas en estos dias, espero que les agrade.

--->   142857   <---


fullmetalplayer

venga ya kiero aprender  ;D me pongo a estudiar :D

ahorita me descargo un IDE :D
[IMG]http://img291.imageshack.us/img291/1749/mxoneuserun2.jpg[/img]
Si buscas resultados distintos, no hagas siempre lo mismo


cazador.asesino

#2

ESCUELA DE C++ 2



Un programa en C/C++ consta de:

-> Una o más líneas de cabeceras o librerías (Una librería es un conjunto de recursos [algoritmos] prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones).

-> Prototipos de Funciones y/o Procedimientos del Programador

-> Funcion principal (main)

-> Código de las funciones y/o procedimientos

Ejemplo:


     

Uso de algunas librerías, solo se mencionan algunas de sus funciones – las que utilizaremos por ahora -.

-> stdio.h :

printf     Muestra datos en la pantalla equivale al "escribir en pseudocódigo"
           Ejm:  
           printf("Hola"); //Muestra el texto Hola en la pantalla

scanf      Obtiene valores , equivale al "leer"
            Ejm:
            int a; //Declaración de la variable a
            scanf("%d",&a); // %d indica que se va a leer un entero y se almacena en la //variable a

-> stdlib.h:

system     Pasa la cadena al intérprete de comandos(cmd)
             Ejm:
             system("pause"); // detiene el programa


-> iostream.h: Pertenece al C++

cout       Muestra en pantalla al igual que el printf, pero sin especificar los tipos de las variables.
            Ejm:
            cout<<"Hola";

cin        Al igual que scanf lee una variable pero sin especificar el tipo de dato a leer
           Ejm:
           int a; //Declaración de una variable entera a
           cin>>a; //Lectura de la variable a;

-> string.h:

strcpy    Copia una cadena de caracteres a una variable especificada
strcmp    Compara 2 cadenas de caracteres


Más conceptos básicos:

-> Operadores Lógicos

Operador Lógico        Operador en C/C++
NO                               ¡
AND                             &&
OR                               ||

-> Tipos de variables

int     enteros: 1, 5 , 95 , -14 , 0
float reales: 3.1416, -1.414 , 5
char caracteres : 'a', '5'

-> Asignación: Consiste en entregar un valor dado a una variable.

Ejm:
int a,b; //Declaramos dos variable tipo entero
a=2;     //Asignamos el valor de 0 a la variable a, a = 2
b=a;     //Asignamos el valor de a hacia b, por lo que b = 2

-> Especificadores de Formato: Se utilizan para decirle a las funciones scanf y printf que tipos de dato van a leer o a mostrar

%c      carácter (char)
%s  cadena de caracteres (string)
%d  enteros
%f   reales o punto flotante
%x  Número hexadecimal
%p  apuntador

-> Comentarios: Son elementos del lenguaje que no realizan ninguna función en el programa, su trabajo es mejorar la comprensión del código para el programador.

//Este es un comentario de una línea

/* Comentario
de varias
lineas
*/

1.- Abriremos el Dev C++, Abrimos un nuevo archivo y escribiremos, aunque aun no sepamos lo que signifique:


#include <stdio.h>  
#include <stdlib.h>

int main()
{
printf(Hola Mundo\n);  
system(pause);            
return 0;
}


Guardamos el programa y lo compilamos; observaremos lo que sucede, ahora la explicación:

Usaremos printf por ello se incluye la librería stdio.h y debido al uso de system se incluye stdlib.h

\n indica un salto de linea
system("pause");   Detiene la ejecución del programa
return 0 ; Devuelve el valor de 0

2.- Un segundo ejemplo, un programa que sume dos números:

#include <stdio.h>  
#include <stdlib.h>

int main()
{
int a,b,c;  //Tres variables enteras, recuerde esto es un comentario
printf(Escriba el primer numero: );
scanf(%d,&a);   // %d indica que es entero y &a lo almacena en a
printf(\nEscriba el segundo numero: );
scanf(%d,&b);

//Sumando y almacenándolo en c
c=a+b;
//Mostrando
printf(Suma = %d,c);

system(pause); //Esta orden pausa y hace aparecer en pantalla presione una tecla //para cntinuar
return 0;

}


Al compilarlo comprobaremos su funcionamiento.

3.- Con lo ya aprendido, se podría:
a) Escribir el código para un programa que nos solicite 3 notas de practicas y nos devuelva el promedio.
b) Escribir un programa que reciba un número de 3 cifras y las invierta mostrándonos el numero invertido.
--->   142857   <---


makubex

Estructuras de Control:

Aportando al curso he querido iniciar el tema de estructuras de control porque me parece apropiado en este momento iniciar con lo básico:

Las estructuras de control son herramientas que proporcionan los lenguajes de programaación para proporcionar un control sobre el flujo del programa, para empezar aprenderemos 2 tipos:
1) Estructuras de seleccion simple y múltiple
2) Estructuras repetitivas

Estructuras de seleccion simple:
Tambien son llamados Estructura de toma de desiciones, el común en casi todos los lenguajes de programación es la sentencia if. aunque en algunos lenguajes la sintaxis cambia el funcionamiento es similar.

El funcionamiento es el siguiente:

Si se cumple una condición
  Ejecutar esta parte del código
Si no
  Ejecutar esto otro

Cabe mencionar que la parte Si no es opcional.

Show me the code!
Un programa en C que identifica el mayor de dos numeros
#include <stdio.h>

int main ()
{
  int a, b;
 
  a = 1;
  b = 5;

  //Aqui el programa compara los valores
  if (a < b)
    printf(El numero menor es %i, a);
  return 0;
}

Nota 1: Bloques de código
La estructura if solo ejecuta una instrucción despues de la linea en la que se encuentra:
if (expresion)
  SoloEjecutoEsto;

Para ejecutar más de dos instrucciones se utilizan los bloques de código que se definen con los signos {}

if (expresion)
{
  Sentencia1;
  Sentencia2;
  SentenciaN;
}

Probablemente algunos que ya estan iniciados en programación aprendieron unicamente a programar con bloques incluso si solo se tiene que ejecutar una sola instrucción. Esto queda a desición, pero si queremos aprender buenas practicas y crear un código compacto y elegante pues hay que  ver como programan thompson, ritchie y kernighan, los creadores de C
#apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||  
*  /\---/\
    ~~   ~~  
...."Have you mooed today?"...
[img]http://lacasadetux.files.wordpress.com/2008/05/debianuser7.png[/img]
Software Libre para una Sociedad Libre


Deegu!

buenos aportes jew je je aunque no habia pasado antes es un muy buen material el quie estan aportande je je je sigan asi je je je

portense mal
[center][img]http://i273.photobucket.com/albums/jj226/Rutifruti2/FU-Sig.jpg[/img]

gracias a los usuarios de LDC por visitarnos y preferirnos


cazador.asesino

ESCUELA DE C++ - 03



Estructuras De Control Selectivas:

* if              : Selectiva Simple

* if – else     : Selectiva Compuesta

Ya explicados por makubex  8) , aquí un ejemplo más sobre su uso:

1A.- Un programa que ordena 3 números de menor a mayor, este funciona guardandolo como archivo *.c o *.cpp

#include <stdlib.h>
#include <stdio.h>

int main()
{
  int A, B, C;

  printf(\nIngrese A: );
  scanf(%d,&A);

  printf(\nIngrese B: );
  scanf(%d,&B);

  printf(\nIngrese C: );
  scanf(%d,&C);

  if(A>B)
  {
      if(B>C)
      {
        printf(C, B, A\n);
      }
      else
      {
        if(A>C)
        {
            printf( B, C, A \n);
        }
        else
        {
            printf( B, A, C\n);
        }
      }
  }
  else
  {
      if(B>C)
      {
        if(A>C)
        {
            printf(C, A, B\n);
        }
        else
        {
            printf(A, C, B\n);

        }
      }
      else
      {
            printf(A, B, C\n);

      }
  }

  system(PAUSE);
  return 0;
}


1B.- El mismo programa, pero en vez de printf y scanf se uso cin y cout, por ello solo cmpilará al guardarlo como *.cpp

#include <stdlib.h>
#include <iostream.h>

int main()
{
  int A, B, C;

  cout<<\n\nIngrese A: ;
cin>>A;

  cout<<\nIngrese B: ;
cin>>B;

cout<<\nIngrese C: ;
cin>>C;

  if(A>B)
  {
      if(B>C)
      {
        cout<<C, B, A\n;
      }
      else
      {
        if(A>C)
        {
            cout<< B, C, A \n;
        }
        else
        {
            cout<< B, A, C\n;
        }
      }
  }
  else
  {
      if(B>C)
      {
        if(A>C)
        {
            cout<<C, A, B\n;
        }
        else
        {
            cout<<A, C, B\n;

        }
      }
      else
      {
            cout<<A, B, C\n;

      }
  }

  system(PAUSE);
  return 0;
}



* switch       : Selectiva Múltiple, Una variable denominada selector,nos permite escoger una de varias posibilidades(casos)

switch(selector)
{
  case 1: acción 1;
          break;
  case 2: accion 2;
          break;
  ...
  case n: accion n;
}


2.- Este programa nos permite mostrar el nombre del dia actual al leer el numero de dia 1: lunes 2: martes ...


#include <iostream.h>
#include <stdlib.h>

int main()
{
int dia;
cout<<Ingrese el numero de dia de la semana: ;
cin>>dia;

cout<<\nEs el dia : ;

switch(dia)
{
case 1:cout<<Lunes;
      break;
case 2:cout<<Martes;
      break;
case 3:cout<<Miercoles;
      break;
case 4:cout<<Jueves;
      break;
  case 5:cout<<Viernes;
      break;
case 6:cout<<Sabado;
      break;
case 7:cout<<Domingo;
      break;
}
system(pause);
}



Proximamente: Estructuras Repetitivas xD
--->   142857   <---


makubex

#6
ESTRUCTURAS REPETITIVAS

C Y C++ implementan tres estructuras de repeticion o bucles en otros lenguajes, a saber:

1. for
2. while
3. do - while

y todos marcan ciertas diferencias entre si que aprenderemos sobre la marcha...

CICLO FOR
Repite una instruccion (o grupo de instrucciones) desde un valor inicial hasta un valor final.

Sintaxis:
for(valor_inicial;valor_final(condicion);incremento)
  instruccion;


El valor final debe ser una condicion lógica como puede ser a < 10, x>= 20, z <= 15 y debemos tener cuidado de que esa condición ocurra, o nuestro programa nunca terminará...

Ejemplo:
for (a= 1; a<11; a++)
  printf(La cuenta es: %i\n, a);

a=1: Es el valor inicial de nuestro contador, establece a una variable a (previamente declarada) el valor de 1.

a<11: Es el valor final expresado en una condición lógica (verdadero o falso). Cada vez que se ejecute el ciclo el programa preguntara: ¿Es a menor a 11? Si la respuesta es verdadera (true) el ciclo se ejecuta una vez mas... sino, se salta a la siguiente instrucción, sea cual sea...

a++: Establece que la variable a se incrementara de uno en uno... tambien es posible poner una sentencia del tipo: a=a+2 para que se incremente de dos en dos...

SHOW ME THE CODE:
// Lenguaje C archivo: for.c
#include <stdio.h>

int main()
{
int pares;
printf(Este programa imprime los numeros pares entre 0 y 20);
for (pares=0; pares<=20; pares+=2)
  printf(%i\n, pares);
return 0;
}


// Lenguaje C++ archivo: for.cc o for.cpp
#include <iostream>

using namespace std;

int main (){
  for (int pares = 2; pares <= 20; pares+=2)
    cout<<pares<<endl;
  return 0;
}


Notas: En C es necesario declarar una variable antes de usarla, en C++ podemos declararla en el for justo antes de usarla, con el conocimiento de que despues de la salida del for la variable se destruye y no se podra utilizar mas adelante a menos que se declare nuevamente.

Si compilamos con un compilador de C++ probalemente nos acepte la declaracion dinamica, sin embargo en cualquier unix la cosa si cambia y nos dara error si no respetamos los estandares c - c++

Para compilar en gnu/linux:
cualquier codigo c
$ gcc programa.c -o programa

cualquier codigo c++
$ g++ programa.cc -o programa
#apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||  
*  /\---/\
    ~~   ~~  
...."Have you mooed today?"...
[img]http://lacasadetux.files.wordpress.com/2008/05/debianuser7.png[/img]
Software Libre para una Sociedad Libre


makubex

#7
Programa que apaga la computadora en 10 segundos usando FOR...

Antes del programa es conveniente aclarar que el siguiente código no es ANSI lo cual significa que solo funciona en el S.O. en el que se programo... y lo aclaro por lo siguente: este es un programa para linux compilado con gcc:


#include <stdio.h>

int main (){
int t;
for (t=10;t>0;t--){
  printf(El sistema se apagara en %d segudos... Si siente panico grite y corra en circulos\n,t);
  sleep(1);
}
printf(Apagando el sistema\n);
system(poweroff);
return 0;
}


$gcc apagar.c -o apagar

Deseaba publicar la version para windows, asi que me puse a instalar el visual c++.net express edition 2008 de macacosoft para lo cual invertí como media hora en todo lo que tenia que instalar (en ese tiempo pude haber instalado linux completo) y al final resulta que me pidio reiniciar el sistema y o sorpresa, mi windows no volvio a encender... asi que publicare ese código cuando se me quite el enojo y repare mi windows pero por lo pronto sigo con debian linux... Si alguien quiere aportarlo creo que solo hay que cambiar el system(poweroff) por algo como system(shutdown -s -t 0) no recuerdo bien... usen codeblocks o dev para compilarlo... si usan el compilador de borland pueden usar delay(1000) en lugar de sleep(1) pero como no quiero reparar mi windows no les puedo confirmar... saludos

Ok Aqui va el codigo del mismo programa para windows. Nota: utilice el compilador GCC para windows disponible con Code Blocks aqui:
http://downloads.sourceforge.net/codeblocks/codeblocks-8.02mingw-setup.exe


#include <stdio.h>
#include <windows.h>

int main()
{
  int i;

  for (i=10; i>0; i--)
  {
      if (i==1)
            printf(El sistema se apagara en %d segundo... Si siente panico grite y corra en circulos\n, i);
      else
            printf(El sistema se apagara en %d segundos... Si siente panico grite y corra en circulos\n, i);
      Sleep(1000);
  }
  printf(Apagando el sistema\n);
  system(shutdown -s -t 0);
  return 0;
}


Cuando tengan su ejecutable pueden jugarle una broma (con forma de virus) a sus amigos:
Guarden su poweroff.exe en la memoria y creen un archivo que se llame autorun.inf que tenga lo siguiente

[autorun]
open=poweroff.exe


Cuando incerten la memoria la compu comenzara a mandar el mensaje que esta a punto de apagarse en 10, 9, 8, ...
Como es un programa personal ningun antivirus lo detectara, pero no deben estar desactivados los inicios automaticos

saludos...

Ultima nota: El hecho de usar comandos mediante system(Comando); hace que nuestro programa no sea portable... hay que usarlo con moderacion
#apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||  
*  /\---/\
    ~~   ~~  
...."Have you mooed today?"...
[img]http://lacasadetux.files.wordpress.com/2008/05/debianuser7.png[/img]
Software Libre para una Sociedad Libre


cazador.asesino

ESCUELA DE C/C++ - 04



ESTRUCTURAS DE CONTROL  WHILE – DO WHILE

WHILE: "Mientras la condición cumpla, hacer: " , Evalúa una condición y si esta cumple, realiza la acción para luego volver a realizar la comprobación y así sucesivamente.

a=0;
while(a<5)
{
a=a+1;
}

DO WHILE: "Hacer Mientras cumpla la condición" Realiza la acción una vez y de allí procede a verificar una condición, en caso sea verdadera el ciclo prosigue.

int b=0;
do{
b=b+1;
}while(b<5);

Observen el siguiente programa:


#include <stdio.h>

int main()
{
    int a=0;
    while(a<5)
    {
        a=a+1;
        printf(%d,a);
    }

    int b=0;

    do{
        b=b+1;
        printf(%d,b);
    }while(b<5);
}


Al compilar y ejecutar no notaran ninguna diferencia entre el while y do do-while en los resultados, pero en:


#include <stdio.h>

int main()
{
    printf(WHILE:\n);
    int a=5;
    while(a<5)
    {
        a=a+1;
        printf(%d,a);
    }

    printf(\nDO WHILE:\n);
    int b=5;

    do{
        b=b+1;
        printf(%d,b);
    }while(b<5);
}



Al compilar y ejecutar este código, Se observa que el printf dentro del DO – WHILE imprimió un resultado, esto se debe a que el Do-While realiza el proceso por lo menos una vez antes de la comprobación de la condición; Esta es la diferencia entre el While y Do-While.

(Lo vuelvo a colocar porque el anterior se borro :( )
--->   142857   <---


cazador.asesino

ESCUELA DE C/C++ - 05



PROGRAMANDO 01

Ahora que conocemos el manejo de las instrucciones if, if-else, switch, while, do-while y for, mostraré una idea de cómo hacer una aplicación sencilla que halle el factorial de un número ingresado.

1.- Empezamos por:


int main()
{
    //Declaración de variables
    int n,i,f;

    //Inicialización de variables
    n=1;
    i=0;
    f=1;

    //Lectura del número
    printf(Ingrese n: );
    scanf(%d,&n);

    //Cálculo del factorial
    while(i<n)
    {
        i=i+1;
        f=f*i;
    }

    //Presentación del resultado
    printf(Factorial = %d,f);
}


2.- Vemos que se puede "validar" el ingreso del número para que no acepte negativos, esta validación será realizada con un do-while


int main()
{
    //Declaración de variables
    int n,i,f;

    //Inicialización de variables
    n=1;
    i=0;
    f=1;

    //Lectura del número
    do{
        printf(Ingrese n: );
        scanf(%d,&n);
    }while(n<0);

    //Cálculo del factorial
    while(i<n)
    {
        i=i+1;
        f=f*i;
    }

    //Presentación del resultado
    printf(Factorial = %d,f);
}


3.- Podemos hacer que el programa no finalice y en vez de ello que nos pregunte si deseamos volver a calcular el factorial de otro número.


#include <stdio.h>

int main()
{
    //Declaración de variables
    int n,i,f;
    char resp;

    do{
        //Inicialización de variables
        n=1;
        i=0;
        f=1;

        //Lectura del número
        do{
            printf(Ingrese n: );
            scanf(%d,&n);
        }while(n<0);

        //Cálculo del factorial
        while(i<n)
        {
            i=i+1;
            f=f*i;
        }

        //Presentación del resultado
        printf(Factorial = %d,f);
        printf(\n=============================);

        printf(\nDesea continuar? : );
        fflush( stdin ); //Limpia el buffer del teclado (Utilizado para evitar errores al leer caracteres con el scanf)
        scanf(%c,&resp);
        printf(=============================\n);


    }while(resp=='s'||resp=='S');
}



4.- Esta fue una idea de cómo se va mejorando un programa a través de su programación.

Obs: Solo funciona hasta n=17 debido al tamaño límite de los int

Utilizo el fflush para limpiar el buffer de teclado(stdin), esto se realiza cada vez que use scanf para leer caracteres..

Más sobre el fflush

Más sobre el Buffer de teclado

// Seguiría Funciones, Procedimientos y luego arreglos unidimensionales, matrices, etc (menos mal que tenía una copia xD)

--->   142857   <---


makubex

F U N C I O N E S    Y    P R O C E D I M I E N T O S
Cuando existen partes de código que se repíten muchas veces a lo largo de un programa podemos recurrir a las funciones y los procedimientos.

Función: Es una fórmula o una serie de pasos del cual esperamos un resultado, por ejemplo: A = 5*2, el resultado para A es 10 y la función fue multiplicar 5 por 2.

Procedimiento: Es una serie de pasos establecidos en un orden específico, por ejemplo: El procedimiento para encender un carro: 1. Incerte la llave, 2. Gire la llave. La diferencia con una función es que no es necesario saber cual fue el resultado de la operación, simplemente necesitamos saber que se ejecutaron los pasos.

MUY IMPORTANTE
C y C++ no contienen palabras reservadas para diferenciar a un procedimiento de una función, a diferenca de otros lenguajes como pascal o basic, en nuestro casó sabremos si es función o no si el código devuelve un valor.

Veamos un pequeño ejemplo


#include <stdio.h>

//DECLARAMOS LAS FUNCIONES
void soy_procedimiento();
int soy_funcion();

int main (){
  int a;
  printf(ESTE MENSAJE SALE DE LA FUNCION main \n);
  soy_procedimiento(); //Aqui se manda a llamar a la función
  a = soy_funcion();
  if (a == 1)
    printf(La funcion devolvio: 1);
  return 0;
}

void soy_procedimiento(){
  printf(ESTE MENSAJE SE ENTREGA DESDE UN PROCEDIMIENTO\n);
  //Una funcion de tipo void no requiere return...
}

int soy_funcion(){
  printf(MENSAJE ENTREGADO EXITOSAMENTE DESDE UNA FUNCION\n);
  return 1;
  //Si una funcion no es de tipo void necesita una instruccion return que devuelva un valor del tipo especificado, en este caso un entero.
}



Finalmente notemos algunas cosas:
1. La declaración de una función debe ir en el area de declaraciones.
2. El desarrollo de la función puede ir inmediatamente despues de su declaración o despues del main sin importar el orden.
3. las funciones se declaran fuera del bloque principal del programa.

Aun debemos aclarar algunos aspectos como PARAMETROS DE UNA FUNCIÓN (Por valor o por referencia), Alcance de variables (Globales o locales), Polimorfismo (sólo en C++), Recursividad y otras yerbas ;)....

Saludos...
#apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||  
*  /\---/\
    ~~   ~~  
...."Have you mooed today?"...
[img]http://lacasadetux.files.wordpress.com/2008/05/debianuser7.png[/img]
Software Libre para una Sociedad Libre


cazador.asesino

#11

[center]ESCUELA DE C/C++ - 06

[/center]

PROCEDIMIENTOS Y FUNCIONES

Algunos conceptos importantes:

Funciones: Son subprogramas que retornan un valor, por ejemplo: Una función que calcule la suma de dos números y nos devuelva un entero.

Procedimientos:
Son subprogramas que realiza una acción sin devolver un tipo de dato específico; por ejemplo: Un procedimiento que ordena un arreglo de vectores o sitúa el cursor en una coordenada determinada.

Recursividad:
Se llama así a la situación en la que una función se llama a si misma una y otra vez, como se verá con ejemplos (Calculo de la sucesión de Fibonacci)

Argumentos: Se llama así a los valores de ingreso de una función.

Valor Semilla:
Valores iniciales es una recursión, por ejemplo en la sucesión de Fibonacci el valor de 1 es el valor semilla. (1, 1, 2, 3, 5...)

Sintaxis:


Tipo_dato nombre_de_función (argumentos);

int main ()
{
...
}
Tipo_dato nombre_de_función (argumentos)
{
 //Función
}


Ejemplo 01: Función que calcula la suma de dos números ingresados:


#include <stdlib.h>
#include <iostream.h>

float suma(float a,float b);

int main()
{
   float num1=3.2,num2=1.5,sum;

   sum=suma(num1,num2); //los argumentos son sum1 y sum2

   cout<<num1<< + <<num2<< = <<sum<<endl;

   system(pause);
   return 0;
}

float suma(float a,float b)
{
   float s;
   s= a+b;
   return s;
}


Ejemplo 02: Uso de un procedimiento para implementar un menú de opciones

// Aplicación que muestra el uso de un menú

#include <iostream.h>
#include <conio.h>

void menu();

int main()
{
   while(1) // El 1 equivale a verdadero (bucle infinito)
   {
       menu(); //Llamada al procedimiento menú
   }
}

void menu()
{
   int op;

   do{
       system(cls); //Limpia la pantalla
       cout<<\n\t\tMenu Principal;
       cout<<\n\t\t==== =========;
       cout<<\n;
       cout<<\n\t 1.- Opcion1;
       cout<<\n\t 2.- Opcion2;
       cout<<\n\n\t 0.- Salir;

       cout<<\n\n\tIngrese su opcion: ;
       cin>>op; //Lectura de la opción

       switch(op)
       {
           case 0:
                   getch();
                   exit(0); //exit finaliza el programa
                   break;
           case 1:
                   system(cls);
                   cout<<\n\tMenu 1<<endl;
                   getch();//Espera la lectura de un carácter
                   break;
           case 2:
                   system(cls);
                   cout<<\n\tMenu 2<<endl;
                   getch(); //Usado para pausar la aplicación
                   break;
           case 3: //En cada case se va colocando los
                   //procedimientos a llamar
                   break;
       }
   }while(op<0||op>3); //pedir opción mientras no esté en el rango
}


Ejemplo 03: Sucesión de Fibonacci de manera Recursiva

#include <iostream.h>
#include <conio.h>

int fibonacci(int n);

int main()
{
   int i;
   //Mostramos los 1ros 10 primeros elementos

   for(i=0;i<10;i++)
   {
       cout<<fibonacci(i)<< ; ;
   }
   getch();
}

int fibonacci(int n)
{
   if(n==0 || n==1)
       return(1);
   else
       return(fibonacci(n-1)+fibonacci(n-2));
}
--->   142857   <---


makubex

BLOQUES DE CÓDIGO

Si bien este tema no va aquí es posible que algunos todavia tengan dudas de como funcionan las llaves, por ejemplo, muchos programan así:
if (a>0){
  cout<<A ES MAYOR QUE CERO;
}

Realmente es correcto pero no es un código de lo más estético. Para que sea elegante basta con:
if (a>0)
  cout<<A ES MAYOR QUE CERO;

Y la diferencia para los que no son observadores es que NO HAY LLAVES. Y entonces para que sirven las llaves?
Bueno las llaves definen donde empieza un bloque de código, y las más comunes son en el bloque principal del programa llamado MAIN
main{ //aqui empieza el bloque....
  //aqui va el cuerpo del programa
}//aqui termina el bloque

Ahora bien: ¿Cuando debe ser usado en otras estructuras?
La mayoría de las estructuras de control ejecutan la siguiente instrucción despues de ellas (solamente una instrucción):
for (x=0; x<5; x++)
  cout<<Se repite 5 veces\n;

Se repite 5 veces
Se repite 5 veces
Se repite 5 veces
Se repite 5 veces
Se repite 5 veces
Si deseamos que se ejecute más de una instrucción necesitamos declarar un bloque de código:
for (x=0; x<3; x++){//INICIA BLOQUE DE CODIGO
  cout<<Se repite 3 veces\n;
  cout<<Esta linea tambien\n;
}//TERMINA BLOQUE DE CODIGO

Se repite 3 veces
esta linea tambien
Se repite 3 veces
esta linea tambien
Se repite 3 veces
esta linea tambien

Si omitieramos las llaves el resultado seria este
for (x=0; x<3; x++) //SIN LLAVES
  cout<<Se repite 3 veces\n;
  cout<<Esta linea tambien\n;

Se repite 3 veces
Se repite 3 veces
Se repite 3 veces
Esta linea tambien

¿Porque razón la ultima linea se imprimió solo una vez? Porque solo la instrucción siguiente al for forma parte del bucle, la seguna ya no queda dentro del bucle y por tanto solo se ejecuta una vez...

Otro ejemplo:
if (edad<18)
  cout<<MENOR DE EDAD;//Solo se ejecuta esta linea
else{// inicio del bloque else
  cout <<Lo siento aun no puedes votar\n;
  cout <<regresa cuando tengas 18;
}// fin del bloque else


Un ejemplo final (estudiar detenidamente):

#include <iostream>
using namespace std;

int main (){
  int a, b;
  a = 1;
  b = 2;

  if (a > 0){
    if (b >0)
      cout<<NO HAY CERO NI NEGATIVOS\n;
  }// Esta llave pertenece a la comparacion a>0
  else
    cout<<A es igual o menor a cero\n;
  cout<<ESTO ESTA FUERA DE TODOS LOS IFs\n;

  return 0;
}


Es un tema bastante interezante pero que muchos dejan pasar por alto y prefieren lo fácil: usar siempre llaves, sin embargo busquemos que nuestro código sea limpio y elegante...

Saludos
#apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||  
*  /\---/\
    ~~   ~~  
...."Have you mooed today?"...
[img]http://lacasadetux.files.wordpress.com/2008/05/debianuser7.png[/img]
Software Libre para una Sociedad Libre


iliil DJMÄSTËR liili

@-@¬ nu entiendo mi mais.. aparte me da weba leer... looool


saludos.. me retiro..

[center][url=http://zona-mix.org][img]http://img203.imageshack.us/img203/8644/linkeame.jpg[/img][/url][br][/center]


cazador.asesino

ESCUELA DE C/C++ - 06b





Paso de parámetros

El proceso de envió y recepción de datos y de resultados mediante variables se denomina  pase de parámetros. El pase de parámetros puede realizar de dos maneras, pase por valor y por referencia:

Por valor: Es la manera de suministrar datos de entrada al subprograma.  Un parámetro actual pasado por valor  contiene el dato de entrada  para el subprograma,  esta variable no puede ser modificada por el subprograma  que copia su valor al parámetro formal correspondiente para poder utilizarlo. Desde el punto físico, en el paso por valor no se proporciona  la variable al programa, sino solamente su contenido, evitando así su modificación.

Ejemplo 01:


/*A pesar de que la variable a es modificada dentro del subprograma, fuera de el permanece igual.*/

#include <iostream.h>  // Uso de cout
#include <stdlib.h>    // Uso de system

void numeromasuno(int a);

int main()
{
    int n=5;
    numeromasuno(n);
    cout<<n;
    system(pause >nul);//Pausa sin mostrar el Texto: Presione una tecla para continuar
}

void numeromasuno(int a)
{
    a=a+1;
}


Ejemplo 02:

#include <iostream.h>  // Uso de cin y cout
#include <stdlib.h>    // Uso de system

int base8(int num); //Función de  conversión a base 8

int main()
{

    int num;
    cout<<Ingrese un número: ;
    cin>>num;
    if(num>=0)
        cout<<base8(num)<< es <<num<< en base 8; //base8() llama a nuestra funcion
    else
        cout<<Numero negativo;
    system(pause >nul);
}

int base8(int n)
{
    int i=1,num8=0;

    do{
      num8=num8 + (n%8)*i;
      i=i*10;
      n=n/8;
    }while(n>0);

    return(num8);
}


Por referencia: Es la manera  de suministrar  datos de salida o de  entrada y salida al subprograma. Un parámetro actual pasado por referencia es una variable del programa o subprograma llamante, que PUEDE CONTENER o NO datos para el subprograma llamado quien debe colocar el resultado en esa variable. Dicha variable queda a disposición del programa llamante una vez concluida la ejecución del subprograma. Desde el punto físico, en el paso por referencia  se proporciona la dirección o referencia de la variable, por  lo que el programa lo utiliza como propia, modificándolo si es necesario para depositar en ella los resultados.

Ejemplo 03:


/* Se observa que el parámetro formal cambia su valor
*/
#include <iostream.h>  // Uso de cout
#include <stdlib.h>    // Uso de system

void numeromasuno(int *a);

int main()
{
    int n=5;
    numeromasuno(&n);
    cout<<n;
    system(pause >nul);//Pausa sin mostrar el Texto: Presione una tecla para continuar
}

void numeromasuno(int *a)
{
    *a=*a+1;
}


Ejemplo 04:

#include <stdio.h>  // Uso de cout
#include <stdlib.h>    // Uso de system

void  Ordenar (int  *x, int *y) ;

int main( )
{
    int Num1, Num2, Num3, Temp;
    scanf(%d %d %d,&Num1,&Num2,&Num3);
   
    Ordenar(&Num1, &Num2);
    printf(\nNum1: %d Num2: %d Num3: %d, Num1, Num2, Num3);
   
    Ordenar(&Num1, &Num3);
    printf(\nNum1: %d Num2: %d Num3: %d, Num1, Num2, Num3);
   
    Ordenar(&Num2, &Num3);
    printf(\nNum1: %d Num2: %d Num3: %d, Num1, Num2, Num3);
   
    system(pause >nul);
}

void  Ordenar (int  *x, int *y)
{
    int Aux;
    if(*x > *y)
    {
        Aux = *x ;
        *x  = *y;
        *y  = Aux;
    }
}


En conclusión: La diferencia entre estos dos tipos de pasos de parámetros radica en que el paso por valor los parámetros formales quedan invariantes al finalizar el subprograma, mientras que el paso por referencia puede modificar estos valores.

Obs: Muy buena la aclaración que hace makubex sobre Bloques de código, yo usaba las llaves siempre, para evitar confusiones a la hora de leer el codigo, ya que en algunos foros, me fallaban las tabulaciones. (A mi parecer, mejor es usar tabulaciones - al igual que en Python-)

Continua: Arreglos unidimensionales, matrices, ...
--->   142857   <---