Práctica 9

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
Objetivos
 El alumno conocerá y aplicará el concepto de arreglos unidimensionales y
bidimensionales para resolver problemas de ingeniería en Lenguaje C
Introducción
Un arreglo o array es una colección ordenada de objetos, llamados elementos del arreglo,
todos del mismo tipo, esto es, el arreglo se puede considerar como un conjunto de variables
agrupadas del mismo tipo. Los arreglos unidimensionales se conocen como vectores y los
arreglos bidimensionales como matrices.
Definición
Los arreglos se definen primero indicando el tipo de datos del arreglo, seguido del nombre
del arreglo y la dimensión del arreglo. Por ejemplo, Un arreglo de 10 elementos se declara
de la siguiente forma:
float a[10];
El primer elemento de este arreglo es a[0] y el último a[9]. En C el índice de los arreglos
inicia en cero.
Un arreglo se puede inicializar de la siguiente forma:
float a[3] = {10.1,10.2,10.3};
Si no se indica el tamaño del arreglo, éste será igual al número de elementos que se
indiquen:
float x[] = {1.3, 2.4};
En este caso el tamaño de x será 2.
C no controla si los subíndices están fuera del rango previsto; esto es responsabilidad del
programador. Por ejemplo, si en algún momento el programa debe utilizar x[90], lo usa sin
importar si los resultados son inesperados.
Arrays multidimensionales
Los arreglos multidimensionales, en este caso los bidimensionales se declaran como sigue:
int a[3][3], b[2][3];
En este ejemplo, a es una matriz 3x3, y b una matriz 2x3. Los elementos se almacenan por
filas y columnas. Así, podemos inicializar b de la siguiente forma:
int b[2][3] = { {1,2,3}, {4,5,6} };
En la definición anterior se reserva un espacio de 2x3, esto es, 6 elementos de tipo entero.
1
Elaborado por:
Sabino Miranda Jiménez
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
El primer subíndice varía entre 0 y 1, y el segundo varía entre 0 y 2. Usualmente, de
manera análoga a las matrices, el primer subíndice indica la fila y el segundo indica la
columna.
Los sitios para los elementos de b están contiguos en el orden fila por fila, o sea, b[0][0],
b[0][1], b[0][2], b[1][0], b[1][1], b[1][2].
Inicialización de arreglos
Los arreglos pequeños se pueden inicializar de la siguiente manera:
double x[4] = { 1.1, 1.2, 1.3, 1.4};
Esto es lo mismo que escribir:
double x[4];
x[0]
x[1]
x[2]
x[3]
=
=
=
=
1.1;
1.2;
1.3;
1.4;
Si dentro de los corchetes hay menos valores que el tamaño del arreglo, generalmente C
asigna 0.0 a los faltantes. Por ejemplo:
double x[4] = { 1.1, 1.2};
produce el mismo resultado que
double x[4];
x[0]
x[1]
x[2]
x[3]
=
=
=
=
1.1;
1.2;
0.0;
0.0
En el siguiente ejemplo el usuario captura cinco números los asigna en el arreglo de
enteros califica para su posterior procesamiento, en este caso, después de capturarse el
conjunto de números se imprimen los cuales se toman del arreglo donde se almacenaron.
Ejemplo1.
#include <stdio.h>
#include <conio.h>
int main()
{
int califica[5];
int MAX=5;
int i=0,dato;
do
{
printf("\ncapture un número:");
scanf("%d",&dato);
califica[i]=dato;
2
Elaborado por:
Sabino Miranda Jiménez
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
i++;
}while(i<MAX);
printf("\nLos números capturados:");
for (int j=0;j<MAX;j++)
printf("%d ",califica[j]);
getche();
return 0;
}
En el siguiente ejemplo se imprimen todos los elementos del arreglo num de dos
dimensiones. Para recorrer los elementos de un arreglo bidimensional es necesario dos
estructuras de repetición anidadas. La primera se usa para recorrer los elementos por filas
y el segundo es para recorrer los elementos por columnas, el ciclo más interno controlado
por el índice j, se repite más veces que el ciclo externo controlado por el índice i. Así el
elemento en la posición i=0 y j=1 será el número 3, la i=2 y j=0 hará referencia al
elemento 10. Para hacer referencia al elemento se usa el nombre del arreglo y las
dimensiones correspondientes. num[1][2] hará referencia al elemento 6.
Ejemplo2.
#include <stdio.h>
#include <conio.h>
int main()
{
int num[][4] = {{1 ,3 ,5 ,7 },
{2 ,4 ,6 ,9 },
{10 ,11,12,88}
};
int filas=3,columnas=4;
for (int i=0;i<filas;i++)
{
for (int j=0;j<columnas;j++)
printf("Fila:%d Columna:%d -> %d\n",i,j,num[i][j]);
}
getche();
return 0;
}
Arreglos de caracteres: cadenas
Los arreglos unidimensionales de caracteres, además de su manejo estándar como arreglo,
pueden ser utilizados como cadenas de caracteres, siempre y cuando uno de los elementos
del arreglo indique el fin de la cadena. Esto se hace mediante el carácter especial nulo: „\0‟
Ejemplo3.
#include <stdio.h>
#include <conio.h>
int main()
{
char aviso[30];
3
Elaborado por:
Sabino Miranda Jiménez
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
aviso[0] = 'h';
aviso[1] = 'o';
aviso[2] = 'l';
aviso[3] = 'a';
aviso[4] = ' ';
aviso[5] = 'm';
aviso[6] = 'u';
aviso[7] = 'n';
aviso[8] = 'd';
aviso[9] = 'o';
aviso[10] ='\0';
printf("%s", aviso)
getche();
return 0;
}
En el siguiente ejemplo se captura una línea de caracteres por medio del teclado, se hace
uso de la función gets para capturar una línea de caracteres acepta como parámetro un
arreglo de caracteres en el cual se depositarán los datos que se capturan. En la siguiente
parte del código (ciclo for) se analiza el arreglo donde se capturó la línea de caracteres; esto
extrae la primera subcadena de la línea, es decir, hasta donde encuentra un espacio. Por
ejemplo si tenemos la cadena “hola mundo” se obtendría como subcadena “hola”
Ejemplo4.
#include <stdio.h>
#include <conio.h>
int main()
{
int MAX=100;
char cadena[MAX];
printf("\ncapture una línea de caracteres máximo 100:");
gets(cadena);
printf("\ncadena capturada:%s",cadena);
printf("\nsubcadena extraida: ");
for(int i=0; cadena[i]!='\0' && i<MAX ;i++)
{
if(cadena[i]==' ')
i=MAX;
else
printf("%c",cadena[i]);
}
getche();
return 0;
}
En el siguiente ejemplo, se capturan 5 palabras (compuestas por un conjunto de caracteres)
las cuales se guardan en un arreglo bidimensional para posteriormente imprimirlas en orden
inverso.
4
Elaborado por:
Sabino Miranda Jiménez
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
Ejemplo 5
#include <stdio.h>
#include <conio.h>
int main()
{
int MAX=100;
int TOTAL_PALABRAS=5;
char cadenas[TOTAL_PALABRAS][MAX];
int i=0;
do
{
printf("\ncapture una palabra mámixo 100:");
gets(cadenas[i]);
i++;
} while(i<TOTAL_PALABRAS);
printf("\nPalabras capturadas:\n ");
for(int i=TOTAL_PALABRAS-1; i>=0 ;i--)
{
printf("Palabra %d : %s\n",i+1,cadenas[i]);
}
getche();
return 0;
}
5
Elaborado por:
Sabino Miranda Jiménez
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
EJERCICIOS PROPUESTOS.
Capturar y probar los ejercicios resueltos.
Resolver únicamente tres ejercicios de los siguientes:
Para cada ejercicio realizar:
Tablas de Entradas y Salidas
Algoritmo (Pseudocódigo)
Programa en C
1. Desarrollar programa que calcule el complemento a uno de un número binario
capturado por el usuario, estos números se deben almacenar en un arreglo para su
representación Considere un registro de 8 bits, es decir, cada posición del arreglo
representa un bit.
Por ejemplo:
Número Binario:
{0,0,1,1,1,1,0,1}
Complemento a 1: {1,1,0,0,0,0,1,0}
2. Desarrollar programa que calcule el complemento a dos de un número binario
capturado por el usuario, estos números se deben almacenar en un arreglo para su
representación. Considere un registro de 8 bits, es decir, cada posición del arreglo
representa un bit.
Por ejemplo:
Número Binario: {0,0,1,1,1,1,0,0}
Complemento a 2: {1,1,0,0,0,1,0,0}
3. Desarrollar programa que invierta una cadena de caracteres, la cadena de caracteres
la captura el usuario.
Por ejemplo:
Cadena: Hola mundo
Cadena invertida: odnum aloH
4. Desarrollar programa que imprima la intersección de dos conjuntos de números
definidos estáticamente dentro del programa. Por ejemplo:
Sean A={5,6,7,3,12,67} y B={6,7,9,12,45,34,56}
A∩B={6,7,12}
5. Desarrollar programa que imprima la unión de dos conjuntos de números definidos
estáticamente dentro del programa. Por ejemplo:
Sean A={5,6,7,3,12,67} y B={6,7,9,12,45,34,56}
6
Elaborado por:
Sabino Miranda Jiménez
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 9: ARREGLOS
AUB={5,6,7,3,12,67,9,45,34,56}
6. Desarrollar programa que imprima la diferencia de conjuntos. Sean A y B dos
conjuntos, la diferencia A-B indica los elementos que se encuentra en A pero no en
B. Los conjuntos de números se definen estáticamente dentro del programa. Por
ejemplo:
Sean A={5,6,7,3,12,67} y B={6,7,9,12,45,34,56}
A-B={5,3,67}
7
Elaborado por:
Sabino Miranda Jiménez
Descargar