martes, 25 de noviembre de 2014

ESTRUCTURAS CÍCLICAS EN C++

ESTRUCTURAS CÍCLICAS
Los procesos repetitivos son la base del uso de las computadoras. En estos
procesos se necesita normalmente contar los sucesos, acciones o tareas internas
del ciclo.
Una estructura cíclica o estructura repetitiva es aquella que le permite al
programador repetir un conjunto o bloque de instrucciones un número
determinado de veces mientras una condición dada sea cierta o hasta que una
condición dada sea cierta.
Se debe establecer un mecanismo para terminar las tareas repetitivas. Dicho
mecanismo es un control que se evalúa cada vez que se realiza un ciclo. La
condición que sirve de control puede ser verificada antes o después de ejecutarse
el conjunto de instrucciones o sentencias. En caso de que la verificación o
evaluación resulte verdadera se repite el ciclo o caso de ser falsa lo terminará.
Ciclos con control antes
Las estructuras cíclicas cuyo control esta antes del ciclo, son estructuras que
realizan la evaluación antes de ejecutar el bloque de instrucciones que tiene que
repetir. Dependiendo de la evaluación que se realice se ejecutara o no dicho
conjunto de instrucciones. Es posible que no se realice ni una sola vez ese
conjunto de instrucciones. En el caso del MatLab solo trabaja con estructuras cuyo
control está antes del ciclo (For y While)
Ciclos con control después:
Las estructuras cíclicas cuyo control esta después del ciclo, son estructuras que
realizan la evaluación después de ejecutar el bloque de instrucciones que se desea
repetir. Con este tipo de control se obliga a la ejecución al menos de una vez del
bloque de instrucciones.
El número de ciclos que se realiza puede ser definido previamente o no definido.
Para el caso de que el ciclo sea definido en el número de veces que se repetirá, se
debe trabajar un contador para que lleve la cuenta del número de tareas.
En caso de no tener definido el número de ciclos previamente, se tendrá que
definir muy bien el control a fin de evitar que se quede en un número indefinido
de ciclos y se bloquee la computadora (LOOP)
ALGORITMICA PARA PROGRAMACION Ing. Yamil Armando Cerquera Rojas
UNIVERSIDAD SURCOLOMBIANA 98 de 154
Estructuras cíclicas anidadas:
Una estructura cíclica puede estar anidada dentro de otra estructura cíclica o de
decisión sin problemas. Hay que tener en cuenta que el anidamiento debe ser
total.
Forma general de la estructura cíclica con control antes del ciclo
Forma general de la estructura cíclica con control después del ciclo
INICIO
VAR INICIO
CONTROL
<=
INCREMENTO
TAREA
FIN
>
Inicio
Inicialización de variable que cuenta las veces que se
repetirá las tareas
Control de la variable inicio con el final del numero de
tarea
Inicio
Tarea o tareas a realizar
Incremento de la variable que llevara el ciclo
Fin
FIN
INICIO
VAR INICIO
CONTROL
<=
INCREMENTO
TAREA
FIN
>
Inicio
Inicialización de variable que cuenta las veces que
se repetirá las tareas
Hacer
Tarea o tareas a realizar
Incremento de la variable que llevara el
ciclo
Control de la variable que inicia con el final del
numero de tarea
FIN
ALGORITMICA PARA PROGRAMACION Ing. Yamil Armando Cerquera Rojas
UNIVERSIDAD SURCOLOMBIANA 99 de 154
Estructura cíclica FOR-ENDFOR
El enunciado FOR es una construcción de programación del C que ejecuta un
bloque de uno o más enunciados una determinada cantidad de veces. A veces es
llamado ciclo for, debido a que la ejecución del programa por lo general hace
ciclos por los enunciados mas de una vez.
Si bien este bucle no se incluye en el Seudo código clásico, con ligeras variantes,
es prácticamente adoptado por todos los lenguajes. Por ello, tratamos aquí este
bloque con sus posibles modalidades y su Seudo código, no estándar,
correspondiente.
Un enunciado FOR tiene la siguiente estructura:
for (inicial; condición; incremento)
enunciado
En el caso del MatLab el FOR esta definido así:
for (inicial: incremento: final)
enunciado
end
Si no se define el incremento, el Matlab asume un valor de 1.
inicial, condición e incremento son expresiones del C, y enunciado es un
enunciado simple compuesto del C. Cuando se encuentra un enunciado for
durante la ejecución del programa sucede los siguientes eventos:
1. la expresión inicial es evaluada. Lo inicial es por lo general un enunciado de
asignación que pone una variable a un valor determinado.
2. La expresión de condición es evaluada. La condición es típicamente una
expresión relacional.
3. Si la condición evalúa a falso, el enunciado for termina y la ejecución pasa al
primer enunciado que se encuentra a continuación del for.
4. Si la condición evalúa a cierto se ejecutan los enunciados que se encuentran
dentro del for.
5. La expresión de incremento es evaluada y la evaluación regresa al paso dos.
ALGORITMICA PARA PROGRAMACION Ing. Yamil Armando Cerquera Rojas
UNIVERSIDAD SURCOLOMBIANA 100 de 154
1. Desarrolle un algoritmo que le permita realizar la escritura de los primeros
100 números naturales.
Análisis: Para poder escribir los primeros 100 números primero hay que
generar dichos valores. Una forma de generar los valores es con las estructuras
cíclicas. Hacer una variable que se inicie en 1 que seria el primer valor a escribir y
finalice en 100 que seria el último número necesitado incrementando de uno en
uno dicha variable.
Inicia con I=1
Finaliza con I=100
Incrementa la I en uno o sea I=I+1
Dentro del ciclo se da la orden para escribir el valor de la variable I.
Algoritmo:
Diagrama de flujo Seudo lenguaje
INICIO
TAREA
FIN
i=1
i<=4
i=i+1
/* Programa que escribe los cuatro primeros
números */
#include "conio.h"
#include "stdio.h"
int i;
main()
{ clrscr();
for(i=1; i<=4; i++)
printf("%d ",i);
getch();
}
INICIO
i=1
i : 100
<=
i=i+1
i
FIN
>
Inicio
Asignar a la variable i el valor de 1
Mientras el valor de i sea menor o igual a 100
Haga
Inicie las instrucciones del ciclo
Escriba el valor de i
Incremente el valor de i en uno
Finalice las instrucciones del ciclo
Fin

