Você está na página 1de 26

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Captulo #7
Arreglos de Memoria
Un arreglo es una coleccin de variables del mismo tipo que se referencian utilizando un nombre
comn.
Un arreglo de memoria le permite a la computadora recordar valores pasados.

7.1 ARREGLOS DE MEMORIA UNIDIMENSIONALES


El formato general para la declaracin de un arreglo unidimensional es
tipo nombre_variable [tamao]
Aqu tipo declara el tipo de variable del arreglo. El nombre_variable es el nombre de la variable que
es arreglo de memoria. El tamao es la cantidad de elementos que guardar el arreglo. Por ejemplo, el
siguiente arreglo llamado lista podr almacenar 15 elementos enteros.
int Lista[15];
No debe confundirse con la forma de declarar un variable de cadena de caracteres. Por ejemplo:
char nombre[30];
char nombre[15][30];
En el primer caso se declar una variable que es una cadena de caracteres y que puede almacenar
hasta 30 caracteres.
En el segundo caso se declar un arreglo de cadena de caracteres; este arreglo de memoria podr
almacenar hasta quince cadenas con 30 caracteres cada cadena.

Captulo #7

57

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Problema 7.1: Realice un programa que lea e imprima los elementos de una lista de N nmeros. Prog7-1.c.

Funcin main

Funcin leer_elementos

Captulo #7

58

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin imprimir_elementos
/* prog7-1.c */
#include<stdio.h> /* declaracion de funciones */
void Leer_Elementos();
void Imprimir_Elementos();
/* declaracion de variables globales */
int I,N,Lista[100];
main()
{
/* llamar a la funciones */
Leer_Elementos();
Imprimir_Elementos();
} /* fin de la funcion main() */
/* -------------------------------------- */
/* definicion de las funciones */
void Leer_Elementos()
{
system("cls");
printf("Cuantos elementos tiene la lista de numeros? \n");
scanf("%d",&N);
for(I=1;I<=N;I++)
{
clrscr();
printf("Dame el Elemento[%d] \n",I);
scanf("%d",&Lista[I]);
} /* fin del for */
return;
} /* fin de la funcion Leer_Elementos() */
/* -------------------------------------- */
void Imprimir_Elementos()
{
system("cls");
for(I=1;I<=N;I++)
{
printf("Elemento[%d]=%d \n",I,Lista[I]);
} /* fin del for */
printf("\n \n Pulse cualquier tecla para continuar \n");
getche();
return;
} /* fin de la funcion Imprimir_Elementos() */
Captulo #7

59

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Problema7.2: Realice un programa que sume los elementos de una lista de N nmeros. Prog7-2.c.

Funcin main

F
uncin leer_elementos

Captulo #7

60

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin

imprimir_elementos

Funcin sumar_elementos
Captulo #7

61

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

/* prog7-2.c */
#include<stdio.h>
/* declaracion de funciones */
void Leer_Elementos();
void Sumar_Elementos();
void Imprimir_Elementos();
/* declaracion de variables globales */
int I,N,Lista[100],Sumatoria;
main()
{
/* llamar a las funciones */
Leer_Elementos();
Sumar_Elementos();
Imprimir_Elementos();
} /* fin de la funcion main() */
/* -------------------------------------- */
/* defincion de las funciones */
void Leer_Elementos()
{
system("cls");
printf("Cuantos elementos tiene la lista de numeros? \n");
scanf("%d",&N);
for(I=1;I<=N;I++)
{
system("cls");
printf("Dame el Elemento[%d] \n",I);
scanf("%d",&Lista[I]);
} /* fin del for */
return;
} /* fin de la funcion Leer_Elementos() */
/* -------------------------------------- */
void Sumar_Elementos()
{
Sumatoria=0;
for(I=1;I<=N;I++)
{
Sumatoria=Sumatoria+Lista[I];
} /* fin del for */
return;
} /* fin de la funcion Sumar_Elementos() */
/* -------------------------------------- */
void Imprimir_Elementos()
{
system("cls");
for(I=1;I<=N;I++)
{
printf("Elemento[%d]=%d \n",I,Lista[I]);
} /* fin del for */
printf("La sumatoria de los elementos es %d \n",Sumatoria);
printf("\n \n Pulse cualquier tecla para continuar \n");
getche();
return;
} /* fin de la funcion Imprimir_Elementos() */

Captulo #7

62

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Problema 7.3: Realice un programa que determine el elemento mayor de una lista de N nmeros.
Prog7-3.c.

Funcin main

Funcin Leer_Elementos

Captulo #7

63

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin Imprimir_Elementos

Funcin Elemento_mayor
Captulo #7

64

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

