Abril 21, 2018, 07:32:33 am

Autor Tema: Curso C/C++  (Leído 146866 veces)

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

Desconectado TXS

  • Moderador Global
  • *****
  • Mensajes: 1774
  • Sexo: Masculino
  • Prefiero morir de pie, a vivir arrodillado
    • Ver Perfil
    • Infierno Hacker
[En Revisión] Curso C/C++
« Respuesta #15 en: Marzo 03, 2008, 12:54:24 pm »
You are not allowed to view links. Register or Login
Por: Mycrox



SENTENCIAS.

un nuevo capitulo.

En esta ocasion veremos sentencias, partire por una de las mas basicas.

la sentencia condicional IF

Esta funcion (IF) es muy conocida en casi todos los lenguajes, de hecho, en batch tambien se usa.

Esta sentencia es de condicion, es decir, hara tal cosa siempre y cuando cumpla con una condicion.

Veamos un ejemplo:



Explicacion del codigo:

[1]-Ingreso a la variable numero un "numero" (valga la rebundancia)
[2]-Con la funcion if comparo si es mayor que cero, si esto es verdadero, imprimira "el numero es positivo".
[3]-Luego comparo si es menor que cero, si esto es verdadero, imprimira "el numero es negativo"
[4]-Finalmente comparo el numero si es igual a CERO. si esto es verdadero, se imprimira: "el numero es neutro".

Se entiende la idea?

Ahora, se puede hacer de otra manera mas optima, utilizando su "conjugado" else.

else quiere decir que si no se cumple la condicion del if, hara todo lo que dice el else.

veamos otro ejemplo:



Explicacion del codigo:

[1]-Ingreso nuevamente un numero a la variable numero.
[2]-Comparo, si el numero es mayor que cero, se imprime que es positivo. Si esto es FALSO, hara todo lo que dice el else, en este caso, imprimira que es "negativo o neutro" ya que el CERO no es positivo ni negativo.

Creo que ya se entiende la idea.

IF ELSE ANIDADOS.

que quiere decir anidados?

Facil, que si no se cumple el if, hara el else, pero dentro de ese else, habra otro if y quizas otro else y asi sucesivamente..

veamos un ejemplo:



explicacion del codigo:

[1]-Ingreso nuevamente un numero a la variable numero.
[2]-Comparo, si el numero es mayor que cero se imprime tal cosa, si no es asi, hara todo lo del else, pero dentro de este else hay otro if, este if dice si el numero es menor que cero, se imprime otra cosa, pero si no es asi, hara todo lo que diga el siguiente else...

Cabe decir que para las sentencias no se utilizan los "punto y coma" (;).

se entiende??? cualquier duda porfavor de postear.

ahora, veremos otra sentencia necesaria para el proximo capitulo de vectores y matrices.


SENTENCIA FOR

La sentencia for es una sentencia repetitiva, es decir, hace tales instrucciones hasta que la condicion sea falsa.

sintaxis:
for(valor_inicial; condicion; complemento)

veamos un ejemplo para tener algo mas claro.



Explicacion de la sentencia for.

[1]-Declaro una variable "i" y la inicializo en cero, este es su valor inicial.
[2]-La condicion sera que "i" sea menor que 5.
[3]-El complemento es el i++, esto es igual que decir: i=i+1, esto significa que por cada "vuelta" que haga el for, la variable "i" aumentara en 1 hasta que sea menor que 5.

y quedaria algo asi:



Como podran ver, el mensaje se imprimio 5 veces, ya que se imprime una vez cuando "i" vale 0, luego se aumenta en 1 e "i" vale 1, como es menor que 5 se vuelve a imprimir el mensaje, luego "i" vale 2, como es menor que 5 se vuelve a imprimir el mensaje... asi sucesivamente hasta que i sea menor que 5, que es la condicion de hecho.


Veamos otro ejemplo:



El codigo imprimira la variable "i" hasta que la condicion del for sea FALSA.

quedaria algo asi:




fijense en lo que se imprime. i vale0, i vale 1, i vale 2.... creo que esto lo deja mas claro.

el contador del for, el i++, no necesariamente debe ir en aumento, tambien puede decrecer, veamos un ejemplo donde i va bajando de 1 en 1.



Ahora "i" lo inicializo en 5 y luego le quito 1 hasta que no cumpla la condicion.

se vera asi:



se entiende ahora?

cualquier duda porfavor postearla.

Proximo Capitulo, vectores y matrices.
Por una red libre de información y sin censuras
"Podrán morir las personas, pero jamas sus ideales"

Desconectado TXS

  • Moderador Global
  • *****
  • Mensajes: 1774
  • Sexo: Masculino
  • Prefiero morir de pie, a vivir arrodillado
    • Ver Perfil
    • Infierno Hacker
[En Revisión] Curso C/C++
« Respuesta #16 en: Marzo 03, 2008, 12:57:54 pm »
You are not allowed to view links. Register or Login
Autor: You are not allowed to view links. Register or Login



claro que si esta bien el manual, pero apoco ya el sguiente capitulo son
vectores y matrices? se me hace muy rapido, ademas no se ha visto el switch, que en ocasiones se ocupa.

voy a poner tambien algunos ejemplos con sentencias if else,  while, do while, y switch por si hay dudas, creo que viendo los codigos tambien se aprende.


switch

Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <conio.h>

void main(){
int op;
float lado1,lado2,radio,res;
const float pi=3.1416;

printf("Menu Areas");
printf("\n\n1. Cuadrado \n2. Rectangulo \n3. Triangulo \n4. Circulo");
printf("\n Elige la opcion deseada");
scanf("%d",&op);
switch (op){

case 1:
printf("Dame la medida del lado");
scanf("%f",&lado1);
res=(lado1*lado1);
printf("El resultado es: %f",res);
break;

case 2:
printf("Dame la medida del lado");
scanf("%f",&lado1);
printf("Dame la medida del segundo lado");
scanf("%f",&lado2);
res=(lado1*lado2);
printf("El resultado es: %f",res);
break;

case 3:
printf("Dame la medida del primer lado");
scanf("%f",&lado1);
printf("Dame la medida del segundo lado");
scanf("%f",&lado2);
res=(lado1*lado2)/2;
printf("El resultado es:%f",res);
break;

case 4:
printf("Dame la medida del radio");
scanf("%f",&radio);
res=(radio*radio)*pi;
printf("El resultado es: %f",res);
break;
}
getch();
return;}




Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <conio.h>
void main(){
int op;
float C,F,K,res;

printf("Menu Grados");
printf("\n\n1. Grados Fahrenheit a Centigrados \n2. Grados Centigrados a Fahrenheit \n3. Grados Fahrenheit a Kelvin \n4. Grados Kelvin a Fahrenheit");
printf("\n Elige la opcion deseada");
scanf("%d",&op);
switch (op){
case 1:
printf("Dame Grados Fahrenheit");
scanf("%f",&F);
res=(F-32)/1.8;
printf("Su conversion de Grados Fahrenheit a Centigrados es:  %f",res);
break;
case 2:
printf("Dame Grados Centigrados");
scanf("%f",&C);
res=(C*1.8)+32;
printf("Su conversion de Grados Centigrados a Fahrenheit es: %f",res);
break;
case 3:
printf("Dame Grados Fahrenheit");
scanf("%f",&F);
res=(F+459.67)/1.8;
printf("Su Conversion de Grados Fahrenheit a Kelvin es:  %f",res);
break;
case 4:
printf("Dame Grados Kelvin");
scanf("%f",&K);
res=(K*1.8)-459.67;
printf("Su conversion de Grados Kelvin a Fahrenheit es:  %f",res);
break;

}
getch();
return;}

se declaran las variables y declaro un int op para que esta sea la opcion que se elije, puede ser tambien de tipo char.

la sentencia switch es asi:

switch (expresion){

case 1:
sentencia 1;
break;

case 2:
sentencia 2;
break;
}

1. La sentencia switch permite seleccionar una opcion entre multiples alternativas.

2. La etiqueta case  representa expresiones constantes de valores enteros, aunque tamben pueden ser caracteres estos van seguidos de ":".

3. La sentencia break se utiliza para terminar la ejecucion de bucles o en este caso salir de la sentencia switch y es necesaria en switch para transferir el control  fuera de la misma

tambien se puede usar default:
sentencia N;

4. Etiqueta default
Define las acciones a ejecutar no especificadas por una instrucción case dentro de una estructura
condicional switch.

if else

Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <conio.h>

void main(){
float calif1,calif2,res;
printf("Dame tu primer calificacion");
scanf(" %f",&calif1);
printf("Dame tu segunda calificacion");
scanf(" %f",&calif2);
res=(calif1+calif2)/2;
printf("Calificacion  %f   ",res);
if(res>60 && res<=100){
printf ("Aprobado");
}else
if (res<60)
printf ("Reprobado");
else
printf ("Error");
getch();
return;
}

do while

Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <conio.h>

void main(){
int x=0;
/*Imprime pares hasta el numero 100*/
do
{
x=x+2;
printf("%d \n",x);
}while(x<=98);
return;
}


Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main(){
float a,b,c,v,d,t,e,res,c1;
char op;

printf("presione ENTER");
do{
getch();
printf("\nMenu\n\nA)Formula General\nB)Binomio al Cuadrado\nC)Teorema de pitagoras\nD)Velocidad\nE)Salir\n");
printf("Seleccione una Opcion ");
scanf("%c",&op);

switch(op){
case 'A':
printf("Dame el valor de a");
scanf("%f",&a);
printf("Dame el valor de b");
scanf("%f",&b);
printf("Dame el valor de c");
scanf("%f",&c);
e=(b*b)-(4*a*c);
res=((-b)+(sqrt(e)))/2*a;
printf("Su primer resultado es: %f",res);
res=((-b)-(sqrt(e)))/2*a;
printf("Su segundo resultado es: %f",res);
break;
case 'B':
printf("Dame el valor de a");
scanf("%f",&a);
printf("Dame el valor de b");
scanf("%f",&b);
res=(a*a)+(2*a*b)+(b*b);
printf("Su resultado es: %f",res);
break;
case 'C':
printf("Dame el valor de a");
scanf("%f",&a);
printf("Dame el valor de b");
scanf("%f",&b);
c1=(a*a + b*b);
res= sqrt(c1);
printf("Su resultado es: %f",res);
break;
case 'D':
printf("Dame el valor de d");
scanf("%f",&d);
printf("Dame el valor de t");
scanf("%f",&t);
v=d/t;
printf("Su resultado es: %f",v);
break;

}

}while(op!='E');
}



