universidad nacional abierta ya distancia

Anuncio
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Entradas y salidas
En C++ se utilizan los objetos de flujo cin (flujo de entrada estándar) y cout (flujo
de salida estándar) para la entrada y salida de datos, combinados con los
operadores de direccionamiento >> y << que se encargan de direccionan el flujo
de datos desde o hacia el dispositivo referenciado. Para su funcionamiento se
requiere incluir la biblioteca iostream.
#include<iostream>
cin >> se utiliza para almacenar datos, digitados por el usuario, en una variable
previamente definida. Al ejecutarlo se produce una pausa en el programa hasta
que el usuario introduzca un dato por teclado.
Ejemplo:
#include <iostream>
using namespace std;
int main()
{ int x;
cout << “Digite un valor numerico : ”;
cin >> x;
cout <<endl <<”El numero es: ” <<x;
cout <<endl;
return 0;
}





Se ha declarado la variable x de tipo entero
Se muestra un mensaje al usuario indicándole que digite un valor numérico.
El programa realizará una pausa hasta que el usuario digite un valor
El valor digitado por el usuario se almacena en la variable x.
Se imprime un mensaje El numero es: y en seguida se muestra el número
digitado por el usuario (valor almacenado en la variable x)
 Se realiza un salto de línea.
U1
Página 14
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Con un solo cin>>, se pueden leer varios datos, sin embargo es indispensable que
se le indique al usuario que después de cada dato digite enter para que el dato
sea almacenado en la variable respectiva (aunque lo que el compilador verifica es
que se haya digitado un espacio en blanco, o un equivalente como la pulsación de
las teclas de tabulado, espaciado o enter).
Ejemplo:
#include <iostream>
using namespace std;
int main()
{ int numero1,numero2,numero3;
cout << “Digite 3 valores numéricos. Por favor digite espacio o enter después de
cada valor ”;
cin >> numero1>> numero2>> numero3;
cout <<endl <<Los valores almacenados son: “ <<numero1 <<”\t” <<numero2
<<”\t” <<numero3;
cout <<endl;
return 0;
}
 Esta codificación permitirá que el usuario digite 3 datos que se almacenarán
en las variables numero1, numero2 y numero3.
 Después de cada dato digitado se debe pulsar enter, tabulado o espaciado.
 Al imprimir los datos almacenados se ha utilizado la secuencia de escape