jueves, 13 de noviembre de 2014

uso del puntero en c++

Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinamicas de datos, tales como listas enlazadas, pilas, colas y árboles. Generalmente las variables contienen valores especificos. Los punteros son variables pero en vez de contener un valor especifico, contienen las direcciones de las variables a las que apuntan. Para obtener o modificar el valor de la variable a la que apuntan se utiliza el operador de indirección. Los punteros, al ser variables deben ser declaradas como punteros antes de ser utilizadas.

Sintaxis
int *ptrID, ID;
ID = 8;
ptrID = &ID; // puntero a ID
ptrID es un puntero a int, mientras que la variable ID es solo una variable del tipo int. Todo puntero debe ser precedido por un asterisco (*) en la declaración.
Se puede declarar más de un puntero en la misma sentencia. En el ejemplo que sigue se ve la declaración de dos punteros a int.
int *ptrY, *ptrX;
Operadores
Existen dos operadores a tener en cuenta cuando trabajamos con punteros. El operador de dirección (&) que devuelve la dirección de memoria de su operando y el operador de indirección (*) que devuelve un alias para el objeto al cual apunta el operando del puntero.
En el siguiente ejemplo vemos como se inicializa una variable X con el valor 15. Luego se crea un puntero a int y por último el puntero pasa a apuntar a la variable X. Esto es, ptrX es un puntero a X.
int X = 15;
int *ptrX;
ptrX = &X;
Punteros y matrices
Las matrices son punteros constantes. Una matriz sin subindice es un puntero al primer elemento de la matriz.
int X[15];
int *ptrX;
ptrX = &X; // ptrX recibe la dirección del primer elemento ( 0 ) de X
Así como también podría escribirse
int X[15];
int *ptrX;
ptrX = &X[0]; // ptrX es igual a la dirección del primer elemento de X
Se pueden utilizar distintos elementos de la matriz teniendo en cuenta la sintaxis de punteros.
int X[15], Y, *ptrX;
ptrX = X;