while
Código: You are not allowed to view links. Register or Login
#include<stdio.h>
#include<conio.h>

void main(){
int x,val;
x=1;
val=0;
/*admite 10 numeros mientras sean diferentes de 15*/

while(val!=15&&x<=10){
printf("Dame un numero");
scanf("%d",&val);
x++;
}
getch();
}



esos son algunos ejemplos que tenia por ahi espero les sirvan
saludos!!.


Desconectado TXS

  • Moderador Global
  • *****
  • Mensajes: 1774
  • Sexo: Masculino
  • Prefiero morir de pie, a vivir arrodillado
    • Ver Perfil
    • Infierno Hacker
[En Revisión] Curso C/C++
« Respuesta #17 en: Marzo 03, 2008, 01:01:46 pm »
You are not allowed to view links. Register or Login
Autor: You are not allowed to view links. Register or Login



En este capitulo daremos la funcion enum.
Su funcion, es la de hacer una o varias enumeracions y dar los valores a una variable, como no me explico muy bien, os dejo un codigo.

Código: You are not allowed to view links. Register or Login
#include <stdlib.h>
#include <stdio.h>
enum
{
portal_hacker,
el_hacker,
Inmortal_security,
Infierno_hacker
}fhx;     
int main()
{
printf("¿De que foro quieres hablar?\n");
printf("0- el hacker\n");
printf("1- portalhacker\n");
printf("2- inmortal security\n");
printf("3- infierno hacker\n");
printf("¿De que foro quieres hablar?  ");
scanf("%d", &fhx);
if (fhx==portal_hacker)
{
system("cls");
printf("Uff, no tengo palabras para describirlo");
system("pause>nul");
}
if (fhx==el_hacker)
{
system("cls");
printf("Es la mayor comunidad underground que conozco en español.");
system("pause>nul");
}
if (fhx==Inmortal_security)
{
system("cls");
printf("Bueno pero peueño");
system("pause>nul");
}
if (fhx==Infierno_hacker)
{
system("cls");
printf("Una putada, que cancelasen el host");
system("pause>nul");
}
}



Ahora explico el codigo:

enum, ponemos el enum, para indicar que es una enumeracion.

Abrimos la llave, y ponemos las variable que queramos, cada una separada de la siguiente por una coma, excepto en la ultima, que no lleva nada.
Finalmente cerramos la llave y ponemos el nombre de la variable

Luego ponemos int main(),  y empezamos todo normal, printf, y luego scanf, la sintaxis del comando es   scanf("%d", &x);, puesto que a enum le corresponde    %d.
Aunqure para ver las opcions, debemos ponerlas con printf, si no con enum, es imposible verlas. A menos que esten traducidas, pero eso no lo controlo muy bien, y estoy buscando, proximamente, publicare como traducir.
 


Pero la contestacion tiene que ser con numeros, me explico, con el enum, lo que estamos haciendo es dar una serie de valores a la variable, en este caso es fhx. Esos valores van desde 0, que le corresponderia a portal hacker hasta 3, que seria Infierno hacker.

portal_hacker=0
el_hacker=1
Inmortal_security=2
Infierno_hacke r=3



Por lo tanto el scanf, solo acepta que contestemos con numeros, aunque al estar ligados, en el if podemos poner los nombres a los cuales corresponden los numeros o los numeros en si.








Y como veis en el codigo, esta el nombre pero aun asi reacciona como debe reaccionar.









Pero en un codigo, no solo podemos poner una enumeracion, si no que podemos poner varias, tan solo tenemos que cambiar el nombre de la variable en el enum y en el cin o scanf en la parte que le corresponda, para que no coincidan.

Ahi no acaba el enum, pero lo que queda lo veremos en mas capitulos.

« Última modificación: Marzo 03, 2008, 01:02:32 pm por TxShAcK »

Desconectado TXS

  • Moderador Global
  • *****
  • Mensajes: 1774
  • Sexo: Masculino
  • Prefiero morir de pie, a vivir arrodillado
    • Ver Perfil
    • Infierno Hacker
[En Revisión] Curso C/C++
« Respuesta #18 en: Marzo 03, 2008, 01:07:01 pm »
You are not allowed to view links. Register or Login
Por: TxShack



?, SWITCH, WHILE, DO WHILE

- ?:


Este se trata de un operador, parecido al if y else, pero se utiliza solo para codigos cortos... de una sola linea.

Ahora veremos con un ejemplo como funciona.

Código: You are not allowed to view links. Register or Login
#include <iostream.h>
int main(){
int nota;
cout<<"Que nota sacaste en el examen?"<<endl;
cin>>nota;
cout<<(nota>=6 ? "muy bien\n" : "deves estudiar masd\n");
system ("pause>nul");
return 0;
}



Como vemos, comenzamos preguntando por la nota de un examen, y a continuacion, establezemos la condicion:
Código: You are not allowed to view links. Register or Login
cout<<(nota>=6 ? "muy bien\n" : "deves estudiar masd\n");
De que si la nota es menor de 6 o mayor de 6 diga muy bien, o deves estudiar mas...

El ? siempre actua interpretando la 1ºparte como verdadera y la 2º como falsa, es decir:

Citar
? acción a ejecutar en caso verdadero : acción a ejecutar en caso falso ;


- SWITCH:


Este comando, es bastante sencillo de entender, y simplifica bastante el uso de if/else...

Su sintaxis es siempre:

Citar
switch (opcion a comparar)
{
case a :
case b:
case c:
....
....
....
....
default;
}

Aunque para entender esto mejor, veamos un ejemplo:

Código: You are not allowed to view links. Register or Login
# include <stdio.h>
# include <stdlib.h>
int main()
{
    int opcion;
    printf("elije una opcion:\n\n");
    printf("1\n2\n3\n\n");
    scanf("%i", &opcion);
    {
        switch (opcion)
        {
            case 1: printf("As elejido la 1\n");
            break;
            case 2: printf("seleccionaste el 2\n");
            break;
            case 3: printf("elejiste la 3\n");
            break;
            default : printf("Opcion incorrecta\n");
            break;
        }
    }
    system("pause");
}



Como vemos en el codigo, comenzamos preguntando al usuario que elija una opcion (1, 2 o 3) pero esto no explicaremos... iremos a lo que nos interesa que es la parte del switch.

como vemos, comenzamos tal y como dije antes con:
Código: You are not allowed to view links. Register or Login
switch (opcion)ya que "opcion" es el nombre que le dimos al principio (int opcion;)

Seguidamene, vamos poniendo:
case 1: .....
case 2: .....
case 3: .....
default: .....

los case x son las opciones que depende de lo que haya elejido el usuario, si elijio la opcion 2, pues ara lo indicado en case 2:
Si elijio la opcion 1, pues ara lo indicado en case1:
Y si elije una opcion que no esta incluida en case, como por ejemplo 6, 9... etc, pues ara lo marcado en default:

Tambien podeis ver, una nueva instruccion, que es break; y lo que hace, es saltarse el resto de la estructura.
Para que entiendan mejor esto del break, eliminenlo del codigo, seleccionen la opcion 1, y veran que les imprimira en pantalla todas las opciones, puesto que ejecutara el codigo seguido y sin saltos.

"Lo mejor para entender el capitulo, es ir copiando el codigo y compilandolo, para entenderlo mejor... ;) )


- WHILE:

La palabra while, en ingles significa "mientras"

While, es un bucle, que se ejecuta mientras la condicion sea verdadera, y si es falsa pues deja de ejecutarse.

Por ejemplo, creamos un contador, y le decimos que while (mientras) el contador sea menor que 10, nos imprima el valor del contador...

Seria algo asi:

Código: You are not allowed to view links. Register or Login
# include <stdio.h>
# include <stdlib.h>
int main()
{
    int contador;
 
    contador = 0;
    while (contador < 10)
    {
        printf ("El contador vale: %d\n", contador);
        contador = contador + 1;
    }
    system ("pause");
}



y el resultado tras la compilacion, seria:



Como ven, empezamos el codigo marcando las librerias que vamos a utilizar:
Código: You are not allowed to view links. Register or Login
# include <stdio.h>
# include <stdlib.h>

A continuacion, escribimos la funcion
Código: You are not allowed to view links. Register or Login
int main()
Posteriormente, definimos una variable llamada contador, y la ponemos a 0
Código: You are not allowed to view links. Register or Login
int contador;

contador = 0;

Una vez echo esto, aparece:

Código: You are not allowed to view links. Register or Login
    while (contador < 10)
    {
        printf ("El contador vale: %d\n", contador);
        contador = contador + 1;

aqui lo que hacemos, es indicarle con el while, que mientras el contador sea menor que 10..... nos imprima en pantalla (printf) el texto "el contador vale x" y a continuacion, la variable contador coje un valor mas (+1).

Como vemos, cunado el contador supera el valor 10, la condicion del while ya no se cumple, y el programa se detiene.


-DO WHILE:


Empleamos el do while, cuando necesitamos que se repita el bucle por lo menos una vez.

Lo veremos mejor con un ejemplo:

Código: You are not allowed to view links. Register or Login
# include <stdio.h>
# include <stdlib.h>
int main()
{
    int opcion;
    do
    {
     printf("teclea 1, 2 o 3\n\n");
     scanf("%i", &opcion);
    }
    while ((opcion<1)||(opcion>3));
    printf("numero correcto\n");
    system("pause");
}



Como vemos en este ejemplo, deveremos introducir una de las opciones correctas para que el programa finalize, que en este caso son 1, 2, 3.
Si ponemos 1, 2, o 3 el programa acabara, sino, se repetira la pregunta una y otra vez.

Creo que es sencillo de entender y no requiere mucha explicacion...
Al igual que vimos antes, con el bucle, WHILE, el DO WHILE es muy similar...

Código: You are not allowed to view links. Register or Login
do
{
Acciones a ejecutar;
}
while(condicion a cumplir);




Y hasta aqui explicare por hoy.
Me gustaria haber explicado algo mas relacionado con esto, como el break y continue, goto y for, pero no me a dado tiempo, asi que tal vez en otra ocasion ;)