“\t” para indicar espacios de tabulación.
Es más recomendable que para cada dato requerido, se le informe al usuario
mediante un mensaje.
cout<< “Digite primer valor : “;
cin>> numero1;
cout<< endl <<“Digite segundo valor : “;
cin>> numero2;
U1
Página 15
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
cout<< endl <<“Digite tercer valor : “;
cin>> numero3;
Para almacenar datos de tipo carácter existen varias posibilidades:
Una de ellas es utilizando cin.get(), cuya sintaxis es: identificador = cin.get();
Ejemplo:
#include <iostream>
using namespace std;
int main()
{ char caracter1;
cout << "Digite una letra: ";
caracter1=cin.get();
cout <<endl<<"La letra digitada es: "<<caracter1;
return 0;
}
Analice la siguiente codificación donde se almacenan 2 caracteres:
#include <iostream>
using namespace std;
int main()
{ char caracter1,caracter2;
cout << "Digite la primera letra: ";
caracter1=cin.get();
cout << endl <<"digite la segunda letra: ";
caracter2=cin.get();
cout <<endl<<"las letras son: "<<caracter1<<caracter2;
return 0;
}
U1
Página 16
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Al ejecutarlo se puede observar que el programa, sólo permite al usuario digitar el
primer carácter e imprime resultados. Este error en la ejecución se produce porque
al digitar enter, esto se asume como el segundo carácter, (‘\n’), se almacena en la
variable caracter2 y provoca una lectura incorrecta. Para corregir el problema se
debe realizar una limpieza de buffer después de que se almacena cada variable.
La codificación corregida es:
#include <iostream>
#include <stdio.h> //librería necesaria para fflush(stdin), que se utiliza para realizar
// la limpieza de buffer.
using namespace std;
int main()
{ char caracter1,caracter2;
cout << "Digite la primera letra: ";
caracter1=cin.get();
fflush(stdin); //función que realiza la limpieza de buffer
cout << endl <<"digite la segunda letra: ";
caracter2=cin.get();
cout <<endl<<"las letras son: "<<caracter1<<caracter2;
return 0;
}
Al ejecutarlo, los procesos y resultados son correctos.
U1
Página 17
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Otra alternativa para almacenar datos de tipo carácter, es utilizando cin>>
El ejemplo anterior utilizando cin>> quedaría así:
#include <iostream>
#include <stdio.h> //librería necesaria para fflush(stdin), que se utiliza para realizar
// la limpieza de buffer.
using namespace std;
int main()
{ char caracter1,caracter2;
cout << "Digite la primera letra: ";
cin>>caracter1;
fflush(stdin); //función que realiza la limpieza de buffer
cout << endl <<"digite la segunda letra: ";
cin>>caracter2;
cout <<endl<<"las letras son: "<<caracter1<<caracter2;
return 0;
}
En el curso utilizaremos cin>> para almacenar datos de tipo carácter. Recuerde
utilizar fflush(stdin) para la limpieza del buffer.
Almacenamiento de cadenas.
Si lo que va a almacenar es una cadena que no contendrá espacios se puede
utilizar cin >> sin ningún inconveniente
Ejemplo:
#include <iostream>
using namespace std;
int main()
{ char ciudad[20];
U1
Página 18
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
cout << “Digite el nombre de una ciudad ”;
cin >> ciudad;
cout << endl <<”La ciudad es : “ <<ciudad;
cout <<endl;
return 0;
}
Si el usuario digitó Cali, la palabra se almacenará bien, pero si digitó Santa Marta,
únicamente se almacenará Santa. Porque cin>> detiene la entrada cuando se
digita un espacio en blanco.
Para solucionar este inconveniente se utiliza el método getline(), cuya sintaxis es:
cin.getline (arreglo, num)
El primer argumento (arreglo) corresponde al nombre asignado a la cadena y el
segundo (num) indica el número máximo de caracteres que puede contener el
arreglo.
Ejemplo:
#include <iostream>
using namespace std;
int main()
{ char ciudad[20];
U1
Página 19
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
cout << “Digite el nombre de una ciudad ”;
cin.getline(ciudad,20);
cout << endl <<”La ciudad es : “ <<ciudad;
cout <<endl;
return 0;
}
En este caso si el usuario digita como ciudad Santa Marta, las dos palabras se
almacenarán sin problema en la variable ciudad.
cout << imprime en pantalla la información, sea esta una cadena de texto (se
escribe entre comillas dobles) o el valor que contiene una variable. Además se
puede incluir indicadores de formato que indican una tarea específica como saltar
una línea o tabular.
Ejemplo:
#include <iostream>
using namespace std;
int main()
{ int num = 10;
cout << “Programa de Ingenieria”; // imprime una cadena
cout << endl <<endl; // ejecuta 2 saltos de línea
cout << num; // imprime el valor que contiene la variable num
cout << “\n El valor de num es “; // imprime El valor de num es 10. \n es una
// alternativa para indicar un salto de línea. Además del mensaje se
// indica que imprima el valor de la variable num.
return 0;
}
U1
Página 20
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Cuando se requiere presentar en una sola línea mensajes y contenidos de
diferentes variables, se debe tener en cuenta que los mensajes se escriben entre
comillas dobles (“ ”) y los datos se separan con el operador de direccionamiento
<<
Ejemplo: programa que solicita nombre y año de nacimiento, para calcular la edad.
#include <iostream>
using namespace std;
int main()
{ char nombre[20];
int edad, aa;
cout<< "Hola, qu\x82 tal."; // la expresión \x82 se utiliza para imprir
// la letra e con tilde (é)
cout<< endl <<"Por favor digite su nombre: "; // imprime una cadena
cin.getline(nombre,20); // almacena el nombre digitado por el usuario
cout << endl <<endl <<"Digite el a\xa4o de nacimiento: ";
// ejecuta 2 saltos de línea. La expresión a\xa4o se utiliza para imprimir la letra ñ
cin>> aa; //almacena el año digitado por el usuario
edad=2016-aa; //calcula la edad
cout<<endl<<endl<<nombre<<" tiene "<<edad <<" a\xa4os";
// imprime el nombre digitado por el usuario y la edad calculada
cout <<endl<<endl;
return 0;
}
U1
Página 21
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
En la codificación anterior, se puede observar que se utilizaron unas expresiones
especiales para imprimir las letras é y ñ. Esto ocurre porque los lenguajes de
programación C y C++ son americanos y utilizan el idioma inglés, en el cual no se
utilizan tildes, ni sígnos de apertura de exclamación o interrogación (¡¿).
Para solucionar este inconveniente en C++ se deben incluir la expresión \xnn
\ indica a C++ que se va a colocar una expresión de llamado.
x indica hexadecimal
nn es el número en hexadecimal del carácter ASCII que se desea imprimir.
A continuación se comparte la tabla de equivalencias para los caracteres
especiales
Carácter
especial
á
é
í
ó
ú
Á
É
Í
Ó
Ú
ñ
Ñ
¿
U1
Codigo ASCCI en
hexadecimal
xa0
x82
xa1
xa2
xa3
xb5
x90
xd6
xe0
xe9
xa4
xa5
xa8
Expresión a incluir en el
código.
\xa0
\x82
\xa1
\xa2
\xa3
\xb5
\x90
\xd6
\xe0
\xe9
\xa4
\xa5
\xa8
Página 22
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Otra situación bastante común es la necesidad de presentar datos numéricos con
un número fijo de decimales. En C++ se utilizan manipuladores paramétricos y se
trabajan como si se llamará a una función.
Para especificar el número de cifras decimales que se imprimirán en pantalla se
requiere incluir en el programa la librería iomanip (permite trabajar con los
manipuladores paraméticos) y los manipuladores :
fixed representa la notación normal de C++ para coma flotante.
setprecision(valor_entero) índica el número de cifras decimales que se imprimen
Asumiendo que se tiene una variable de tipo float identificada como NOTA, la cual
contiene el valor 3.7899999. Para imprimir el valor únicamente con 2 decimales, la
sentencia sería:
cout<< fixed <<setprecision(2) <<NOTA;
Ejemplo:
Calcular el promedio de los siguientes datos 45.2346, 67.982564, 100.3456790 e
imprimir el resultado con 2 posiciones decimales.
#include <iostream>
#include <iomanip> // biblioteca para utilizar los manipuladores paramétricos
// fixed y setprecision
using namespace std;
int main()
{ float n1=45.2346, n2=67.982564, n3=100.3456790, promedio;
promedio=(n1+n2+n3)/3;
cout<< "Promedio sin indicar cantidad de decimales : " <<promedio <<endl
<<endl;
cout<< "Promedio especificando cantidad de decimales : "<< fixed
<<setprecision(2) <<promedio;
cout <<endl<<endl;
return 0;
}
U1
Página 23
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
Otros formatos de entrada y salida son las funciones printf( ) y scanf( ) aunque
estas son propias de C, también funcionan en C++ y requieren la librería stdio.

