Sunteți pe pagina 1din 8

//

#include <stdio.h>

#include <math.h>

#include <conio.h>

main()

int vector[10],i,j,aux,izq,der,cen,valor;

for(i=0;i<10;i++){

printf("Introduce un numero: ");

scanf("%d",&vector[i]);

for(i=0;i<10;i++){

for(j=0;j<(10-i);j++){

if(vector[j]>vector[j+1]){

aux=vector[j];

vector[j]=vector[j+1];

vector[j+1]=aux;

printf("el vector ordenado de menor a mayor queda asi: ");

for(i=0;i<10;i++)

printf(" %d ",vector[i]);

printf("\nNumero que queremos buscar: ");


scanf("%d",&valor);

izq=0;

der=9;

cen=(9+1)/2;

while(vector[cen] != valor && izq<der){

if (vector[cen]>valor){

der=cen-1;

else izq=cen+1;

cen=(izq+der)/2;

if(vector[cen]==valor)

printf("Encontrado en la posicion %d",cen+1);

else printf("No encontrado");

getch();

//ARREGLOS BIDIMENSIONALES

Arreglos bidimensionales
En algunos lenguajes de programacin, y es el caso de C, se permiten arreglos de varios
subndices, es decir, arreglos multidimensionales. Generalmente estos arreglos se utilizan para
representar tablas de valores con renglones y columnas, donde el primer subndice representa el
rengln y el segundo la columna. Para referenciar cualquier elemento del arreglo se deben indicar
los dos subndices.

Un arreglo de mltiple subndice puede ser inicializado en su declaracin en forma similar a un


arreglo de un subndice. Por ejemplo, un arreglo de doble subndice b[2][2] puede ser inicializado
con
int b[2][2] = {{ 1, 2}, {3, 4}};

Los valores se agrupan por renglones entre llaves. Por lo tanto, 1 y 2 inicializan b[0][0] y b[0][1], 3
y 4 inicializan b[1][0] y b[1][1]. Si para un rengln dado no se proporcionan suficientes
inicializadores, los elementos restantes de dicho rengln se inicializarn a 0. Por ejemplo:

int b[2][2] = {{ 1}, {3, 4}};

inicializara b[0][0] en 1 y b[0][1] en 0, b[1][0] en 3 y b[1][1] en 4.

En la tabla siguiente se muestra la representacin grfica de un arreglo con tres renglones y cuatro
columnas.

Columna0 Columna1 Columna2 Columna 3


Rengln0 a[0][0] a[0][1] a[0][2] a[0][3]
Rengln1 a[1][0] a[1][1] a[1][2] a[1][3]
Rengln2 a[2][0] a[2][1] a[2][2] a[2][3]

El recorrido de un arreglo de dos dimensiones para impresin o para cualquier procesamiento


deber hacerse con dos ciclos for anidados, de tal modo que el ms exterior recorra todos los
renglones, y para cada rengln (el ciclo for interior) recorra todas las columnas del arreglo, de tal
forma que cada elemento sea referenciado en los ciclos anidados. A continuacin se muestra un
ejemplo simple para impresin de un arreglo bidimensional.

/* Inicializacin de arreglos bidimensionales */


#include (stdio.h)
#include (conio.h)
void imprimeArreglo(int [][3]);
main( )
{
int arreglo1[2][3] = { {1,2,3}, {4,5,6}},
arreglo2[2][3] = { 1,2,3,4,5},
arreglo3[2][3] = { {1,2}, {4}};
clrscr();
printf("Los valores en arreglo1 por rengln son: \n");
imprimeArreglo(arreglo1);
printf("Los valores en arreglo2 por rengln son: \n");
imprimeArreglo(arreglo2);
printf("Los valores en arreglo3 por rengln son: \n");
imprimeArreglo(arreglo3);
getch ( );
return 0;
}
void imprimeArreglo(int arreglo[][3])
{
int i,j;
for (i=0; i<=1; i++)
{
for (j=0; j<=2; j++)
printf("%5d", arreglo[i][j]);
printf("\n");
}
}

PRACTICA DE ARREGLOS.
En un grupo existen cinco alumnos, los cuales presentaron tres exmenes cada uno obteniendo las
siguientes calificaciones:

CALIFICACIONES
ALUMNOS Examen0 Examen1 Examen2
Alumno0 77 74 84
Alumno1 96 85 76
Alumno2 70 69 88
Alumno3 58 86 90
Alumno4 75 91 72

Se desea obtener la tabla de calificaciones (semejante a la mostrada), la calificacin ms baja, la


calificacin ms alta y el promedio por cada alumno.

El problema se resuelve de la siguiente forma:

Como se conoce el nmero de alumnos y el nmero de calificaciones se definirn dos constantes


simblicas ALUMNOS y EXAMENES de 5 y 3 respectivamente.

/* Ejemplo de arreglos bidimensionales */


#include (stdio.h)
#include (conio.h)
#define ALUMNOS 5
#define EXAMENES 3

Debido a que se utilizarn funciones para imprimir los valores, encontrar la calificacin mnima, la
mxima y el promedio por alumno, es necesario comenzar a trabajar con dichas funciones. La
funcin mnima debe encontrar la calificacin ms baja entre todos los elementos del arreglo, por
tanto ser necesario que reciba como parmetros el mismo arreglo, el nmero de filas (o alumnos)
y el nmero de columnas (calificaciones), esto debido a que la funcin no debe ignorar elementos,
ni tampoco tratar de acceder a elementos que no existen en el arreglo. La manera de encontrar la
calificacin mnima es suponer una mnima seguramente mayor a todas, como 100 (para que sea
sustituida rpidamente por el primer elemento del arreglo). Todas los elementos se compararn
con la calificacin mnima registrada hasta el momento, y de ser menor, este valor ser asignado a
la variable minimo, de tal forma que al trmino del recorrido de todo el arreglo, la variable minimo
contenga el valor de la calificacin ms baja.

/*Calificacin mnima */
int minima (int calificaciones[][EXAMENES], int alum, int prueba)
{
int i, j, minimo = 100;
for (i=0;i<=alum-1; i++)
for (j=0; j<=prueba-1; j++)
if (calificaciones[i][j] < minimo)
minimo = calificaciones[i][j];
return minimo;
}

De la misma forma que la funcin minima, deber plantearse la funcin maxima, que encontrar la
calificacin ms alta. En este caso la variable maximo es iniciada en 0 para ser sustituida por
cualquier elemento mayor. Posteriormente se recorre el arreglo y se va guardando el valor mayor
en la variable maximo.

/* Calificacin mxima */
int maxima (int calificaciones[][EXAMENES], int alum, int prueba)
{
int i, j, maximo = 0;
for (i=0;i<=alum-1; i++)
for (j=0; j<=prueba-1; j++)
if (calificaciones[i][j] > maximo)
maximo = calificaciones[i][j];
return maximo;
}

La funcin para imprimir el arreglo, simplemente hace un recorrido en un primer ciclo for, de
todos los renglones (alumnos) en el arreglo, y en un for anidado recorre cada una de las columnas
de cada fila (calificaciones), imprimiendo rengln por rengln.

/* imprime el arreglo */
void imprimeArreglo(int calificaciones[][EXAMENES], int estudiante, int pruebas)
{
int i,j;
printf("\n%-20s%-30s\n"," ", "CALIFICACIONES");
printf("%-20s%6s%6s%6s", "ALUMNO","[0]","[1]","[2]","[3]");
for (i=0; i<= estudiante-1; i++)
{
printf("\nAlumno %d ", i);
for(j=0; j<=pruebas-1; j++)
printf("%6d", calificaciones[i][j]);
}
}

Para determinar el promedio por alumno se har otra funcin, que devuelve un tipo float (el
promedio) y que recibe nicamente dos parmetros, un arreglo de una sola dimensin y el tamao
de este arreglo (el nmero de calificaciones). El arreglo sencillo corresponde a las tres
calificaciones del alumno en cuestin. La funcin acumula mediante un ciclo todos los valores para
posteriormente dividirlo entre el total de calificaciones (la variable pruebas).

/*Promedio */
float promedio(int calif[], int pruebas)
{
int i, total=0;
for (i=0; i<=pruebas-1; i++)
total += calif[i];
return total/pruebas;
}

En la funcin main (programa principal) se declararn dos variables enteras, una representando el
arreglo de calificaciones, donde tendremos 5 renglones (de alumnos) y 3 columnas (de
calificaciones), que se inicializar en la misma declaracin. La otra variable entera ialumno, servir
para recorrer el arreglo en todas sus filas, es decir, alumno por alumno. Una vez hecho esto deben
mandar llamarse las funciones creadas de la forma correcta para obtener los resultados deseados.

main()
{
int ialumno, alumCalif[ALUMNOS][EXAMENES] = {{77,74,84},{96,85,96},
70,69,88},{58,86,90},{75,91,72}};
clrscr();
printf("El arreglo es: \n");
imprimeArreglo(alumCalif, ALUMNOS, EXAMENES);
printf("\n\nCalificacin ms baja: %d\n", minima(alumCalif,(ALUMNOS,EXAMENES));
printf("Calificacin ms alta: %d\n", maxima(alumCalif,ALUMNOS,EXAMENES));
for (ialumno=0; ialumno<=ALUMNOS - 1; ialumno ++)
printf("\nEl promedio para el alumno %d es: %.2f\n", ialumno,
promedio(alumCalif[ialumno], EXAMENES));
getch ( );
return 0;
}

No hay que olvidar que las definiciones de las funciones deben ubicarse despus de main y que
antes de main debe existir un prototipo. De este modo el programa completo queda de la
siguiente manera:

/* Ejemplo de arreglos bidimensionales */


#include (stdio.h)
#include (conio.h)
#define ALUMNOS 5
#define EXAMENES 3
int minima(int [][EXAMENES], int, int);
int maxima(int [][EXAMENES], int, int);
float promedio(int [], int);
void imprimeArreglo( int [][EXAMENES], int, int);

main( )
{
int ialumno,
alumCalif[ALUMNOS][EXAMENES] = {{77,74,84},{96,85,96},
{70,69,88},{58,86,90},{75,91,72}};
clrscr();
printf("El arreglo es: \n");
imprimeArreglo(alumCalif, ALUMNOS, EXAMENES);
printf("\n\nCalificacin ms baja: %d\n", minima(alumCalif, ALUMNOS,EXAMENES));
printf("Calificacin ms alta: %d\n", maxima(alumCalif, ALUMNOS,EXAMENES));
for (ialumno=0; ialumno<=ALUMNOS - 1; ialumno ++)
printf("\nEl promedio para el alumno %d es: %.2f\n", ialumno,
promedio(alumCalif[ialumno], EXAMENES));
return 0;
}

/*imprime el arreglo */
void imprimeArreglo(int calificaciones[][EXAMENES], int estudiante, int pruebas)
{
int i,j;
printf("\n%-20s%-30s\n"," ", "CALIFICACIONES");
printf("%-20s%6s%6s%6s", "ALUMNO","[0]","[1]","[2]","[3]");
for (i=0; i<= estudiante-1; i++)
{
printf("\nAlumno %d ", i);
for(j=0; j<=pruebas-1; j++)
printf("%6d", calificaciones[i][j]);
}
}

/*Calificacin mnima */
int minima (int calificaciones[][EXAMENES], int alum, int prueba)
{
int i, j, minimo = 100;
for (i=0;i<=alum-1; i++)
for (j=0; j<=prueba-1; j++)
if (calificaciones[i][j] < minimo)
minimo = calificaciones[i][j];
return minimo;
}

/*Calificacin mxima */
int maxima (int calificaciones[][EXAMENES], int alum, int prueba)
{
int i, j, maximo = 0;
for (i=0;i<=alum-1; i++)
for (j=0; j<=prueba-1; j++)
if (calificaciones[i][j] > maximo)
maximo = calificaciones[i][j];
return maximo;
}

/*Promedio */
float promedio(int calif[], int pruebas)
{
int i, total=0;
for (i=0; i<=pruebas-1; i++)
total += calif[i];
return total/pruebas;
}

S-ar putea să vă placă și