Y = *( ptrX + 7 );
En este caso puede verse que Y toma el valor del elemento 7 de la matriz X, siendo 7 el desplazamiento dentro de la matriz. El operador de indirección queda fuera del paréntesis porque tiene una prioridad superior a la del operador +. De no existir los paréntesis, se sumaria 7 al elemento X[0]. Teniendo en cuenta que las matrices son punteros constantes, el nombre de la matriz puede tratarse como un puntero:
Y = *( X + 7 );

ARREGLOS EN C++

Ante todo es importante conocer la importancia de los arreglos. Para ello analice el Algoritmo 5 ALUMNOS FOR del capítulo 3 de esta guía didáctica. Recuerde que la característica que define al algoritmo anterior es la utilización de la sentencia FOR y cuyo objetivo es tomar cinco veces por teclado (leer) los nombres, apellidos y presentarlos en pantalla. De esta manera se evita la definición de cinco variables para nombres (n1, n2, n3, …) y cinco variables para los apellidos (a1, a2, a3, …) lo que implica un ahorro de espacio en memoria. Pero, ¿que implicó que solo se defina una variable nom para los nombres y una variable ape para los apellidos?. Pues bien, el problema principal es que los valores anteriores de las variables en cada repetición del FOR serán sobrescritos por los nuevos valores ingresados, en otras palabras, si se desea ingresar una lista de 1000 nombres, con el algoritmo anterior y luego proceder a presentar los 100 primeros nombres resultaría imposible realizarlo mediante el procedimiento anterior, ya que no se ha guardado más que el último valor que se ingreso.
El siguiente algoritmo está modificado para el propósito antes señalado y nuevamente se tiene que definir las 1000 variables para nombres y 1000 más para apellidos con el fin de no perder valores de las variables, lo que volvería a consumir recursos de memoria y en este acaso a tener un programa con muchas líneas de código.
Algoritmo ALUMNOS FOR CON ARREGLOS
Clase Alumnos
1. Método principal
a. Declaraciones
Variables
n1, n2, n3, …n1000:Cadena
a1, a2, a3, …a1000:Cadena
i : Entero
b. Solicitar Nombre y apellido de 1000 alumnos
1. Leer n1, a1
2. Leer n2, a2
3. Leer n3, a3
….
Escuela de Ciencias de la Computación – UTPL
Fundamentos de la Programación
Autores: Ing. Jorge López, Ing. Greyson Alberca
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial -
Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
1000. Leer n1000, a1000
c. Presentar nombre y apellido de 100 alumnos
1. Presentar n1, a1
2. Presentar n2, a2
3. Presentar n3, a3
….
100. Presentar n100, a100
d. Fin Método principal
Fin Clase AlumnosFor
Fin



EJEMPLOS DE ARREGLOS EN C++

#include<conio.h>
#include<stdio.h>
#include<string.h>
main()
{
int n[4];
float sum=0;
for (int i=0; i<=3; i++)
{
printf("ingrese un numero\n");
scanf("%d",&n[i]);
sum=sum+n[i];
}

printf("\nla media es:\t%0.1f",sum/4);
printf("\nlos numeros ingresados son:\t%d %d %d %d",n[0],n[1],n[2],n[3]);
getch();

}
























miércoles, 12 de noviembre de 2014

USO DEL GOTOXY EN C++

EL Gotoxy mueve el cursor a la posición dada en la ventana del texto actual. Si las coordenadas no son valías entonces la función gotoxy se ignora. Un ejemplo de esto es si gotoxy(40,30) cuando (35,25) es la correcta posición del fondo de la ventana. Ningún argumento de gotoxy puede ser el cero. 

y su sintaxis es: 

#include <conio.h> 
void gotoxy(int x , int y); 