Un saludo
« Última modificación: Marzo 07, 2008, 02:52:59 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
[En Revisión] Curso C/C++
« Respuesta #19 en: Marzo 05, 2008, 09:35:51 pm »
You are not allowed to view links. Register or Login
Por: Mycrox



Ya hemos visto:

-Descarga e instalacion del compilador DevC++
-Generalidades
-Tipos de datos y variables
-Identificadores
-Palabras reservadas
-Librerias
-Tipos de errores
-Asignaciones
-Imprimir datos en pantalla (printf y cout)
-Leer datos por teclado
-Sentencias: if, else, for, switch, do while, enum, ?



En este capitulo estudiaremos arrays (vectores, matrices)

ARRAYS

Arrays Unidimensionales (VECTORES)

¿Qué es un Array?

Un array podriamos decir que son varias variables pero con el mismo nombre (identificador) y tipo (int, char, float, etc) y tienen un índice por el cual diferenciarse... me explique bien?

¿y porqué unidireccional?

Porque solamente tienen una dimensión. Lo veremos a continuación.

El uso que le daremos será guardar distintos valores para la misma variable.

sintaxis:

tipo identificador[cantidad];


ejemplos:

int horas[30];
char nombre[20];



Explicacion de esto.

El numero que le colocamos a nuestra variable es la cantidad de espacios que la memoria va a reservar para ella. en los ejemplos anteriores, la memoria reservará 30 "espacios" para "horas" y 20 "espacios" para "nombre".

sabiamos que una variable podia tomar un valor cualquiera: x=4, y=3, etc. pero ahora puede tomar muchos mas valores que es el numero que le ponemos nosotros entre corchetes a nuestra variable.

veamos un ejemplo:



y notas[4] ???? lo explicaré pronto.


la ejecución será la siguiente:



les dibujaré como funciona esto internamente:



(pido perdon que puse en el dibujo notas[5[ en vez de notas[4] xD)

Explicación del dibujo:

Ese espacio "/0" significa que allí termina el vector "notas", fijate que tiene 5 espacios reservados en memoria, pero solamente puedes utilizar 4 ya que el último se lo reserva la ram para indicar el termino de la variable.

se entendio?????? cualquier consulta no duden en postear.


Hagamos algo más óptimo aplicando lo aprendido en capitulos anteriores:




su ejecución:





Explicación del código:

-Declaro el array notas[4] con la variable i para los for.
-Dentro del for, imprimo i+1 para que no me imprima "nota 0".
-Hago un scanf para cada nota pero usando de subindice la variable i que va de uno en uno.
-Luego las muestro usando otro for.

Muy difícil???????

OJO OJO.

Sabemos que en el array notas[4] podemos introducir 4 valores distintos, entonces que pasaria si quiero introducir 10 valores?, es decir, agrego un valor al array notas[8] como en el ejemplo 1?

tienes varias opciones, se te puede bloquear el PC ya que estas intentando "escribir" en un espacio de la memoria que no está reservado para notas[8], lo más probable es que ese espacio de memoria sea de un archivo importante del S.O. o de otra aplicación, por ende, se te bloquea el PC.

Si tienes suerte, en ese espacio que "no existe" (notas[8])

sobreescribiras un valor cualquiera de la memoria pero que no está siendo utilizada, si es así, la memoria crearía ese subíndice notas[8] y guardarias un valor allí. ojo y mucho cuidado.

Otro problemilla:

Si no guardo nada en un subindice, que pasa?

si por ejemplo yo guardo en notas[2] un valor, pero en notas[3] no guardo nada pero vuelvo a guardar otro valor en notas[4]??

muy facil, simplemente en notas[3] iría un 0 (cero).

si no entiende no duden en preguntar.


¿Se puede inicializar un array?

Porsupuesto que si, tal como inicializabamos la variable x=5; podemos inicializar un array.

ejemplo:

int ejemplo[5] = {10,25,31,48,56}

los valores van entre llaves y separados por una coma. ahora ejemplo[0] valdrá 10, ejemplo[1] valdrá 25 y así sucesivamente..

----------------------------------------------------------------------------------------

Todo lo que hemos visto son simplemente arrays UNIDIMENSIONALES, es decir, que tienen una sola dimensión y que se le llaman vectores. Las dimensiones son la cantidad de corchetes [] que le asignamos al array.

pueden existir los siguientes arrays:

int puntero[30][15][220]; (array multidimensional)
int ejemplo[20][50];      (array bidimensional)
int hola[81];             (array unidimensional)

a medida que la dimensión es mayor la cosa se va complicando.

entonces:

los arrays unidimensionales son conocidos como vectores y los bidimensionales son conocidos como "matrices" que es lo que veremos ahora.

Arrays Bidimensionales (MATRICES)

Aca la cosa se va complicando...

las matrices para mostrarlas como lo haria enfrente de una pizarra seria algo asi:

      |1 2 3|
      |4 5 6|
      |7 8 9|

eso es una matriz de 3*3.

¿Como? ¿que significa que sea de 3*3???

muy fácil, las matrices tienen filas y tienen columnas.

las filas se cuentan horizontalmente y son la primera dimensión en un array.

las columnas se cuentan verticalmente y son la segunda dimensión en un array.

ejemplo:

"quiero tener en una matriz, las notas de un curso de 5 jovenes, cada uno con 3 notas"


                          nota 1      nota 2      nota 3          
   alumno 1 |   5.8         3.5         4.8    |
   alumno 2 |   4.5         6.2         7.0    |
   alumno 3 |   3.9         5.5         6.2    |
   alumno 4 |   2.6         1.9         4.6    |
   alumno 5 |   6.8         7.0         5.8    |


y sería por ejemplo: int notas[5][3]

5 es el numero de alumnos y 3 el numero de notas.

veamos un ejemplo en foto:
Como se perdió la imagen, imageshack, a veces es así, ponemos un código alternativo

Código: You are not allowed to view links. Register or Login
#include <stdio.h>

int main ( void )
{
//short notas[3][5];
int i,d;
float f;

float notas[3][5] = {
5.8, 3.5, 4.8,
2.5, 6.2, 7.0,
3.9, 5.5, 6.2,
2.6, 1.9, 4.6,
6.8, 7.0, 5.8
};

puts ( "Ejemplo de array bidimensional" );
puts ( "------------------------------" );
puts ( "\ntenemos el siguiente array bidireccional:" );
puts ( "\t\tnota 1\tnota 2\tnota 3" );
for ( i=0; i<5; i++ )
printf ( "Alumno %i\t %.1f\t %.1f\t %.1f\n", i + 1,
notas[0][i], notas[1][i], notas[2][i] );
puts ( "\nAhora vamos a cambiar los valores:" );
for ( i=0; i<5; i++ )
{
for ( d=0; d<3; d++ )
{
printf ( "Ingrese la %d nota del alumno %d: ", d + 1, i + 1 );
scanf ( "%f", &f );
notas [d][i] = f;
}
puts ( "" );
}
puts ( "\nY mostramos la tabla de nuevo con los valores modificados:" );
for ( i=0; i<5; i++ )
printf ( "Alumno %i\t %.1f\t %.1f\t %.1f\n", i + 1,
notas[0][i], notas[1][i], notas[2][i] );
puts ( "Pulsa return para finalizar ..." );
setbuf ( stdin, NULL );
getchar ();
return 0;
}



Explicación del código:

ATENCIÓN como el código no se corresponde, con el original del mensaje, la explicación de a continuación es muy problable que no se ajuste al código

-Declaro la matriz[5][3] indicando que existen 5 filas y 3 columnas (para los alumnos y las notas). Y le doy los valores iniciales.

-Inicializo dos for anidados, es decir:

i se inicializa en 1, luego j se inicializa en 1. j va subiendo de valor hasta ser igual o mayor que 2. Cuando j ya no cumple la condición regresa al for principal y aumenta en 1 el valor de i, ahora i vale 2. j vuelve al valor 0 (cero) y asi sucesivamente.

A estas alturas ya deberian entender los for anidados.

-Dentro de los for, voy llenando la matriz[j], en este caso los valores de i son las filas y los valores de j son las columnas.

-Cuando se llena la matriz salgo, es decir, cuando ninguno de los dos for cumpla su respectiva condición.

su ejecución:




De esta manera, se da pasada la materia de vectores y matrices.

Cualquier consulta, no duden en postear en el post respectivo, es decir

acá en <A href="You are not allowed to view links. Register or Login"> Curso C++ desde CERO</A>

saludos.
« Última modificación: Octubre 18, 2010, 01:28:47 pm por Avoidance25 »
<A HREF="You are not allowed to view links. Register or Login"> Hermano católico.. ¡defiende tu fe!</A>

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
Re: Curso C++ desde 0
« Respuesta #20 en: Marzo 05, 2008, 09:42:34 pm »
Continuando con el curso..

Ya hemos visto:

-Descarga e instalacion del compilador DevC++
-Generalidades
-Tipos de datos y variables
-Identificadores
-Palabras reservadas
-Librerias
-Tipos de errores
-Asignaciones
-Imprimir datos en pantalla (printf y cout)
-Leer datos por teclado
-Sentencias: if, else, for, switch, do while, enum, ?



En este capitulo estudiaremos arrays (vectores, matrices)

ARRAYS

Arrays Unidimensionales (VECTORES)

¿Qué es un Array?

Un array podriamos decir que son varias variables pero con el mismo nombre (identificador) y tipo (int, char, float, etc) y tienen un índice por el cual diferenciarse... me explique bien?

¿y porqué unidireccional?

Porque solamente tienen una dimensión. Lo veremos a continuación.

El uso que le daremos será guardar distintos valores para la misma variable.

sintaxis:

tipo identificador[cantidad];


ejemplos:

int horas[30];
char nombre[20];



Explicacion de esto.

El numero que le colocamos a nuestra variable es la cantidad de espacios que la memoria va a reservar para ella. en los ejemplos anteriores, la memoria reservará 30 "espacios" para "horas" y 20 "espacios" para "nombre".

sabiamos que una variable podia tomar un valor cualquiera: x=4, y=3, etc. pero ahora puede tomar muchos mas valores que es el numero que le ponemos nosotros entre corchetes a nuestra variable.

veamos un ejemplo:



y notas[4] ???? lo explicaré pronto.


la ejecución será la siguiente:



les dibujaré como funciona esto internamente:



(pido perdon que puse en el dibujo notas[5[ en vez de notas[4] xD)

Explicación del dibujo:

Ese espacio "/0" significa que allí termina el vector "notas", fijate que tiene 5 espacios reservados en memoria, pero solamente puedes utilizar 4 ya que el último se lo reserva la ram para indicar el termino de la variable.

se entendio?????? cualquier consulta no duden en postear.


Hagamos algo más óptimo aplicando lo aprendido en capitulos anteriores:




su ejecución:





Explicación del código:

-Declaro el array notas[4] con la variable i para los for.
-Dentro del for, imprimo i+1 para que no me imprima "nota 0".
-Hago un scanf para cada nota pero usando de subindice la variable i que va de uno en uno.
-Luego las muestro usando otro for.

Muy difícil???????

OJO OJO.

Sabemos que en el array notas[4] podemos introducir 4 valores distintos, entonces que pasaria si quiero introducir 10 valores?, es decir, agrego un valor al array notas[8] como en el ejemplo 1?

tienes varias opciones, se te puede bloquear el PC ya que estas intentando "escribir" en un espacio de la memoria que no está reservado para notas[8], lo más probable es que ese espacio de memoria sea de un archivo importante del S.O. o de otra aplicación, por ende, se te bloquea el PC.

Si tienes suerte, en ese espacio que "no existe" (notas[8])

sobreescribiras un valor cualquiera de la memoria pero que no está siendo utilizada, si es así, la memoria crearía ese subíndice notas[8] y guardarias un valor allí. ojo y mucho cuidado.

Otro problemilla:

Si no guardo nada en un subindice, que pasa?

si por ejemplo yo guardo en notas[2] un valor, pero en notas[3] no guardo nada pero vuelvo a guardar otro valor en notas[4]??

muy facil, simplemente en notas[3] iría un 0 (cero).

si no entiende no duden en preguntar.


¿Se puede inicializar un array?

Porsupuesto que si, tal como inicializabamos la variable x=5; podemos inicializar un array.

ejemplo:

int ejemplo[5] = {10,25,31,48,56}

los valores van entre llaves y separados por una coma. ahora ejemplo[0] valdrá 10, ejemplo[1] valdrá 25 y así sucesivamente..

----------------------------------------------------------------------------------------

Todo lo que hemos visto son simplemente arrays UNIDIMENSIONALES, es decir, que tienen una sola dimensión y que se le llaman vectores. Las dimensiones son la cantidad de corchetes [] que le asignamos al array.

pueden existir los siguientes arrays:

int puntero[30][15][220]; (array multidimensional)
int ejemplo[20][50];      (array bidimensional)
int hola[81];             (array unidimensional)

a medida que la dimensión es mayor la cosa se va complicando.

entonces:

los arrays unidimensionales son conocidos como vectores y los bidimensionales son conocidos como "matrices" que es lo que veremos ahora.

Arrays Bidimensionales (MATRICES)

Aca la cosa se va complicando...

las matrices para mostrarlas como lo haria enfrente de una pizarra seria algo asi:

      |1 2 3|
      |4 5 6|
      |7 8 9|

eso es una matriz de 3*3.

¿Como? ¿que significa que sea de 3*3???

muy fácil, las matrices tienen filas y tienen columnas.

las filas se cuentan horizontalmente y son la primera dimensión en un array.

las columnas se cuentan verticalmente y son la segunda dimensión en un array.

ejemplo:

"quiero tener en una matriz, las notas de un curso de 5 jovenes, cada uno con 3 notas"


                           nota 1      nota 2      nota 3           
   alumno 1 |   5.8         3.5         4.8    |
   alumno 2 |   4.5         6.2         7.0    |
   alumno 3 |   3.9         5.5         6.2    |
   alumno 4 |   2.6         1.9         4.6    |
   alumno 5 |   6.8         7.0         5.8    |


y sería por ejemplo: int notas[5][3]

5 es el numero de alumnos y 3 el numero de notas.

veamos un ejemplo en foto:



Explicación del código:

-Declaro la matriz[5][3] indicando que existen 5 filas y 3 columnas (para los alumnos y las notas).

-Inicializo dos for anidados, es decir:

i se inicializa en 1, luego j se inicializa en 1. j va subiendo de valor hasta ser igual o mayor que 2. Cuando j ya no cumple la condición regresa al for principal y aumenta en 1 el valor de i, ahora i vale 2. j vuelve al valor 0 (cero) y asi sucesivamente.

A estas alturas ya deberian entender los for anidados.

-Dentro de los for, voy llenando la matriz[j], en este caso los valores de i son las filas y los valores de j son las columnas.

-Cuando se llena la matriz salgo, es decir, cuando ninguno de los dos for cumpla su respectiva condición.

su ejecución:




De esta manera, se da pasada la materia de vectores y matrices.

Cualquier consulta, no duden en postear en el post respectivo, es decir

acá en <A href="You are not allowed to view links. Register or Login"> Curso C++ desde CERO</A>

saludos.

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
[En Revisión] Curso C/C++
« Respuesta #21 en: Marzo 07, 2008, 02:49:42 pm »
You are not allowed to view links. Register or Login
Por mycrox.


OPERADORES LOGICOS.

bueno, los operadores lógicos son operadores que actúan según una tabla de verdad, los más famosos son el operador AND, OR y NOT.

Los operadores lógicos sirven para hacer discriminaciones para aumentar la precisión de lo que pides además de abrirte las puertas para un sin fin de programas nuevos y más avanzados.

A estos operadores, tu le debes dar ciertos parámetros o valores para que vean si cumplen o no la condición que le planteas... si no entiendes, no te asustes, que esto lo puedes aprender rápido.

los operadores lógicos se escriben de la siguiente manera en el lenguaje C/C++:

AND = &&
OR = ||
NOT = !


Expliquemos esto operador por operador.

OPERADOR AND:

este operador dice que los parametros que le entregues deben ser todos correctos o verdaderos.

Su tabla de verdad es la siguiente:



Como pueden ver, el resultado del operador AND será verdadero siempre y cuando las dos condiciones que le entregues sean verdaderas.

Vemos un ejemplo en C/C++.



Si se fijan bien, el operador AND (&&) se encuentra dentro de un if, y sabemos que la sintaxis del if es : if(condicion). Nuestras operaciones con el AND darán como resultado verdadera o falsa esa condición, en este caso, les damos dos parametros al operador AND que se encuentra encerrado en el circulito rojo. Si las dos condiciones (numero>=10 y numero<=20) se cumplen, dará un valor verdadero, es decir, se cumplirá la condición y entrará a mostrar el mensaje de "Muy bien...."

Si una de las dos condiciones no se cumple, dará un valor falso, que quiere decir que no cumple la condicion y pasará al else.

Si no se entiende, no duden en consultarlo acá: <A HREF="You are not allowed to view links. Register or Login">Curso C/C++ desde CERO</a>


OPERADOR OR:

Este operador funciona de la misma manera que el AND solo que su tabla de verdad es distinta. veamosla:



Si se fijan, solo basta con que una condicion sea verdadera para que de como resultado verdadero.

veamos un ejemplo en C/C++


(Para comparar si son iguales se debe hacer con dos signos = (igual), ya que si lo hacemos con un solo signo estaremos asignando y no comparando.)

El operador OR (||) encerrado en un circulito quiere decir que con que cualquiera de las dos condiciones se cumpla, el resultado sera verdadero.


OPERADOR NOT.

Este operador es muy sencillo, solo cambia lo verdadero a falso y lo falso a verdadero.

veamos su tabla de verdad:



Sencillo no?

Ahora veamos su aplicación con unos de los ejemplos anteriores, si se fijan, invertirá todo sin perder concordancia o sentido:



El operador NOT (!) cambia lo verdadero a falso y lo falso a verdadero de "todo lo que esta dentro de los parentesis negros".

El compilador, lo primero que hace es verificar las condiciones dentro del primer parentesis (los negros), es decir, donde estan las condiciones, si ingresas un 4, no cumplirá ni la condición de numero==5 ni de numero==8 y dará como resultado un FALSO, pero al salir de esos parentesis el operador NOT los transformara a VERDADERO.

Obviamente cambie los mensajes para que se entendiera (los printf).

Eso ha sido todo, tienen que entenderlo muy bien y que no se les olvide!

EDIT: Próximo Capítulo: Funciones y Procedimientos.
« Última modificación: Octubre 18, 2010, 01:20:11 pm por Avoidance25 »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
[En Revisión] Curso C/C++
« Respuesta #22 en: Mayo 02, 2008, 10:54:14 pm »
You are not allowed to view links. Register or Login
Por mycrox.



FUNCIONES Y PROCEDIMIENTOS
OK, por fin un nuevo capitulo, debidos a problemas de tiempo por la universidad ademas de mis negocios :D. Trataré de explicar este nuevo concepto que introduciré en el curso, que será muy útil a la hora de programar "programas" de verdad.

Sabemos ya hacer programas basicos en C, imprimir cosillas en pantalla, realizar operaciones bascias como la suma, resta, etc, etc. Programas sencillos, cierto? :D

ahora, empezaremos con cosillas un poco mas avanzadas, como son las funciones y procedimientos para pasar de inmediato a manejo de strings. :D

¿Cual es la diferencia entre una función y un procedimiento?

La funcion te retorna un valor que puedes utilizar segun los casos, en cambio, el procedimiento solo ejecuta una parte del codigo devolviendo nada.
NOTA: fijense que la funcion main retorna CERO.

¿Qué es entonces una función y un procedimiento?

Procedimiento: Basicamente es "una parte del codigo" que puedes utilizar cuando desees.

Función: También es una parte de código pero que te retorna valores de acuerdo al tipo de función, ya sea int, float, etc.

Procedimientos sin argumentos:

veamos un ejemplo:



Ahora veamos el mismo codigo pero con un procedimiento:



Explicacion del codigo:

-El programa empieza en la funcion MAIN, esto siempre es asi.
-Imprimo un menu.
-Si es la opcion un 1, voy al procedimiento "sumar"
-ejecuto el codigo de la suma y cuando termina regresa a donde se llamó originalmente.
-Vuelve a visualizarse el menu hasta que la opcion sea 2.

¡OJO!:

si se fijan bien, el procedimiento sumar() no tiene ningun return y ademas es void, esto es lo que lo diferencia de una función, el programa solo ejecutó el código y vuelve a donde lo llamaron.

void significa "nada".

Funciones sin argumentos:

ahora veamos el mismo ejemplo pero como una funcion que retorna un valor:



Este ejemplo es bastante sencillo para entender las funciones.

Explicacion del código:

-El programa empieza en la funcion MAIN.
-Imprimo un menu.
-Si es la opcion un 1, voy a la funcion "sumar" y el resultado de esa suma se lo asigno a la variable total.
-regresa a donde se llamó originalmente e imprime la variable total que es el resultado.
-Vuelve a visualizarse el menu hasta que la opcion sea 2.

¡OJO!:
esta vez la función es de tipo INT y no VOID, esto es porque a la funcion yo le doy un valor, en este caso, un numero que es el resultado de la suma. Una funcion tambien puede ser de tipo float, double y lo que quieras de acuerdo a tus necesidades.

tambien puedo retornar operaciones, es decir, puedo poner return a+b, en vez de return resultado.

¿¿¿Ahora se entiende porque se pone un "return 0" en el main y ademas es de tipo int???, esto le dice a la consola de windows que el programa se finalizó correctamente, en cambio si se fijan en la funcion exit(), le entrego el
valor 1, diciendole a la consola que hubo algun error en la ejecucion, cosa que en este caso no sucede, solo que me equivoque :D

Dos maneras de utilizar funciones y procedimientos:

Las funciones o procedimientos los puedes utilizar de la manera que las puse en las fotos, es decir, poner PRIMERO la o las funciones y LUEGO el main.

Otra manera de hacerlo es "DECLARANDO LA FUNCION" antes del main, y luego depues del main recien "DARLE FORMA"

ejemplo:



en la foto se ve que "declaro" la funcion sumar antes del main con un PUNTO Y COMA, y luego abajo del main, recien la CODEO. Esto sirve para indicarle al compilador que existe una funcion mas abajo del main, debido a que el
compilador se va directamente al main sin importarle nada mas :D.

Argumentos.


¿Que son los argumentos?

Basicamente, son los valores que le das a una funcion o procedimiento para que esta trabaje con ellas.

El mismo ejemplo de la suma pero con argumentos:



Si se fijan, al momento de llamar a la funcion sumar, le entrego entre parentesis el valor de a a la variable valor1 y el valor de b a la variable valor 2, la funcion realiza la operacion de la suma y retorna el resultado, este resultado se lo asigno a la variable total.

SIMPLE NO?

/*No olviden declarar la funcion antes del main*/

OTRO EJEMPLO PERO NO EN FOTO PORQUE NO ALCANZA:

Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>

/*Declaracion de procedimientos*/
void sumar(int valor1, int valor2);
void restar(int valor1, int valor2);
void multiplicar(int valor1, int valor2);
void ingresar_valores();

/*Declaracion de variables globales*/
int resultado;
int a, b;

int main()
{
  int total;
  int opcion;
  ingresar_valores();
  while(1)
  {
    system("cls");
    printf("Que deseas hacer?\n");
    printf("\n[1]-Sumar\n");
    printf("[2]-Restar\n");
    printf("[3]-Multiplicar\n");
    printf("[4]-Cambiar los valores\n");
    printf("[5]-Salir\n");
    printf("\nSeleccione: ");
    scanf("%i", &opcion);
    switch(opcion)
    {
      case 1: sumar(a,b);
              break;
      case 2: restar(a,b);
              break;
      case 3: multiplicar(a,b);
              break;
      case 4: ingresar_valores();
              break;
      case 5: exit(0);
    }
    system("pause>nul");
  }
  return 0;
}

void sumar(int valor1, int valor2)
{
  resultado=valor1+valor2;
  printf("El resultado de la suma de %i + %i es de %i\n", a, b, resultado);
}

void restar(int valor1, int valor2)
{
  resultado=valor1-valor2;
  printf("El resultado de la resta de %i - %i es de %i\n", a, b, resultado);
}

void multiplicar(int valor1, int valor2)
{
  resultado=valor1*valor2;
  printf("El resultado de la multiplicacion de %i * %i es de %i\n", a, b,

resultado);
}

void ingresar_valores()
{
  printf("Ingresa el valor de a: ");
  scanf("%i", &a);
  printf("Ingresa el valor de b: ");
  scanf("%i", &b);
}

espero que con esto haya quedado mas claro el tema de las funciones y procedimientos.

Son las 1 A.M. y me muero de sueño, si se me olvidaron cosas que es mu

probable, no duden en consultar acá: <A href="You are not allowed to view links. Register or Login"> CURSO C++ DESDE CERO</A>

saludos.

Proximo capitulo:

STRINGS.
« Última modificación: Octubre 18, 2010, 01:23:44 pm por Avoidance25 »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
Re: Curso C++ desde 0
« Respuesta #23 en: Mayo 02, 2008, 10:58:20 pm »
You are not allowed to view links. Register or Login
Por mycrox.


FUNCIONES Y PROCEDIMIENTOS
OK, por fin un nuevo capitulo, debidos a problemas de tiempo por la universidad ademas de mis negocios :D. Trataré de explicar este nuevo concepto que introduciré en el curso, que será muy útil a la hora de programar "programas" de verdad.

Sabemos ya hacer programas basicos en C, imprimir cosillas en pantalla, realizar operaciones bascias como la suma, resta, etc, etc. Programas sencillos, cierto? :D

ahora, empezaremos con cosillas un poco mas avanzadas, como son las funciones y procedimientos para pasar de inmediato a manejo de strings. :D

¿Cual es la diferencia entre una función y un procedimiento?

La funcion te retorna un valor que puedes utilizar segun los casos, en cambio, el procedimiento solo ejecuta una parte del codigo devolviendo nada.
NOTA: fijense que la funcion main retorna CERO.

¿Qué es entonces una función y un procedimiento?

Procedimiento: Basicamente es "una parte del codigo" que puedes utilizar cuando desees.

Función: También es una parte de código pero que te retorna valores de acuerdo al tipo de función, ya sea int, float, etc.

Procedimientos sin argumentos:

veamos un ejemplo:



Ahora veamos el mismo codigo pero con un procedimiento:



Explicacion del codigo:

-El programa empieza en la funcion MAIN, esto siempre es asi.
-Imprimo un menu.
-Si es la opcion un 1, voy al procedimiento "sumar"
-ejecuto el codigo de la suma y cuando termina regresa a donde se llamó originalmente.
-Vuelve a visualizarse el menu hasta que la opcion sea 2.

¡OJO!:

si se fijan bien, el procedimiento sumar() no tiene ningun return y ademas es void, esto es lo que lo diferencia de una función, el programa solo ejecutó el código y vuelve a donde lo llamaron.

void significa "nada".

Funciones sin argumentos:

ahora veamos el mismo ejemplo pero como una funcion que retorna un valor:



Este ejemplo es bastante sencillo para entender las funciones.

Explicacion del código:

-El programa empieza en la funcion MAIN.
-Imprimo un menu.
-Si es la opcion un 1, voy a la funcion "sumar" y el resultado de esa suma se lo asigno a la variable total.
-regresa a donde se llamó originalmente e imprime la variable total que es el resultado.
-Vuelve a visualizarse el menu hasta que la opcion sea 2.

¡OJO!:
esta vez la función es de tipo INT y no VOID, esto es porque a la funcion yo le doy un valor, en este caso, un numero que es el resultado de la suma. Una funcion tambien puede ser de tipo float, double y lo que quieras de acuerdo a tus necesidades.

tambien puedo retornar operaciones, es decir, puedo poner return a+b, en vez de return resultado.

¿¿¿Ahora se entiende porque se pone un "return 0" en el main y ademas es de tipo int???, esto le dice a la consola de windows que el programa se finalizó correctamente, en cambio si se fijan en la funcion exit(), le entrego el
valor 1, diciendole a la consola que hubo algun error en la ejecucion, cosa que en este caso no sucede, solo que me equivoque :D

Dos maneras de utilizar funciones y procedimientos:

Las funciones o procedimientos los puedes utilizar de la manera que las puse en las fotos, es decir, poner PRIMERO la o las funciones y LUEGO el main.

Otra manera de hacerlo es "DECLARANDO LA FUNCION" antes del main, y luego depues del main recien "DARLE FORMA"

ejemplo:



en la foto se ve que "declaro" la funcion sumar antes del main con un PUNTO Y COMA, y luego abajo del main, recien la CODEO. Esto sirve para indicarle al compilador que existe una funcion mas abajo del main, debido a que el
compilador se va directamente al main sin importarle nada mas :D.

Argumentos.


¿Que son los argumentos?

Basicamente, son los valores que le das a una funcion o procedimiento para que esta trabaje con ellas.

El mismo ejemplo de la suma pero con argumentos:



Si se fijan, al momento de llamar a la funcion sumar, le entrego entre parentesis el valor de a a la variable valor1 y el valor de b a la variable valor 2, la funcion realiza la operacion de la suma y retorna el resultado, este resultado se lo asigno a la variable total.

SIMPLE NO?

/*No olviden declarar la funcion antes del main*/

OTRO EJEMPLO PERO NO EN FOTO PORQUE NO ALCANZA:

Código: You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>

/*Declaracion de procedimientos*/
void sumar(int valor1, int valor2);
void restar(int valor1, int valor2);
void multiplicar(int valor1, int valor2);
void ingresar_valores();

/*Declaracion de variables globales*/
int resultado;
int a, b;

int main()
{
  int total;
  int opcion;
  ingresar_valores();
  while(1)
  {
    system("cls");
    printf("Que deseas hacer?\n");
    printf("\n[1]-Sumar\n");
    printf("[2]-Restar\n");
    printf("[3]-Multiplicar\n");
    printf("[4]-Cambiar los valores\n");
    printf("[5]-Salir\n");
    printf("\nSeleccione: ");
    scanf("%i", &opcion);
    switch(opcion)
    {
      case 1: sumar(a,b);
              break;
      case 2: restar(a,b);
              break;
      case 3: multiplicar(a,b);
              break;
      case 4: ingresar_valores();
              break;
      case 5: exit(0);
    }
    system("pause>nul");
  }
  return 0;
}

void sumar(int valor1, int valor2)
{
  resultado=valor1+valor2;
  printf("El resultado de la suma de %i + %i es de %i\n", a, b, resultado);
}

void restar(int valor1, int valor2)
{
  resultado=valor1-valor2;
  printf("El resultado de la resta de %i - %i es de %i\n", a, b, resultado);
}

void multiplicar(int valor1, int valor2)
{
  resultado=valor1*valor2;
  printf("El resultado de la multiplicacion de %i * %i es de %i\n", a, b,

resultado);
}

void ingresar_valores()
{
  printf("Ingresa el valor de a: ");
  scanf("%i", &a);
  printf("Ingresa el valor de b: ");
  scanf("%i", &b);
}

espero que con esto haya quedado mas claro el tema de las funciones y procedimientos.

Son las 1 A.M. y me muero de sueño, si se me olvidaron cosas que es mu

probable, no duden en consultar acá: <A href="You are not allowed to view links. Register or Login"> CURSO C++ DESDE CERO</A>

saludos.

Proximo capitulo:

STRINGS.
« Última modificación: Mayo 02, 2008, 11:03:29 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
[En Revisión] Curso C/C++
« Respuesta #24 en: Agosto 12, 2008, 12:47:58 pm »
You are not allowed to view links. Register or Login
Por mycrox.


STRINGS

vaya, por fin un nuevo capítulo, pido perdón a los que esperaron tanto tiempo, ahora vamos a la acción  ;D

¿Que son los strings?

Los strings son ... mm... cadenas de caracteres, osea, un vector de caracteres que se guardan en memoria. por ejemplo "mycrox" es una cadena de texto o caracteres. veamos algo más gráfico.



Como podrán visualizar, cada caracter (letra) se guarda en una posicion de memoria. 3FA100 es una posicion de memoria don de se guarda "M", 3FA101 es la siguiente posicion de memoria donde se guarda "Y" y así sucesivamente...

¿Pero que diferencia tiene un vector de caracteres con un vector de numeros?

Bueno, la principal diferencia es en el manejo de los vectores. En un vector de caracteres (strings), tengo funciones específicas tales como strcmp, strcat, strlen, strcpy, etc, etc. donde puedo jugar con mi cadena como yo quiera. el manejo es total, es decir, la cadena "mycrox" se trata como UNA CADENA y no como 6 LETRAS... espero que se entienda.

en cambio, en un vector de numeros, se trata cada numero como tal, simplemente un numero.

por ejemplo:
int vector[7]={6,4,7,8,5,2}
acá el numero 6 no tiene relacion con el numero 4, solo que estan posicionadas continuamente en memoria, nada más.

aunque en los strings, tambien se puede tratar caracter a caracter, se pueden tratar tambien como un todo, es decir, COMO UNA CADENA DE CARACTERES y no como X LETRAS :D

Funciones basicas de strings

Para utilizar manejo de strings, es necesario incluir la libreria "string.h" en el código fuente, esta librería es estandar de C, por lo que en cualquier compilador, funcionará, incluso en LINUX (o UNIX).

Existen muchas funciones, pero esta vez nos centraremos solo en 4, luego ustedes podrán averiguar por las de ustedes las demases.

FUNCION STRCPY

La funcion strcpy, copia una cadena en otra cadena supuestamente vacía, si no lo está, la sobreeescribe.

veamos:



Explicación del código:

- Pido una cadena de texto.
- Muestro en pantalla la cadena ingresada
- Muestro en pantalla la cadena vacia con basura
- copio en la cadena vacia, la cadena ingresada
- Muestro en pantalla la cadena que estaba vacia pero que ahora contiene la cadena anterior.

Veamos la ejecución:



FUNCION STRCAT


esta funcion, concatena dos cadenas, es decir, las UNE o las PEGA.

veamos:



Explicación del código:

- Pido una cadena
- Pido otra cadena
- Las imprimo en pantalla ambas
- Llamo a la funcion STRCAT
- Imprimo la NUEVA cadena concatenada.

Veamos su ejecucion:




FUNCION STRLEN


esta funcion, me retorna la cantidad de caracteres que posee una cadena de caracteres.

veamos el código:




Explicación del código:

- Pido una cadena
- llamo a strlen y guardo su retorno en a.
- imprimo "a" que es la cantidad de caracteres que tiene la cadena.

También, se puede hacer de la siguiente manera, obviando la variable a.



En este caso, se obvia la variable "a" y se imprime directamente.

Veamos la ejecucion:



Sencillo no?

FUNCION STRCMP


esta funcion, compara dos cadenas, si estas SON IGUALES, retorna CERO, si no lo son, retorna cualquier valor distinto de CERO.

Veamos el código:



Explicación del código:

- Pido una cadena
- Pido otra cadena para comparar
- Llamo a la funcion strcmp, como verán, uso el operador NOT, ya que si son iguales, me retorna CERO, y uso el NOT para que me de POSITIVO.
- Si no son iguales, imprimo que no lo son.

Veamos el ejemplo en ejecucion donde las cadenas son iguales:



Veamos otro ejemplo en ejecucion donde las cadenas NO son iguales:



creo que quedo claro strcmp.


Varios

Inicializacion de strings.


Los strings tambien pueden ser inicializados, tal como int a=5;. Esto se hace de la siguiente manera:



Inicializacion de vectores de strings.


Un string, ya es un vector, por lo que un vector de strings seria una matriz.



Formato %s

El formato %s que se da en los scanf y los printf, indica que se trata de strings, osea, un vector de caracteres. por lo que al momento de imprimir, no es necesario imprimir caracter a caracter, ya que se puede imprimir una cadena completa de una sola vez. esto gracias a %s.

lo mismo con scanf, %s, indica que leera hasta encontrar un espacio o enter, y todo lo tecleado se asumirá que forma parte de la cadena.

Siempre char

los strings, son siempre char, por lo que internamente se guardan los valores ASCII de cada caracter, por ejemplo el "A" es el 65 en ASCII (creo), pero al ser CHAR, se imprimira el "A", en cambio si pongo %i, se imprimira el 65.

veamos un ejemplo:



O es lo mismo que:



veamos la ejecucion:






Bueno, cualquier duda, no vacilen en preguntar acá: <A href="You are not allowed to view links. Register or Login"> CURSO C++ DESDE CERO</A>

Saludos, nos vemos.
« Última modificación: Agosto 12, 2008, 12:52:28 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
Re: Curso C++ desde 0
« Respuesta #25 en: Agosto 12, 2008, 12:49:26 pm »
You are not allowed to view links. Register or Login
Por mycrox.


STRINGS

vaya, por fin un nuevo capítulo, pido perdón a los que esperaron tanto tiempo, ahora vamos a la acción  ;D

¿Que son los strings?

Los strings son ... mm... cadenas de caracteres, osea, un vector de caracteres que se guardan en memoria. por ejemplo "mycrox" es una cadena de texto o caracteres. veamos algo más gráfico.



Como podrán visualizar, cada caracter (letra) se guarda en una posicion de memoria. 3FA100 es una posicion de memoria don de se guarda "M", 3FA101 es la siguiente posicion de memoria donde se guarda "Y" y así sucesivamente...

¿Pero que diferencia tiene un vector de caracteres con un vector de numeros?

Bueno, la principal diferencia es en el manejo de los vectores. En un vector de caracteres (strings), tengo funciones específicas tales como strcmp, strcat, strlen, strcpy, etc, etc. donde puedo jugar con mi cadena como yo quiera. el manejo es total, es decir, la cadena "mycrox" se trata como UNA CADENA y no como 6 LETRAS... espero que se entienda.

en cambio, en un vector de numeros, se trata cada numero como tal, simplemente un numero.

por ejemplo:
int vector[7]={6,4,7,8,5,2}
acá el numero 6 no tiene relacion con el numero 4, solo que estan posicionadas continuamente en memoria, nada más.

aunque en los strings, tambien se puede tratar caracter a caracter, se pueden tratar tambien como un todo, es decir, COMO UNA CADENA DE CARACTERES y no como X LETRAS :D

Funciones basicas de strings

Para utilizar manejo de strings, es necesario incluir la libreria "string.h" en el código fuente, esta librería es estandar de C, por lo que en cualquier compilador, funcionará, incluso en LINUX (o UNIX).

Existen muchas funciones, pero esta vez nos centraremos solo en 4, luego ustedes podrán averiguar por las de ustedes las demases.

FUNCION STRCPY

La funcion strcpy, copia una cadena en otra cadena supuestamente vacía, si no lo está, la sobreeescribe.

veamos:



Explicación del código:

- Pido una cadena de texto.
- Muestro en pantalla la cadena ingresada
- Muestro en pantalla la cadena vacia con basura
- copio en la cadena vacia, la cadena ingresada
- Muestro en pantalla la cadena que estaba vacia pero que ahora contiene la cadena anterior.

Veamos la ejecución:



FUNCION STRCAT


esta funcion, concatena dos cadenas, es decir, las UNE o las PEGA.

veamos:



Explicación del código:

- Pido una cadena
- Pido otra cadena
- Las imprimo en pantalla ambas
- Llamo a la funcion STRCAT
- Imprimo la NUEVA cadena concatenada.

Veamos su ejecucion:




FUNCION STRLEN


esta funcion, me retorna la cantidad de caracteres que posee una cadena de caracteres.

veamos el código:




Explicación del código:

- Pido una cadena
- llamo a strlen y guardo su retorno en a.
- imprimo "a" que es la cantidad de caracteres que tiene la cadena.

También, se puede hacer de la siguiente manera, obviando la variable a.



En este caso, se obvia la variable "a" y se imprime directamente.

Veamos la ejecucion:



Sencillo no?

FUNCION STRCMP


esta funcion, compara dos cadenas, si estas SON IGUALES, retorna CERO, si no lo son, retorna cualquier valor distinto de CERO.

Veamos el código:



Explicación del código:

- Pido una cadena
- Pido otra cadena para comparar
- Llamo a la funcion strcmp, como verán, uso el operador NOT, ya que si son iguales, me retorna CERO, y uso el NOT para que me de POSITIVO.
- Si no son iguales, imprimo que no lo son.

Veamos el ejemplo en ejecucion donde las cadenas son iguales:



Veamos otro ejemplo en ejecucion donde las cadenas NO son iguales:



creo que quedo claro strcmp.


Varios

Inicializacion de strings.


Los strings tambien pueden ser inicializados, tal como int a=5;. Esto se hace de la siguiente manera:



Inicializacion de vectores de strings.


Un string, ya es un vector, por lo que un vector de strings seria una matriz.



Formato %s

El formato %s que se da en los scanf y los printf, indica que se trata de strings, osea, un vector de caracteres. por lo que al momento de imprimir, no es necesario imprimir caracter a caracter, ya que se puede imprimir una cadena completa de una sola vez. esto gracias a %s.

lo mismo con scanf, %s, indica que leera hasta encontrar un espacio o enter, y todo lo tecleado se asumirá que forma parte de la cadena.

Siempre char

los strings, son siempre char, por lo que internamente se guardan los valores ASCII de cada caracter, por ejemplo el "A" es el 65 en ASCII (creo), pero al ser CHAR, se imprimira el "A", en cambio si pongo %i, se imprimira el 65.

veamos un ejemplo:



O es lo mismo que:



veamos la ejecucion:






Bueno, cualquier duda, no vacilen en preguntar aca :D

Saludos, nos vemos.
« Última modificación: Agosto 12, 2008, 12:53:01 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
[En Revisión] Curso C/C++
« Respuesta #26 en: Marzo 06, 2009, 10:32:49 pm »
You are not allowed to view links. Register or Login
Por <A HREF="You are not allowed to view links. Register or Login">vVegeta </A>


Argumentos del main (int argc, char *argv[])

Como verán, anteriormente en los programas, el main solo lo poníamos como "int main()", sin argumentos, esto es porque lo ejecutamos desde el DevC++ o lo ejecutamos haciendo dos click en el ejecutable. Pero los programas "deberian" llamarse todos desde la consola (MS-DOS), con lo cual los argumentos del main pasan a tener importancia.

Los argumentos de método main, son aquellos que son recibidos por el método main... Las dos variables que veremos en este capitulo serán:

    * argc
    * argv


argc:

argc, es de tipo entero (int), especificament e mantiene la cantidad de "numeros de argumentos" ingresados, por defecto contiene el numero 1, ya que el nombre del programa o la ruta se toma como el primer argumento que recibe el programa, y cada número representa el INDICE de una matriz (char *argv[]) que veremos a continuación.

veamos un ejemplo de el numero de argumentos:



Como verán, no tengo el code Cheesy, pero argc se trata o manipula como cualquier otra variable de tipo entera. (int).

argv[]:

argv[], es un array o matriz que está basado en el array de los carácteres que contiene el programa, son ingresados al momento de invocar el Programa... entonces podemos decir que argv[], guarda los "nombres" de los argumentos ingresados en el programa...



veamos algo más claro en la siguiente imagen:



en este caso:

-argv[0] es "programa" o dependiendo del compilador te dirá "la ruta del archivo más el nombre del programa".
-argv[1] es "entrada.txt".
-argv[2] es "salida.txt".

no se confundan o se inquieten si ven esta matriz declarada así : char *argv[], ya que se usa un punteros a vectores, lo cual es lo mismo que una matriz, aunque eso sí, una matriz de caracteres. Para poder visualizar por ejemplo argv[0], es necesario poner:

printf("argv[0] es %s \n", argv[0]);

no olviden poner %s, ya que es formato de STRING, que es lo mismo que un vector de caracteres..

bueno, a estas alturas, ya no deberian confundirse con eso.

Gracias a <A HREF="You are not allowed to view links. Register or Login">vVegeta</A> por el aporte.

hasta el próximo capitulo.

NO OLVIDEN DE DEJAR SUS DUDAS O COMENTARIOS ACÁ:
You are not allowed to view links. Register or Login
« Última modificación: Mayo 14, 2009, 05:50:19 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
Re: Curso C++ desde 0
« Respuesta #27 en: Mayo 14, 2009, 05:57:05 pm »
You are not allowed to view links. Register or Login
Por <A HREF="You are not allowed to view links. Register or Login">vVegeta </A>


Argumentos del main (int argc, char *argv[])

Como verán, anteriormente en los programas, el main solo lo poníamos como "int main()", sin argumentos, esto es porque lo ejecutamos desde el DevC++ o lo ejecutamos haciendo dos click en el ejecutable. Pero los programas "deberian" llamarse todos desde la consola (MS-DOS), con lo cual los argumentos del main pasan a tener importancia.

Los argumentos de método main, son aquellos que son recibidos por el método main... Las dos variables que veremos en este capitulo serán:

    * argc
    * argv


argc:

argc, es de tipo entero (int), especificament e mantiene la cantidad de "numeros de argumentos" ingresados, por defecto contiene el numero 1, ya que el nombre del programa o la ruta se toma como el primer argumento que recibe el programa, y cada número representa el INDICE de una matriz (char *argv[]) que veremos a continuación.

veamos un ejemplo de el numero de argumentos:



Como verán, no tengo el code Cheesy, pero argc se trata o manipula como cualquier otra variable de tipo entera. (int).

argv[]:

argv[], es un array o matriz que está basado en el array de los carácteres que contiene el programa, son ingresados al momento de invocar el Programa... entonces podemos decir que argv[], guarda los "nombres" de los argumentos ingresados en el programa...



veamos algo más claro en la siguiente imagen:



en este caso:

-argv[0] es "programa" o dependiendo del compilador te dirá "la ruta del archivo más el nombre del programa".
-argv[1] es "entrada.txt".
-argv[2] es "salida.txt".

no se confundan o se inquieten si ven esta matriz declarada así : char *argv[], ya que se usa un punteros a vectores, lo cual es lo mismo que una matriz, aunque eso sí, una matriz de caracteres. Para poder visualizar por ejemplo argv[0], es necesario poner:

printf("argv[0] es %s \n", argv[0]);

no olviden poner %s, ya que es formato de STRING, que es lo mismo que un vector de caracteres..

bueno, a estas alturas, ya no deberian confundirse con eso.

Gracias a <A HREF="You are not allowed to view links. Register or Login">vVegeta</A> por el aporte.

hasta el próximo capitulo.

NO OLVIDEN DE DEJAR SUS DUDAS O COMENTARIOS EN ESTE MISMO HILO
« Última modificación: Mayo 14, 2009, 05:57:54 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
[En Revisión] Curso C/C++
« Respuesta #28 en: Mayo 19, 2009, 05:29:08 pm »
You are not allowed to view links. Register or Login
Por mycrox


Uso de las flechas del teclado con CONIO

Hola gente de CPH, aquí con un nuevo capítulo.

Esta vez aprenderemos a utilizar las flechitas del teclado para incorporarlas a nuestros programas y así hacerlos más interactivos :P.

Para esto utilizaremos la libreria exclusiva de borland "CONIO". Como estamos trabajando sobre DEVC++ y no sobre BORLAND, tendremos que tener la CONIO emulada para el DEVC++. Las que se encuentran en Internet están muy bien hechas, pero no aceptan justamente las teclas de las flechas del teclado, debido al ASCII extendido (no explicaré sobre esto, hacer You are not allowed to view links. Register or Login para más información).

Es por eso que un compañero de Universidad a modificado esta CONIO para DEVC++ de modo que acepte las flechitas del teclado, por lo que tendrán que bajarse SI O SI esta nueva versión de CONIO para DEVC++. You are not allowed to view links. Register or Login

En este capítulo, utilizaremos las siguientes funciones y las explicaré una por una.

- _setcursortype()
- textbackground()
- textcolor()
- getch()
- clrscr()
- gotoxy()
- normvideo()

_setcursortype(int)

La utilidad de esta función es que cambia el tipo de cursor que tenemos en nuestra ventana. El cursor es el típico guion bajo parpadeante en nuestros programas. El argumento es de tipo entero y especifica que cursor queremos.

Tenemos tres tipos de cursores:

_NORMALCURSOR: Es el cursor que todos conocemos, el guión bajo parpadeante.

_SOLIDCURSOR:
Es el cursor con forma de cuadrado, vean la imagen:




_NOCURSOR: Simplemente desaparece el cursor.

En esta ocasión utilizaremos _NOCURSOR, ya que como es un programa con flechas, no lo necesitaremos.

Veamos como usarlo si es que quedan dudas:



Este resultado ya lo vimos:





textbackground(int) y textcolor(int)

Con estas funciones, cambiamos el color de nuestros textos. Podemos cambiar el fondo del texto y el color de letra.

Los colores son los siguientes:



Fuente: C CON CLASE.NET


Si quieres el color de fondo blanco y letras azules, el código es el siguiente:



Y resultado es este:



Pueden ir jugando con los colores y tener las combinaciones que más les guste!



getch()

Esta función es muy parecida a getchar().

Espera a la pulsación de una tecla y la retorna en su carácter ASCII.

Veamos:



Y la ejecución:



Si se fijan, no muestra en pantalla la tecla que pulsaste. Además, como se habrán dado cuenta, pulsé la tecla “0” (CERO) siendo su valor ASCII “48”.

No es necesario además guardar la tecla  pulsada.

Ahora probemos con ingresar cualquier tecla de flecha:



Si prueban bien, si fijarán que con cualquier flechita me retorna el mismo resultado: 224.

Esto se debe al ASCII extendido. Googleen para mas info.

Lo que sí les diré, es que debido a este famoso “ASCII EXTENDIDO” las teclas de las flechitas (y otras más) tienen por decirlo así.. dos códigos ASCII. El primero “224” indica que es extendido, seguido por el verdadero valor ASCII, que en caso de las flechas son:

- Arriba: 72
- Abajo: 80
- Derecha: 77
- Izquierda: 75

Por lo que tendremos que hacer 2 getch() para tener el verdadero valor de la flechita.

Veamos:





Adivinen cual flecha apreté…

Sí, la derecha!, ya que el CODIGO ASCII me dio 77.

En el código, verán que hay dos getch() seguidos, esto es porque las flechitas tienen DOS códigos ASCII y tengo que guardarlos en variables independientes. Como no me interesa el valor “244”, simplemente reescribo el valor de la variable.


clrscr()

Simplemente limpia la pantalla. Es un equivalente a system(“cls”) y el cursor o puntero lo deja en la primera posición de la pantalla.

No creo que sea necesario dar ejemplos de esta función.


gotoxy(int, int)

No confundir esta función con “goto” (que ni siquiera es función si no una palabra reservada).

Con esto tu puedes moverte libremente através de la pantalla MS-DOS de Windows.

Recibe dos argumentos, la coordenada X y la coordenada y.


Veamos un ejemplo:



Su ejecución :



Si se fijan, me voy moviendo libremente por la pantalla de acuerdo a las coordenadas que doy.


normvideo()

Aquí podemos regresar a los colores originales (blanco sobre negro), aunque el blanco es mas intenso. En el ejemplo  cambiaré los colores con textcolor() y textbackground() y luego vuelvo a poner los colores originales con normvideo()

Veamos para que se entienda lo que quiero decir:





Como podrán apreciar, el color que vuelve a la normalidad es más intenso.
En el programa lo utilizaremos con fines de “resetear” los colores. Ahí lo podrán entender ustedes mismos con el programa en sus manos.



TAREA

Tienen que generar un menú con 4 opciones, y a medida que suben y bajan que la opción vaya cambiando de color.

Además, cuando lleguen al tope de la última opción, si siguen bajando, deberá volver al principio. Lo mismo si llegan al tope de la primera opción, si siguen subiendo deberá seleccionarse la última. Tal como la mayoría de los programas.

Les dejo un screenshot de ayuda:



Publiquenlo You are not allowed to view links. Register or Login

Después de una semana publicaré el mío y compararemos. La idea es que aprendan HACIENDO.

Saludos!
 
« Última modificación: Mayo 19, 2009, 05:31:35 pm por mycrox »

Desconectado mycrox

  • ANSI C Programmer
  • Yo vivo en CPH
  • ***
  • Mensajes: 698
  • Sexo: Masculino
    • Ver Perfil
Re: Curso C++ desde 0
« Respuesta #29 en: Mayo 19, 2009, 05:30:00 pm »
You are not allowed to view links. Register or Login
Por mycrox


Uso de las flechas del teclado con CONIO

Hola gente de CPH, aquí con un nuevo capítulo.

Esta vez aprenderemos a utilizar las flechitas del teclado para incorporarlas a nuestros programas y así hacerlos más interactivos :P.

Para esto utilizaremos la libreria exclusiva de borland "CONIO". Como estamos trabajando sobre DEVC++ y no sobre BORLAND, tendremos que tener la CONIO emulada para el DEVC++. Las que se encuentran en Internet están muy bien hechas, pero no aceptan justamente las teclas de las flechas del teclado, debido al ASCII extendido (no explicaré sobre esto, hacer You are not allowed to view links. Register or Login para más información).

Es por eso que un compañero de Universidad a modificado esta CONIO para DEVC++ de modo que acepte las flechitas del teclado, por lo que tendrán que bajarse SI O SI esta nueva versión de CONIO para DEVC++. You are not allowed to view links. Register or Login

En este capítulo, utilizaremos las siguientes funciones y las explicaré una por una.

- _setcursortype()
- textbackground()
- textcolor()
- getch()
- clrscr()
- gotoxy()
- normvideo()

_setcursortype(int)

La utilidad de esta función es que cambia el tipo de cursor que tenemos en nuestra ventana. El cursor es el típico guion bajo parpadeante en nuestros programas. El argumento es de tipo entero y especifica que cursor queremos.

Tenemos tres tipos de cursores:

_NORMALCURSOR: Es el cursor que todos conocemos, el guión bajo parpadeante.

_SOLIDCURSOR:
Es el cursor con forma de cuadrado, vean la imagen:




_NOCURSOR: Simplemente desaparece el cursor.

En esta ocasión utilizaremos _NOCURSOR, ya que como es un programa con flechas, no lo necesitaremos.

Veamos como usarlo si es que quedan dudas:



Este resultado ya lo vimos:





textbackground(int) y textcolor(int)

Con estas funciones, cambiamos el color de nuestros textos. Podemos cambiar el fondo del texto y el color de letra.

Los colores son los siguientes:



Fuente: C CON CLASE.NET


Si quieres el color de fondo blanco y letras azules, el código es el siguiente:



Y resultado es este:



Pueden ir jugando con los colores y tener las combinaciones que más les guste!



getch()

Esta función es muy parecida a getchar().

Espera a la pulsación de una tecla y la retorna en su carácter ASCII.

Veamos:



Y la ejecución:



Si se fijan, no muestra en pantalla la tecla que pulsaste. Además, como se habrán dado cuenta, pulsé la tecla “0” (CERO) siendo su valor ASCII “48”.

No es necesario además guardar la tecla  pulsada.

Ahora probemos con ingresar cualquier tecla de flecha:



Si prueban bien, si fijarán que con cualquier flechita me retorna el mismo resultado: 224.

Esto se debe al ASCII extendido. Googleen para mas info.

Lo que sí les diré, es que debido a este famoso “ASCII EXTENDIDO” las teclas de las flechitas (y otras más) tienen por decirlo así.. dos códigos ASCII. El primero “224” indica que es extendido, seguido por el verdadero valor ASCII, que en caso de las flechas son:

- Arriba: 72
- Abajo: 80
- Derecha: 77
- Izquierda: 75

Por lo que tendremos que hacer 2 getch() para tener el verdadero valor de la flechita.

Veamos:





Adivinen cual flecha apreté…

Sí, la derecha!, ya que el CODIGO ASCII me dio 77.

En el código, verán que hay dos getch() seguidos, esto es porque las flechitas tienen DOS códigos ASCII y tengo que guardarlos en variables independientes. Como no me interesa el valor “244”, simplemente reescribo el valor de la variable.


clrscr()

Simplemente limpia la pantalla. Es un equivalente a system(“cls”) y el cursor o puntero lo deja en la primera posición de la pantalla.

No creo que sea necesario dar ejemplos de esta función.


gotoxy(int, int)

No confundir esta función con “goto” (que ni siquiera es función si no una palabra reservada).

Con esto tu puedes moverte libremente através de la pantalla MS-DOS de Windows.

Recibe dos argumentos, la coordenada X y la coordenada y.


Veamos un ejemplo:



Su ejecución :



Si se fijan, me voy moviendo libremente por la pantalla de acuerdo a las coordenadas que doy.


normvideo()

Aquí podemos regresar a los colores originales (blanco sobre negro), aunque el blanco es mas intenso. En el ejemplo  cambiaré los colores con textcolor() y textbackground() y luego vuelvo a poner los colores originales con normvideo()

Veamos para que se entienda lo que quiero decir:





Como podrán apreciar, el color que vuelve a la normalidad es más intenso.
En el programa lo utilizaremos con fines de “resetear” los colores. Ahí lo podrán entender ustedes mismos con el programa en sus manos.



TAREA

Tienen que generar un menú con 4 opciones, y a medida que suben y bajan que la opción vaya cambiando de color.

Además, cuando lleguen al tope de la última opción, si siguen bajando, deberá volver al principio. Lo mismo si llegan al tope de la primera opción, si siguen subiendo deberá seleccionarse la última. Tal como la mayoría de los programas.

Les dejo un screenshot de ayuda:




Acá deberán publicar su tarea :D

Vamos anímense!

Saludos!

« Última modificación: Mayo 19, 2009, 05:31:48 pm por mycrox »


smiley
Curso de visual basic 6.0 como el Curso C/C++ desde cero

Iniciado por Paolita747

2 Respuestas
1733 Vistas
Último mensaje Mayo 31, 2008, 01:56:18 am
por Paolita747
xx
Curso de PHP #1 [Soporte eriik + curso basico de php]

Iniciado por eriik

8 Respuestas
2702 Vistas
Último mensaje Abril 03, 2008, 05:12:43 pm
por carlmycol
exclamation
Curso de C

Iniciado por Yawin

8 Respuestas
2185 Vistas
Último mensaje Diciembre 14, 2009, 02:38:04 pm
por jep
xxx
Curso PGP

Iniciado por syncrack

8 Respuestas
3037 Vistas
Último mensaje Agosto 12, 2009, 07:08:23 am
por ---saster---
xx
Curso PHP

Iniciado por DarkWolf

4 Respuestas
2402 Vistas
Último mensaje ſeptiembre 07, 2008, 05:16:16 am
por DarkWolf
xx
Curso

Iniciado por QuEeN PhOeNiX

2 Respuestas
1555 Vistas
Último mensaje Mayo 17, 2006, 03:37:00 pm
por QuEeN PhOeNiX
xx
Curso de PHP

Iniciado por Hacker290

3 Respuestas
1143 Vistas
Último mensaje Diciembre 28, 2011, 11:18:14 pm
por Hacker290
xx
Curso de ASP.NET

Iniciado por Tilmitt

0 Respuestas
1128 Vistas
Último mensaje Junio 22, 2013, 05:00:53 am
por Tilmitt
xx
Curso de C

Iniciado por Dr.SysCrack

3 Respuestas
1921 Vistas
Último mensaje Noviembre 23, 2007, 03:06:26 am
por TXS
thumbup
Curso de ASP.:!!

Iniciado por -SharK_90-

2 Respuestas
3944 Vistas
Último mensaje Agosto 05, 2007, 05:25:35 pm
por loco_crazy