U1
printf( ) es una función standar de salida de C, está disponible al incluir stdio.h
tiene 2 partes: nombre de la función y sus argumentos. Ej. printf(“mi edad es
%d\n”, edad).
o Primer argumento: es una cadena de caracteres que puede tener
caracteres y/o secuencias de escape y/o códigos de formato. Las
secuencias de escape inician con \.
Ej. \n secuencia de escape que indica retorno de carro (nueva línea); y los
códigos de formato inician con %. Ej: %d indica que un entero se
visualizará en forma decimal entera.
o Segundo argumento contiene la o las variables que se van a mostrar. Los
argumentos se separan mediante una coma.
o El número de variables debe corresponder al número de indicadores de
formato que se tienen en el primer argumento.
o Ejemplo:
int a = 10, b = 20, c;
printf(“\nEl valor de a es %d”,a); // 1 indicador y 1 variable
printf(“\nEl valor de b es %d”, b); // 1 indicador y 1 variable
c= a + b;
printf(“\n %d + % d = %d”, a,b,c); // 3 indicadores y 3 variables
 Los indicadores de formato son:
%c
caracter
%d int
%ld long int
%f
float
%lf
double
%s
cadena
Un pequeño programa sería el siguente:
#include<stdio.h>
#include<conio.h>
int main()
{ int edad = 20;
Página 24
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION
printf(“Mi nombre es María y tengo %d”,edad);
getch();
return(0);
}

scanf(): la función scanf(), disponible al incluir stdio.h, permite leer datos por
teclado. La función scanf se usa de un modo similar a printf(), su primer
argumento es una cadena con marcas de formato. A éste le siguen una o más
direcciones de memoria. Si desea leer por teclado el valor de una variable
entera a, puede hacerlo así: scanf ("%d", &a);
Observe que la variable cuyo valor se lee por teclado va obligatoriamente
precedida por el operador &: es así como se obtiene la dirección de memoria
en la que se almacena el valor de la variable. Uno de los errores más
comunes es omitir el carácter & que debe preceder a todas las variables
escalares en scanf .
Sintaxis: scanf(“indicador_de_formato”, identificador)
o Los argumentos indican los tipos de datos que se van leer y el nombre
de las variables donde se van a guardar. Ej: scanf(“%d”, &pies).
o A los identificadores les precede el &, salvo cuando se trata de vectores,
como es el caso de las cadenas.
o Para almacenar un carácter utilice cscanf( );
o Ejemplo: int a;
char letra, palabra[10];
printf(“Digite un número : ”);
scanf(“%d ”, &a);
printf(“\n Digite una vocal : ”);
cscanf(“%c”, &letra);
printf(“\n Digite una palabra : ”);
scanf(“%s”, palabra);
En el curso trabajaremos con cin>> y cout<< porque corresponden más al
lenguaje C++
Almacenar datos
Cabe recalcar los datos se pueden también almacenar en las variables mediante
operaciones de asignación, desde la codificación, a esto se le conoce como
asignar valores.
Ejemplos: int a = 30; // declaración de una variable y asignación de valor
float b;
// declaración de una variable
b = 35.45 // asignación de un valor a la variable b
U1
Página 25
Descargar