Crear la funcion gotoxy(), en dev-c++ ... ejemplo sencillo.

Saliéndome un poco del tema de mis anteriores post, en esta ocasión les voy a enseñar un truco sencillo y fácil de aplicar a nuestros programas de C++. Como podrán haberse dado cuenta, en la mayoría de los compiladores actuales, especialmente los que son de software libre. No existe la función que en el antiguo compilador de BORLAND, llamábamos "gotoxy()", la razón por la cual no existe en la cabecera <Windows.h> la desconozco. Pero en esta ocasión les mostrare como crear desde nuestro compilador Dev- C++ , esa función "gotoxy()".

Pero , ¿Para que sirve gotoxy()? , Bueno sencillamente nos permite manipular la posición en la pantalla de lo que nuestra aplicación envié de salida, pueden ser caracteres, números, etc.
#include <stdio.h>  
 #include <windows.h>  
 void gotoxy(int x,int y){  
      HANDLE hcon;  
      hcon = GetStdHandle(STD_OUTPUT_HANDLE);  
      COORD dwPos;  
      dwPos.X = x;  
      dwPos.Y= y;  
      SetConsoleCursorPosition(hcon,dwPos);  
 }  
 int main(){  
      gotoxy(15,10);  
      printf("*");  
      return 0;  
 }  

ERRORES DE SINTAXIS EN C++

Los errores se han clasi cado en las siguientes
categorías:
Sobre el chero make le y la compilación.
Sobre las directivas de inclusión.
Sobre las clases.
Sobre la sobrecarga de los operadores.
Sobre la memoria.
Sobre las cadenas.
Varios.
Los mensajes de error pueden cambiar de una versión de compilador a otro. Por ejemplo, el siguiente
código contiene dos errores, porque se confunde el manejo de objetos y punteros a objetos:
UnaClase a, *b;
b = &a;
cout << a->propiedad;
cout << b.propiedad;
Si se compila con el compilador g++ 2.95.4 de GNU se obtiene el siguiente mensaje de error:
prueba.cc: In function `int main(...)':
prueba.cc:12: base operand of `->' has non-pointer type `UnaClase'
prueba.cc:13: request for member `propiedad' in `b', which is of non-aggregate
type `UnaClase *'
Si se compila con el compilador bcc32 5.5.1 de Borland se obtiene el siguiente mensaje de error:
Error E2288 prueba.cc 12: Pointer to structure required on left side of -> or ->*
in function main()
Error E2294 prueba.cc 13: Structure required on left side of . or .* in function
main()
1
Como se ha comentado previamente, el formato de los mensajes de error cambia de un compilador a
otro, aunque suelen tener un estructura similar. En general, cada mensaje de error consta de:
El nombre del archivo donde se ha detectado el error.
El número de línea dentro del archivo donde se ha detectado el error.
Un número de referencia de un tipo de error.
Una breve descripción del error.
Por otro lado, el mensaje de error también puede cambiar si previamente han aparecido otros errores
durante el proceso de compilación (pueden aparecer errores donde realmente no hay errores o pueden
desaparecer errores verdaderos). Por ejemplo, el siguiente código.
UnaClase&
UnaClase::operator=(Unaclase& a)
{
...
}
...
produce los siguientes mensajes de error, de los cuales sólo el primero es válido (el resto son falsos errores
inducidos por el primer error):
unaclase.cc:43: `Unaclase' was not declared in this scope
unaclase.cc:43: `a' was not declared in this scope
unaclase.cc:44: declaration of `operator =' as non-function
unaclase.cc:44: invalid declarator
unaclase.cc:44: syntax error before `{'
unaclase.cc:46: ANSI C++ forbids declaration `dim' with no type
unaclase.cc:46: `a' was not declared in this scope
unaclase.cc:47: ANSI C++ forbids declaration `v' with no type
unaclase.cc:47: invalid use of member `UnaClase::dim'
unaclase.cc:48: parse error before `for'
unaclase.cc:48: invalid use of member `UnaClase::dim'
unaclase.cc:48: parse error before `;'
unaclase.cc:48: syntax error before `++'