/* prog7-3.c */
#include<stdio.h>
/* declaracion de funciones */
void Leer_Elementos();
void Elemento_Mayor();
void Imprimir_Elementos();
/* declaracion de variables globales */
int I,N,Mayor,Lista[100];
main()
{
/* llamar a la funciones */
Leer_Elementos();
Elemento_Mayor();
Imprimir_Elementos();
} /* fin de la funcion main() */
/* -------------------------------------- */
/* definicion de funciones */
void Leer_Elementos()
{
system("cls");
printf("Cuantos elementos tiene la lista de numeros? \n");
scanf("%d",&N);
for(I=1;I<=N;I++)
{
system("cls");
printf("Dame el Elemento[%d] \n",I);
scanf("%d",&Lista[I]);
} /* fin del for */
return;
} /* fin de la funcion Leer_Elementos() */
/* -------------------------------------- */
void Elemento_Mayor()
{
Mayor=Lista[1];
for(I=2;I<=N;I++)
{
if(Lista[I]>Mayor)
{
Mayor=Lista[I];
} /* fin if(Lista[I]>Mayor) */
} /* fin del for */
return;
} /* fin de la funcion Elemento_Mayor() */
/* -------------------------------------- */
void Imprimir_Elementos()
{
system("cls");
for(I=1;I<=N;I++)
{
printf("Elemento[%d]=%d \n",I,Lista[I]);
} /* fin del for */
printf("El elemento mayor de esta lista es; %d \n",Mayor);
printf("\n \n Pulse cualquier tecla para continuar \n");
getche();
return;
} /* fin del funcion Imprimir_Elementos() */

Problema 7.4: Realice un programa que haga la bsqueda secuencial de un nmero en una lista de N
nmeros e imprima si fue encontrado o no. Suponga que ningn elemento se repite en la lista. Prog7-4.c. En
este programa se puede observar que la variable Encontrado se utiliza como una variable de control que
implica que si Encontrado=0 no se encontr el nmero buscado en la lista, pero si Encontrado=1 implica
que el nmero buscado si est en la lista.
Por otro lado, en la funcin Busqueda() se utiliz la sentencia continue que implica que termine el
for() sin terminar su ejecucin.
Captulo #7

65

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin main

Funcin Leer_Elementos
Captulo #7

66

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin imprimir_elementos

Funcin busqueda
Captulo #7

67

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

