Lenguaje C

Anuncio
Lenguaje C
Estructuración de Datos: Arreglos Funciones de Entrada y de Salida Segundo Cuatrimestre 2015
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica)
1
FCFMyN - UNSL
Lenguaje “C”
Objetos de Datos Estructurados: ARREGLOS
Un arreglo es un conjunto de posiciones de memoria
consecutivas usados para almacenar datos todos del
mismo tipo.
Elemento
VENTA
120
578
625
1
2
3
1230
99
100
Dimensión = Cantidad total de elementos
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
2
FCFMyN - UNSL
Lenguaje de diseño
VENTA
120
578
625
1
2
3
1230
100
99
Declaración:
VENTA: arreglo[1..100] de real
Lenguaje “C”
Los subíndices siempre comienzan en ‘0’,
por lo que el último elemento se encontrará
en la posición ‘n-1’
VENTA
120
578
625
0
1
2
1230
98
99
Declaración:
float venta[100]
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
3
FCFMyN - UNSL
Formalmente:
<tipo> <nombre del arreglo>[<dimension>]
Ejemplos:
a)
int numeros[3];
float montos[5];
char letras[10];
/* arreglo de 3 enteros */
/* arreglo de 5 flotantes */
/* arreglo de 10 caracteres */
b)
#include <stdio.h>
int main() {
float data[5];
float total;
float average;
data[0]
data[1]
data[2]
data[3]
data[4]
=
=
=
=
=
34.0;
27.0;
45.0;
82.0;
22.0;
total = data[0]+data[1]+data[2]+data[3]+data[4];
average = total / 5.0;
printf(“Total %f Average %f\n”, total, average);
return(0);
}
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
4
FCFMyN - UNSL
c)
int main() {
char palabra[4];
palabra[0]
palabra[1]
palabra[2]
palabra[3]
=
=
=
=
‘c’;
‘a’;
‘s’;
‘a’;
String: secuencia de
caracteres que conforman
un texto.
return(0);
}
Cómo los imprimo?
for (i=0; i <=3; i++) {
printf(“%c”, palabra[i]);
}
printf(“%s”, palabra);
Indica que el texto a
mostrar es un string
(arreglo de caracteres).
Solamente se coloca el
nombre de la estructura
arreglo.
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
5
FCFMyN - UNSL
Inconveniente:
4 no siempre el arreglo de caracteres estará lleno.
int main() {
char palabra[10];
palabra[0]
palabra[1]
palabra[2]
palabra[3]
=
=
=
=
‘c’;
‘a’;
‘s’;
‘a’;
printf(“%s”, palabra);
return(0);
Qué muestra?
- solo “casa”?
- todo el arreglo?
}
Un arreglo de caracteres es mostrado hasta
el final o hasta encontrar un marcador de
finalización (\0).
int main() {
char palabra[10];
palabra[0]
palabra[1]
palabra[2]
palabra[3]
palabra[4]
=
=
=
=
=
‘c’;
‘a’;
‘s’;
‘a’;
‘\0’;
printf(“%s”, palabra);
return(0);
}
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
6
FCFMyN - UNSL
Lenguaje “C” - Ingreso de Información
Función getchar()
El ingreso de información en “C” se realiza de una
manera muy simple: carácter a carácter, a través de una
función denominada getchar.
Sintáxis
getchar()
Retorna el valor ASCII del carácter
(tecla) que se ingresó desde teclado.
Uso
int c;
c = getchar();
Tecla apretada
4 “a”
4 “F”
4 “3”
4 “)”
/* en “c ” se encuentra el
valor ASCII de la tecla
apretada */
Contenido de “c”
97
70
51
41
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
7
Lenguaje “C” - Ingreso de Información
Función getchar()
Ejemplo
#include <stdio.h>
int main() {
int c, i;
FCFMyN - UNSL
stdio.h, que significa "standard inputoutput header" (cabecera estandar E/S),
es la biblioteca estándar del lenguaje C.
El archivo de cabecera contiene las
definiciones de macros, las constantes,
las declaraciones de funciones y la
definición de tipos usados por varias
operaciones estándar de entrada y salida
i = 1;
while (i != 0) {
c = getchar();
if (c >= 97 && c <= 122){
printf(“Es letra minúscula \n”);
}
if (c >= 48 && c <= 57){
printf(“Es dígito numérico \n”);
}
}
return(0);
}
Inconveniente:
4 Como interpretar información consistente de más de un
carácter (strings, números).
Ejemplos:
- La estrella es brillante
- 324
- 127,98
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
8
Lenguaje “C” - Ingreso de Información
FCFMyN - UNSL
Función getchar()
Primer Solución:
t1 - Ingresar los caracteres en un arreglo.
t2 - Procesar el arreglo identificando lo que
se desee.
Hasta cuando se leen caracteres?
4 Se necesita una señal de finalización (delimitador) de
ingreso que le indique al programa cuando finalizar t1 y
comenzar con t2.
Tecla
Return ó Enter
Carácter asociado
´\n´
#include <stdio.h>
int main() {
int c[100], j;
/* Ingreso los caracteres */
j = 1;
c[j] = getchar();
while (c[j] != ´\n´) {
j = j+1;
c[j] = getchar();
}
?
/* Debo procesar el arreglo*/
return(0);
}
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
9
Lenguaje “C” - Ingreso de Información
Función scanf()
Segunda Solución
El lenguaje “C” provee una función que realiza esas dos
tareas por nosotros denominada scanf.
OJO!
Sintáxis
scanf(<formato>, &<n_var1>, &<n_var2>, ...)
Formato de
interpretación a dar a
los caracteres
ingresados. Se respeta
la modalidad usada por
printf.
Nombres de variables
donde se almacenarán
los valores
interpretados desde
teclado.
Ejemplos:
a)
int numero;
scanf(“%d”, &numero);
Formato entero a dar
a los caracteres
ingresados.
Variable donde
quedará almacenado
el valor interpretado.
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
10
FCFMyN - UNSL
Lenguaje “C” - Ingreso de Información
Función scanf()
b)
#include <stdio.h>
int main() {
float data[5];
float total, average;
int i;
for (i =0; i <=4; i++) {
scanf(“%f”, &data[i]);
}
total = data[0]+data[1]+data[2]+data[3]+data[4];
average = total / 5.0;
printf(“Total %f Average %f\n”, total, average);
return(0);
}
Observación:
4 ¿Como se ingresan secuencias de caracteres (strings)
mediante el uso de scanf ?.
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
11
FCFMyN - UNSL
Lenguaje “C” - Ingreso de Información
Función scanf()
Primer intento:
#include <stdio.h>
int main() {
char letras[5];
int i;
printf(“Ingrese el texto: ”);
for (i =0; i <=4; i++) {
scanf(“%c”, &letras[i]);
}
printf(“\nLo ingresado fue: ”);
for (i =0; i <=4; i++) {
printf(“%c”, letras[i]);
}
return(0);
}
Ingrese el texto: monos
Lo ingresado fue: monos
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
12
FCFMyN - UNSL
Lenguaje “C” - Ingreso de Información Función scanf()
Segundo intento:
#include <stdio.h>
int main() {
char letras[5];
int i;
printf(“Ingrese el texto: ”);
scanf(“%s”, letras);
printf(“\nLo ingresado fue: ”);
printf(“%s”, letras);
return(0);
}
Sólo se coloca el nombre del arreglo. No
se coloca el símbolo & (ampersand)
Pregunta:
4 Que sucedió con el caracter correspondiente al Return que
se apretó como finalización de la secuencia?
Respuesta:
4 Quedó pendiente de ser almacenado en alguna variable.
Por lo tanto será almacenado la próxima vez que se ejecute
scanf.
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
13
FCFMyN - UNSL
Lenguaje “C” - Ingreso de Información Función scanf()
Solución:
Para solucionar este y otros casos se adopta la siguiente
convención:
Colocar siempre luego de la sentencia scanf, la
sentencia getchar().
Ejemplos:
a)
#include <stdio.h>
int main() {
char letras[5];
int i;
printf(“Ingrese el texto: ”);
scanf(“%s”, letras);
getchar();
printf(“\nLo ingresado fue: ”);
printf(“%s”, letras);
return(0);
}
Borra el excedente de
caracteres no leídos.
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
14
Lenguaje “C” - Ingreso de Información
FCFMyN - UNSL
Función scanf()
b)
#include <stdio.h>
int main() {
float data[5];
float total, average;
int i;
for (i =0; i <=4; i++) {
scanf(“%f”, &data[i]);
getchar();
}
total = data[0]+data[1]+data[2]+data[3]+data[4];
average = total / 5.0;
printf(“Total %f Average %f\n”, total, average);
return(0);
}
Int. a la Computación-Int. a la Programación-Fund. de la Informática
(TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015
15
Descargar