/* prog7-4.c */
/*#include<stdio.h>
prog7-4.c */
#include<stdio.h>
/* declaracion de funciones */
/*void
declaracion
de funciones */
Leer_Elementos();
void
voidLeer_Elementos();
Busqueda();
void
voidBusqueda();
Imprimir_Elementos();
void Imprimir_Elementos();
/* declaracion de variables globales */
/*int
declaracion
de variables globales */
I,N,Buscado,Encontrado,Lista[100];
int
I,N,Buscado,Encontrado,Lista[100];
char
OPCION[2];
char
OPCION[2];
main()
main()
{
{
/* llamar a las funciones */
/*Leer_Elementos();
llamar a las funciones */
Leer_Elementos();
do{
do{
system("cls");
system("cls");
Busqueda();
Busqueda();
printf("\n \n Deseas hacer otra busqueda en la misma lista de numeros? \n");
printf("\n
\n Deseas
hacer
en olacualquier
misma lista
numeros?
printf("Pulse
la letra
'S' otra
para busqueda
continuar,
otradeletra
para \n");
printf("Pulse la letra 'S' para continuar, o cualquier otra letra para terminar\n
terminar\n");
scanf("
scanf("%[^\n]",OPCION);
%[^\n]",OPCION);
}while(!strcmp(OPCION,"S")
}while(!strcmp(OPCION,"S")||||!strcmp(OPCION,"s"));
!strcmp(OPCION,"s"));
} }/*/*fin
findedelalafuncion
funcionmain()
main()*/*/
/*/*---------------------------------------------------------------------------*/*/
/*/*definicion
definiciondedelas
lasfunciones
funciones*/*/
void
voidLeer_Elementos()
Leer_Elementos()
{{
system("cls");
system("cls");
printf("Cuantos
printf("Cuantoselementos
elementostiene
tienelalalista
listadedenumeros?
numeros?\n");
\n");
scanf("%d",&N);
scanf("%d",&N);
for(I=1;I<=N;I++)
for(I=1;I<=N;I++)
{{
system("cls");
system("cls");
printf("Dame
printf("DameelelElemento[%d]
Elemento[%d]\n",I);
\n",I);
scanf("%d",&Lista[I]);
scanf("%d",&Lista[I]);
} }/*/*fin
findel
delfor
for*/*/
return;
return;
} }/*/*fin
findedelalafuncion
funcionLeer_Elementos()
Leer_Elementos()*/*/

/*/*---------------------------------------------------------------------------*/*/
void
voidBusqueda()
Busqueda()
{{
Encontrado=0;
Encontrado=0;
printf("Dame
printf("Dameelelnumero
numerobuscado:
buscado:\n");
\n");
scanf("%d",&Buscado);
scanf("%d",&Buscado);
for(I=1;I<=N;I++)
for(I=1;I<=N;I++)
{{
if(Buscado==Lista[I])
if(Buscado==Lista[I])
{{
Encontrado=1;
Encontrado=1;
continue;
continue;
} }/*/*fin
findel
delif(Buscado==Lista[I])
if(Buscado==Lista[I])*/*/
} }/*/*fin
findel
delfor
for*/*/
if(Encontrado==1)
if(Encontrado==1)
{{
printf("\n
printf("\n\n\nElElnumero
numeroSISIfue
fueencontrado
encontrado\n");
\n");
}}
else
else
{{
printf("\n
printf("\n\n\nElElnumero
numeroNONOfue
fueencontrado
encontrado\n");
\n");
} }/*/*fin
finif(Encontrado)
if(Encontrado)*/*/
Imprimir_Elementos();
Imprimir_Elementos();/*/*llamada
llamadaa alalafuncion
funcionImprimir_Elementos()
Imprimir_Elementos()*/*/
printf("\n
printf("\n\n\nPulse
Pulsecualquier
cualquiertecla
teclapara
paracontinuar
continuar\n");
\n");
getche();
getche();
return;
return;
} }/*/*fin
findedelalafuncion
funcionBusqueda
Busqueda*/*/
/*/*---------------------------------------------------------------------------*/*/
void
voidImprimir_Elementos()
Imprimir_Elementos()
Captulo #7

68

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

{{
for(I=1;I<=N;I++)
for(I=1;I<=N;I++)
{{
printf("Elemento[%d]=%d\n",I,Lista[I]);
\n",I,Lista[I]);
printf("Elemento[%d]=%d
findel
delfor
for*/*/
} }/*/*fin
return;
return;
findedelalafuncion
funcionImprimir_Elementos()
Imprimir_Elementos()* *
} }/*/*fin

Problema 7.5. Utilice Funciones Definidas por el Usuario sin Parmetros y arreglos de memoria
unidimensionales. Se deja caer una pelota desde una altura de 50 metros, rebota y cada vez su altura es de dos
tercios de su altura en el rebote anterior.
a) Elabore un programa que determine e imprima la altura de la pelota desde el primer rebote
hasta que la altura de la pelota sea igual menor a un centimetro.
b) Determine e imprima en cul nmero del rebote en la altura de la pelota ya es igual o
inferior a cincuenta centmetros.
c) Calcule e imprima la altura promedio de la pelota en todos los rebotes.
d) Calcule e imprima cuantos rebotes le proporcionan a la pelota una altura superior al
promedio.

Funcin main

Captulo #7

69

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin inciso_a

Captulo #7

70

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin inciso_b

Funcin inciso_c
Captulo #7

71

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin inciso_d
prog7-5.c*/*/
/*/*prog7-5.c
Pelotaque
querebota
rebota2/3
2/3partes
partesdedesusualtura
alturaanterior
anterior*/*/
/*/*Pelota
#include<stdio.h>
#include<stdio.h>
declaraciondedefunciones
funciones*/*/
/*/*declaracion
voidinciso_a();
inciso_a();
void
voidinciso_b();
inciso_b();
void
voidinciso_c();
inciso_c();
void
voidinciso_d();
inciso_d();
void
declaraciondedevariables
variablesglobales
globales*/*/
/*/*declaracion
floatALTURA[1000],ALTO,ALT_PROM;
ALTURA[1000],ALTO,ALT_PROM;
float
intI,REBOTE,POSICION,ARRIBA;
I,REBOTE,POSICION,ARRIBA;
int
main()
main()
{{
system("cls");
system("cls");
llamara alas
lasfunciones
funciones*/*/
/*/*llamar
inciso_a();
inciso_a();
while(ALTO>0)
while(ALTO>0)
{{
inciso_b();
inciso_b();
inciso_c();
inciso_c();
inciso_d();
inciso_d();
break;/*/*romper
romperelelciclo
ciclowhile
while*/*/
break;
Captulo #7

72

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

}}/*
/*fin
findel
delwhile
while*/
*/
}} /*
/*fin
finde
dela
lafuncion
funcionmain()
main()*/
*/
/*
/*---------------------------------------------------------------------------*/
*/
/*
/*definicion
definicionde
delas
lasfunciones
funciones*/
*/
void
voidinciso_a()
inciso_a()
{{
system("cls");
system("cls");
REBOTE=0;
REBOTE=0;
ALTO=1;
ALTO=1;
printf("Dame
printf("Damela
laaltura
alturainicial
inicialde
dedonde
dondese
sedeja
dejacaer
caerla
lapelota,
pelota,en
enmetros\n");
metros\n");
scanf("%f",&ALTO);
scanf("%f",&ALTO);
if(ALTO>0)
if(ALTO>0)
{{
do{
do{
REBOTE=REBOTE+1;
REBOTE=REBOTE+1;
ALTO=ALTO*2.0/3.0;
ALTO=ALTO*2.0/3.0;
ALTURA[REBOTE]=ALTO;
ALTURA[REBOTE]=ALTO;
}while(ALTO>0.01);
}while(ALTO>0.01);
/*
/*imprimir
imprimirtodos
todoslos
losrebotes
rebotescon
consus
susalturas
alturas*/
*/
printf("\n\nImprimir
printf("\n\nImprimirlos
losRebotes
Rebotesyysus
susAlturas\n");
Alturas\n");
printf("Rebote
printf("Rebote Altura\n");
Altura\n");
for(I=1;I<=REBOTE;I++)
for(I=1;I<=REBOTE;I++)
{{
printf("%d
%8.4f\n",I,ALTURA[I]);
printf("%d
%8.4f\n",I,ALTURA[I]);
}}/*
/*fin
findel
delfor
for*/
*/
printf("Respuesta
printf("Respuestaaala
laPregunta
Preguntadel
delinciso
incisoA\n");
A\n");
printf("\nTotal
printf("\nTotalde
deRebotes
Rebotes%d
%dhasta
hastaalcanzar
alcanzaraltura=1
altura=1cm.
cm.oomenor\n",REBOTE);
menor\n",REBOTE);

}}
else
else
{{
printf("La
printf("Laaltura
alturainsertada
insertadaes
escero
cerooomenor
menoraacero
cero\n");
\n");
printf("no
printf("notiene
tienesentido
sentidohacer
hacercalculos
calculoscon
coneste
estenumero
numero\n");
\n");
printf("si
printf("sidese
deseintentar
intentarde
denuevo
nuevodebera
deberade
deejecutar,
ejecutar,otra
otravez,
vez,el
elprograma\n");
programa\n");
}}/*
/*fin
findel
delif
if*/
*/
printf("\n\n
printf("\n\npulse
pulsecualquier
cualquiertecla
teclapara
paracontinuar");
continuar");
getche();
getche();
return;
return;
}}/*
/*fin
finde
dela
lafuncion
funcioninciso_a
inciso_a*/
*/
/*
/*---------------------------------------------------------------------------*/
*/
void
voidinciso_b()
inciso_b()
{{
system("cls");
system("cls");
for(I=1;I<=REBOTE;I++)
for(I=1;I<=REBOTE;I++)
{{
if(ALTURA[I]<=0.50)
if(ALTURA[I]<=0.50)
{{
POSICION=I;
POSICION=I;
I=REBOTE;
I=REBOTE;
}}/*
/*fin
findel
delif
if*/
*/
}}/*
/*fin
findel
delfor
for*/
*/
printf("Respuesta
printf("Respuestaaala
laPregunta
Preguntadel
delinciso
incisoB\n");
B\n");
printf("\nEl
es 50
50 cms
cms oo menor
menor es
es %d,con
%d,con altura
altura
printf("\nEl rebote
rebote en
en que
que la altura es
%8.4f\n",POSICION,ALTURA[POSICION]);
%8.4f\n",POSICION,ALTURA[POSICION]);
printf("\n\n
printf("\n\npulse
pulsecualquier
cualquiertecla
teclapara
paracontinuar");
continuar");
getche();
getche();
return;
return;
}}/*
/*fin
finde
dela
lafuncion
funcioninciso_b
inciso_b*/
*/
/*
/*---------------------------------------------------------------------------*/
*/
void
voidinciso_c()
inciso_c()
{{
Captulo #7

73

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

system("cls");
system("cls");
ALT_PROM=0;
ALT_PROM=0;
for(I=1;I<=REBOTE;I++)
for(I=1;I<=REBOTE;I++)
{{
ALT_PROM=ALT_PROM+ALTURA[I];
ALT_PROM=ALT_PROM+ALTURA[I];
findel
delfor
for*/*/
} }/*/*fin
ALT_PROM=ALT_PROM/REBOTE;
ALT_PROM=ALT_PROM/REBOTE;
printf("Respuestaa alalaPregunta
Preguntadel
delinciso
incisoC\n");
C\n");
printf("Respuesta
printf("Laaltura
alturaPromedio
Promedioeses%8.4f\n",ALT_PROM);
%8.4f\n",ALT_PROM);
printf("La
printf("\n\npulse
pulsecualquier
cualquiertecla
teclapara
paracontinuar");
continuar");
printf("\n\n
getche();
getche();
return;
return;
findedelalafuncion
funcioninciso_c
inciso_c*/*/
} }/*/*fin
--------------------------------------*/*/
/*/*-------------------------------------voidinciso_d()
inciso_d()
void
{{
system("cls");
system("cls");
ARRIBA=0;
ARRIBA=0;
for(I=1;I<=REBOTE;I++)
for(I=1;I<=REBOTE;I++)
{{
if(ALTURA[I]>ALT_PROM)
if(ALTURA[I]>ALT_PROM)
{{
ARRIBA=ARRIBA+1;
ARRIBA=ARRIBA+1;
findel
delifif*/*/
} }/*/*fin
findel
delfor
for*/*/
} }/*/*fin
printf("Respuestaa alalaPregunta
Preguntadel
delinciso
incisoD\n");
D\n");
printf("Respuesta
printf("Laaltura
alturaPromedio
Promedioeses%8.4f\n",ALT_PROM);
%8.4f\n",ALT_PROM);
printf("La
printf("TotaldedeRebotes
Rebotes%d\n",REBOTE);
%d\n",REBOTE);
printf("Total
printf("Numerodederebotes
rebotessuperior
superioralalpromedio:
promedio:%d\n",ARRIBA);
%d\n",ARRIBA);
printf("Numero
printf("\n\npulse
pulsecualquier
cualquiertecla
teclapara
pararegresar
regresara alalapantalla
pantalladedeedicion");
edicion");
printf("\n\n
getche();
getche();
return;
return;
findedelalafuncion
funcioninciso_d
inciso_d*/*/
} }/*/*fin

7.2 PROBLEMAS PROPUESTOS: Arreglos de Memoria Unidimensionales


Problema 7.6. Realice un programa que imprima la tabla de multiplicar de cualquier nmero.
Problema 7.7. Realice un programa que haga la bsqueda secuencial de un nmero en una lista de N
nmeros e imprima si fue encontrado o no. Suponga que los elementos de la lista se pueden repetir, si se
repite imprima el nmero de veces que est repetido.
Problema7.8. Realice un programa que sume los elementos de dos listas de nmeros y guarde los valores en
una tercera lista.
Problema 7.9. Utilice Funciones Definidas por el Usuario sin Parmetros. En dos arreglos unidimensionales
se tiene la siguiente informacin de N personas. En el primero, se tiene la altura en metros. En el segundo,
se tiene el peso en kilogramos.
En un tercer arreglo unidimensional deber calcular el ndice de Masa Corporal (IMC) segn la
siguiente frmula. IMC=Peso/ Altura2
En un cuarto arreglo unidimensional deber almacenar el resultado de acuerdo al IMC segn la
siguiente tabla:
IMC
Resultado
Menos de 19
Bajo en Peso
19 a 25
Peso Normal
25 a 30
Sobre Peso
Mayor de 30
Obesidad
a)

Elabore un programa que determine e imprima el ndice de Masa Corporal (IMC)


promedio.
b) Determine e imprima cuntas y cules personas estn por encima o igual al promedio, y
cuntas y cules por debajo del mismo.
Captulo #7

74

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

c)

Facultad de Ingeniera Mecnica y Elctrica

Determine e imprima en cuntas personas pertenecen a cada categora y el porcentaje que


representan del total.

7.3 ARREGLOS DE MEMORIA BIDIMENSIONALES.


Los arreglos bidimensionales permiten contemplar filas y columnas tal como sucede una matriz
matemtica como en el siguiente ejemplo:
-25
12
-70
63

30
90
-36
42

89
-25
79
78

-45
50
-81
-27

La matriz de posiciones sera la siguiente, considere (Filas, Columnas)


1,1
2,1
3,1
4,1

1,2
2,2
3,2
4,2

1,3
2,3
3,3
4,3

1,4
2,4
3,4
4,4

En el ejemplo anterior tenemos una matriz con dimensin de 4 por 4, pero como ya sabemos pueden
ser de N por N.
Problema 7.10: Para ver un ejemplo de la forma como se manejan los arreglos bidimensionales haremos un
programa que sume los elementos de la diagonal principal de la matriz (prog7-11.c). Para el caso de la matriz
presentada como ejemplo, los elementos que forman parte de la diagonal principal son: -25 + 90 + 79 - 27 =
117, las posiciones que ocupan dichos elementos son (1,1) (2,2) (3,3) y (4,4). Es importante notar que en este
programa estamos usando for() anidados.

Funcin main

Captulo #7

75

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin carga_matriz

Captulo #7

76

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Funcin suma_diagonal

Funcin imprimir_resultado
Captulo #7

77

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

/* prog7-10.c */
/* prog7-10.c */
#include <stdio.h> /* suma la diagonal principal de una matriz */
#include <stdio.h> /* suma la diagonal principal de una matriz */
/* declaracion de funciones */
/* declaracion de funciones */
void carga_matriz();
void carga_matriz();
void suma_diagonal();
void suma_diagonal();
void imprime_resultado();
void imprime_resultado();
/* declaracion de variables globales */
/* declaracion de variables globales */
int Matriz[10][10], I, J, N, SUMA, fila, columna;
int Matriz[10][10], I, J, N, SUMA, fila, columna;
main()
main()
{
{
clrscr();
clrscr();
/* llamada a las funciones
/* llamada a las funciones
carga_matriz();
carga_matriz();
suma_diagonal();
suma_diagonal();
imprime_resultado();
imprime_resultado();
} /* fin de la funcion main()
} /* fin de la funcion main()
/*
/*
/*
/*

*/
*/

*/
*/

------------------------------------------- */
------------------------------------------- */
definicion de funciones */
definicion de funciones */

void carga_matriz()
void carga_matriz()
{
{
clrscr();
clrscr();
printf("Dame la dimension de la matriz \n");
printf("Dame la dimension de la matriz \n");
scanf("%d",&N);
scanf("%d",&N);
for(I=1;I<=N;I++)
for(I=1;I<=N;I++)
{
{
for(J=1;J<=N;J++)
for(J=1;J<=N;J++)
{
{
printf("Dame el elemento[%d,%d] \n",I,J);
printf("Dame el elemento[%d,%d] \n",I,J);
scanf("%d",&Matriz[I][J]);
scanf("%d",&Matriz[I][J]);
} /* fin del for(J=1;J<=N;J++) */
} /* fin del for(J=1;J<=N;J++) */
} /* fin del for(I=1;I<=N;I++) */
} /* fin del for(I=1;I<=N;I++) */
return;
return;
} /* fin de la funcion carga_matriz */
} /* fin de la funcion carga_matriz */
/* ------------------------------------------- */
/* ------------------------------------------- */
void suma_diagonal()
void suma_diagonal()
{
{
SUMA=0;
SUMA=0;
for(I=1;I<=N;I++)
for(I=1;I<=N;I++)
{
{
for(J=1;J<=N;J++)
for(J=1;J<=N;J++)
{
{
if(I==J)
if(I==J)
{
{
SUMA=SUMA+Matriz[I][J];
SUMA=SUMA+Matriz[I][J];
} /* fin del if(I==J) */
} /* fin del if(I==J) */
} /* fin del for(J=1;J<=N;J++) */
} /* fin del for(J=1;J<=N;J++) */
} /* fin del for(I=1;I<=N;I++) */
} /* fin del for(I=1;I<=N;I++) */
return;
return;
} /* fin de la funcion suma_matriz */
} /* fin de la funcion suma_matriz */
/* ------------------------------------------- */
/* ------------------------------------------- */
void imprime_resultado()
void imprime_resultado()
{
{
system("cls");
system("cls");
fila=5;
fila=5;
for(I=1;I<=N;I++)
for(I=1;I<=N;I++)
{
{
columna=5;
columna=5;
for(J=1;J<=N;J++)
for(J=1;J<=N;J++)
{
{
//gotoxy(columna,fila);
//gotoxy(columna,fila);
printf("%d",Matriz[I][J]);
printf("%d",Matriz[I][J]);
columna=columna+10;
columna=columna+10;
} /* fin del for(J=1;J<=N;J++) */
} /* fin del for(J=1;J<=N;J++) */
printf("\n");
printf("\n");
Captulo #7

78

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

fila=fila+1;
fila=fila+1;
}} /*
/* fin
fin del
del for(I=1;I<=N;I++)
for(I=1;I<=N;I++) */
*/
printf("\n
printf("\n \n
\n La
La suma
suma de
de la
la diagonal
diagonal principal
principal es
es %d\n",SUMA);
%d\n",SUMA);
printf("Pulse
printf("Pulse cualquier
cualquier tecla
tecla para
para continuar
continuar \n");
\n");
getche();
getche();
return;
return;
}} /*
/* fin
fin de
de imprime_resultado
imprime_resultado */
*/

Problema 7.11. Realizar el siguiente programa con funciones sin parmetros. En un arreglo bidimensional de
30x6 se tiene almacenadas las calificaciones de treinta alumnos en seis exmenes diferentes. Realice un
programa que obtenga lo siguiente.
a) El promedio de calificaciones de los treinta alumnos en los seis exmenes.
b) El alumno o alumnos que obtuvieron la mayor calificacin en el tercer examen, en cualquier
caso deber imprimir cuantos alumnos fueron.
c) El examen en el que el promedio del grupo fue el ms alto.
d) Cuntos alumnos estn aprobados y cuntos reprobados as como el porcentaje que
representa.

/*
/* prog7-11.c
prog7-11.c */
*/
#include
#include <stdio.h>
<stdio.h>
/*
/* declaracion
declaracion de
de funciones
funciones */
*/
void
void leer_datos();
leer_datos();
void
void inciso_a();
inciso_a();
void
void inciso_b();
inciso_b();
void
void inciso_c();
inciso_c();
void
void inciso_d();
inciso_d();
/*
/* declaracion
declaracion de
de variables
variables globales
globales */
*/
int
int I,
I, J,
J, FILA,
FILA, COLUMNA,
COLUMNA, EXAMENES,
EXAMENES, ALUMNOS,MAYORES[10];
ALUMNOS,MAYORES[10];
int
int CONTAR,POSICION;
CONTAR,POSICION;
float
float CAL[10][10],
CAL[10][10], PROMEDIO[10],MAYOR,PROM_EX[10],SUMA;
PROMEDIO[10],MAYOR,PROM_EX[10],SUMA;
float
float APROBADOS,REPROBADOS,PORC_APROBADOS,
APROBADOS,REPROBADOS,PORC_APROBADOS, PORC_REPROBADOS;
PORC_REPROBADOS;
main()
main()
{{
system("cls");
system("cls");
/*
/* llamada
llamada aa las
las funciones
funciones */
*/
leer_datos();
leer_datos();
inciso_a();
inciso_a();
inciso_b();
inciso_b();
inciso_c();
inciso_c();
inciso_d();
inciso_d();
}} /*
/* fin
fin de
de la
la funcion
funcion main()
main() */
*/
/*
/* ------------------------------------------------------------------------------------- */
*/
/*
/* definicion
definicion de
de funciones
funciones */
*/
void
void leer_datos()
leer_datos()
{{
system("cls");
system("cls");
printf("Cuantos
printf("Cuantos Alumnos
Alumnos son?
son? \n");
\n");
scanf("%d",&ALUMNOS);
scanf("%d",&ALUMNOS);
printf("Cuantos
printf("Cuantos Examenes
Examenes son?
son? \n");
\n");
scanf("%d",&EXAMENES);
scanf("%d",&EXAMENES);
for(I=1;I<=ALUMNOS;I++)
for(I=1;I<=ALUMNOS;I++)
{{
system("cls");
system("cls");
printf("Dame
printf("Dame las
las Calificaciones
Calificaciones del
del Alumno
Alumno ## %d\n",I);
%d\n",I);
for(J=1;J<=EXAMENES;J++)
for(J=1;J<=EXAMENES;J++)
{{
do{
do{
printf("Dame
printf("Dame la
la calififacion
calififacion del
del Examen
Examen %d\n",J);
%d\n",J);
scanf("%f",&CAL[I][J]);
scanf("%f",&CAL[I][J]);
if(CAL[I][J]<0
if(CAL[I][J]<0 ||
|| CAL[I][J]>100)
CAL[I][J]>100)
Captulo #7

79

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

{if(CAL[I][J]<0 || CAL[I][J]>100)
{ printf("Calificacion Invalida,");
printf("favor
de insertar
otro numero\n");
printf("Calificacion
Invalida,");
} /*printf("favor
fin del if */de insertar otro numero\n");
}while(CAL[I][J]<0
|| CAL[I][J]>100);
} /* fin del if */
} /* }while(CAL[I][J]<0
fin del for(J=1;J<=EXAMENES;J++)
*/
|| CAL[I][J]>100);
} /*}fin
del del
for(I=1;I<=ALUMNOS;I++)
*/
/* fin
for(J=1;J<=EXAMENES;J++)
*/
printf("\n\nPulse
cualquier tecla para*/
continuar\n");
} /* fin del for(I=1;I<=ALUMNOS;I++)
getche();
printf("\n\nPulse cualquier tecla para continuar\n");
return;
getche();
} /*
fin de la funcion leer_datos */
return;
} /* fin de la funcion leer_datos */
/* ------------------------------------------- */
void
inciso_a()
/* ------------------------------------------*/
{void inciso_a()
{ system("cls");
SUMA=0;
system("cls");
for(I=1;I<=ALUMNOS;I++)
SUMA=0;
{for(I=1;I<=ALUMNOS;I++)
{for(J=1;J<=EXAMENES;J++)
{for(J=1;J<=EXAMENES;J++)
{ SUMA=SUMA+CAL[I][J];
} /* SUMA=SUMA+CAL[I][J];
fin del for(J=1;J<=EXAMENES;J++) */
PROMEDIO[I]=SUMA/EXAMENES;
} /* fin del for(J=1;J<=EXAMENES;J++) */
SUMA=0;
PROMEDIO[I]=SUMA/EXAMENES;
} /*
fin del for(I=1;I<=ALUMNOS;I++) */
SUMA=0;
} /* fin del for(I=1;I<=ALUMNOS;I++) */
printf("Promedios por Alumno\n");
for(J=1;J<=EXAMENES;J++)
printf("Promedios por Alumno\n");
{for(J=1;J<=EXAMENES;J++)
EX%d\t",J);
{ printf("
} /*printf("
fin del for(J=1;J<=EXAMENES;J++)*/
EX%d\t",J);
printf("\tPromedio\n");
} /* fin del for(J=1;J<=EXAMENES;J++)*/
printf("\tPromedio\n");
for(I=1;I<=ALUMNOS;I++)
{for(I=1;I<=ALUMNOS;I++)
{for(J=1;J<=EXAMENES;J++)
{for(J=1;J<=EXAMENES;J++)
printf("%8.2f",CAL[I][J]);
{
} /* fin del for(J=1;J<=EXAMENES;J++) */
printf("%8.2f",CAL[I][J]);
printf("\tAlumno
#%d=%8.2f\n",I,PROMEDIO[I]);
} /* fin del for(J=1;J<=EXAMENES;J++)
*/
} /*printf("\tAlumno
fin del for(I=1;I<=ALUMNOS;I++)
*/
#%d=%8.2f\n",I,PROMEDIO[I]);
printf("\n\nPulse
cualquier
tecla
para
continuar\n");
} /* fin del for(I=1;I<=ALUMNOS;I++) */
getche();
printf("\n\nPulse cualquier tecla para continuar\n");
return;
getche();
} /*
fin de la funcion inciso_a */
return;
} /* fin de la funcion inciso_a */
/* ------------------------------------------- */
void
inciso_b()
/* ------------------------------------------*/
{void inciso_b()
{ /* tercer examen */
J=3;
/* tercer examen */
MAYOR=CAL[1][J];
J=3;
for(I=2;I<=ALUMNOS;I++)
MAYOR=CAL[1][J];
{for(I=2;I<=ALUMNOS;I++)
{ if(CAL[I][J]>MAYOR)
{if(CAL[I][J]>MAYOR)
{ MAYOR=CAL[I][J];
} /*MAYOR=CAL[I][J];
fin del if() */
} /* }
fin
*/
/*del
finfor(I=1;I<=ALUMNOS;I++)
del if() */
} /* fin del for(I=1;I<=ALUMNOS;I++) */
for(I=1;I<=ALUMNOS;I++)
{for(I=1;I<=ALUMNOS;I++)
{ if(CAL[I][J]==MAYOR)
{if(CAL[I][J]==MAYOR)
{ MAYOR=CAL[I][J];
CONTAR=CONTAR+1;
MAYOR=CAL[I][J];
MAYORES[CONTAR]=I;
CONTAR=CONTAR+1;
} /* MAYORES[CONTAR]=I;
fin del if() */
} /* }
fin
*/
/*del
finfor(I=1;I<=ALUMNOS;I++)
del if() */
} /* fin del for(I=1;I<=ALUMNOS;I++) */
Captulo #7

80

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

printf("Alumnos
printf("Alumnoscon
conlalacalificacion
calificacionmas
masAlta
AltaenenelelTercer
TercerExamen\n");
Examen\n");
for(I=1;I<=CONTAR;I++)
for(I=1;I<=CONTAR;I++)
{{
printf("AlumnoNumero
Numero%d\n",MAYORES[I]);
%d\n",MAYORES[I]);
printf("Alumno
findel
delfor(I=1;I<=CONTAR;I++)
for(I=1;I<=CONTAR;I++)*/*/
} }/*/*fin
printf("\n\nPulsecualquier
cualquiertecla
teclapara
paracontinuar\n");
continuar\n");
printf("\n\nPulse
getche();
getche();
return;
return;
findedelalafuncion
funcioninciso_b
inciso_b*/*/
} }/*/*fin
-------------------------------------------*/*/
/*/*------------------------------------------voidinciso_c()
inciso_c()
void
{{
SUMA=0;
SUMA=0;
for(I=1;I<=ALUMNOS;I++)
for(I=1;I<=ALUMNOS;I++)
{{
for(J=1;J<=EXAMENES;J++)
for(J=1;J<=EXAMENES;J++)
{{
PROM_EX[J]=PROM_EX[J]+CAL[I][J];
PROM_EX[J]=PROM_EX[J]+CAL[I][J];
findel
delfor(J=1;J<=EXAMENES;J++)
for(J=1;J<=EXAMENES;J++)*/*/
} }/*/*fin
findel
delfor(I=1;I<=ALUMNOS;I++)
for(I=1;I<=ALUMNOS;I++)*/*/
} }/*/*fin
for(J=1;J<=EXAMENES;J++)
for(J=1;J<=EXAMENES;J++)
{{
PROM_EX[J]=PROM_EX[J]/EXAMENES;
PROM_EX[J]=PROM_EX[J]/EXAMENES;
printf("Promedioenenelelexamen
examen#%d
#%d= =%8.2f\n",J,PROM_EX[J]);
%8.2f\n",J,PROM_EX[J]);
printf("Promedio
findel
delfor
forfor(J=1;J<=EXAMENES;J++)
for(J=1;J<=EXAMENES;J++)*/*/
} }/*/*fin
MAYOR=PROM_EX[1];
MAYOR=PROM_EX[1];
for(I=0;I<=ALUMNOS;I++)
for(I=0;I<=ALUMNOS;I++)
{{
if(PROM_EX[I]>MAYOR)
if(PROM_EX[I]>MAYOR)
{{
MAYOR=PROM_EX[I];
MAYOR=PROM_EX[I];
POSICION=I;
POSICION=I;
findel
delif()
if()*/*/
} }/*/*fin
findel
delfor(I=2;I<=ALUMNOS;I++)
for(I=2;I<=ALUMNOS;I++)*/*/
} }/*/*fin
printf("ElExamen
Examendel
delpromedio
promediomas
masalto
altoeses%d%dcon
con%8.2f\n",POSICION+1,MAYOR);
%8.2f\n",POSICION+1,MAYOR);
printf("El
printf("\n\nPulsecualquier
cualquiertecla
teclapara
paracontinuar\n");
continuar\n");
printf("\n\nPulse
getche();
getche();
return;
return;
findedelalafuncion
funcioninciso_c
inciso_c*/*/
} }/*/*fin
-------------------------------------------*/*/
/*/*------------------------------------------voidinciso_d()
inciso_d()
void
{{
system("cls");
system("cls");
for(I=1;I<=ALUMNOS;I++)
for(I=1;I<=ALUMNOS;I++)
{{
if(PROMEDIO[I]>=70)
if(PROMEDIO[I]>=70)
{{
APROBADOS=APROBADOS+1;
APROBADOS=APROBADOS+1;
}}
else
else
REPROBADOS=REPROBADOS+1;
{ { REPROBADOS=REPROBADOS+1;
findel
delif()
if()*/*/
} }/*/*fin
findel
delfor(I=1;I<=ALUMNOS;I++)
for(I=1;I<=ALUMNOS;I++)*/*/
} }/*/*fin
PORC_APROBADOS=APROBADOS/ALUMNOS*100;
PORC_APROBADOS=APROBADOS/ALUMNOS*100;
PORC_REPROBADOS=REPROBADOS/ALUMNOS*100;
PORC_REPROBADOS=REPROBADOS/ALUMNOS*100;
printf("Aprobados = =%8.2f
%8.2f Porcentaje
PorcentajeAprobados=%8.2f\n",APROBADOS,PORC_APROBADOS);
Aprobados=%8.2f\n",APROBADOS,PORC_APROBADOS);
printf("Aprobados
printf("Reprobados= =%8.2f
%8.2f Porcentaje
PorcentajeReprobados=%8.2f\n",REPROBADOS,PORC_REPROBADOS);
Reprobados=
printf("Reprobados
%8.2f\n",REPROBADOS,PORC_REPROBADOS);
printf("\n\nPulse cualquier tecla para volver a la pantalla de edicion \n");
printf("\n\nPulse cualquier tecla para volver a la pantalla de edicion \n");
getche();
getche();
return;
} /* return;
fin de la funcion inciso_d */
} /* fin de la funcion inciso_d */

Captulo #7

81

Administracin y Sistemas

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

7.4 PROBLEMAS PROPUESTOS: Arreglos de Memoria Bidimensionales


Problema 7.12: Realice un programa que sume los elementos de la diagonal secundaria de una matriz.
Problema 7.13: Realice un programa que sume los elementos centrales de una matriz.
Problema 7.14: Realice un programa que sume los elementos perifricos de una matriz.
Problema 7.15: Realice un programa que sume los elementos de la matriz triangular superior.
Problema 7.16: Realice un programa que sume los elementos de la matriz triangular inferior.
Problema 7.17: Realice un programa que sume dos matrices y guarde el resultado en una tercera matriz.
Problema 7.18: Realice un programa que determine cuntos elementos pares y cuntos impares hay en una
matriz y cuntos de ellos son Cero.
Problema 7.19: Realice un programa que suma las filas y las columnas de una matriz. Se deber imprimir la
sumatoria por fila y por columnas.
Problema 7.20: Realice un programa que determine el elemento mayor de una matriz as como su posicin
Problema 7.21: Realice un programa que multiplique matrices.
Problema 7.22: Realice un programa que resuelva un problema de ecuaciones simultaneas a travs del
mtodo: Gauss-Jordan y Montante.
Problema 7.23. En este programa utilice variables enumeradas. En un arreglo bidimensional de 12x3 se tiene
los costos de produccin de tres departamentos: dulces, bebidas y conservas. Los costos de produccin
corresponden a cada mes de ao anterior.
Escriba un programa que pueda proporcionar la siguiente informacin.
e) En qu mes se registro el mayor costo de produccin de dulces?.
f) Promedio anual de los costos de produccin de bebidas.
g) En qu mes se registr el mayor costo de produccin en bebidas y en que mes el de menor
costo.
h) Cul fue el rubro que tuvo el menor costo de produccin en diciembre?

82

Captulo #7

82

Administracin y Sistemas

Você também pode gostar