Sunteți pe pagina 1din 9

18 Programación en C. Algoritmos, estructuras de datos y objetos.

Capítulo 9

EJEMPLO 9.2

#include <stdio.h>

#define NUM 8

int main()
{
int nums[NUM];
int i;
int total = 0;

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


{
printf("Por favor, introduzca el número: ");
scanf("%d",&nums[i]);
}
printf("\nLista de números: ");
for (i = 0; i < NUM; i++)
{
printf("%d ",nums[i]);
total += nums[i];
}

printf("\nLa suma de los números es %d",total);


return 0;
}

EJEMPLO 9.3

#include <stdio.h>

/* Constantes y variables globales */

#define MAX 10
float muestra[MAX];
void main()
{
int i;
printf("\nIntroduzca una lista de %d elementos positivos.\n",MAX);
for (i = 0; i < MAX; muestra[i]>0?++i:i)
scanf("%f",&muestra[i]);
}

EJEMPLO 9.4

#include <stdio.h>
#define MAX 10
float muestra[MAX];
19 Programación en C. Algoritmos, estructuras de datos y objetos.

void main()
{
int i;
printf("\nIntroduzca una lista de %d elementos positivos.\n",MAX);
for (i = 0; i < MAX; muestra[i]>0?++i:i)
scanf("%f",&muestra[i]);
printf("\nDatos leidos del teclado: ");
for ( i = 0, i < MAX; ++i)
printf("%f\t",muestra[i]);
}

EJEMPLO 9.5

float discos[2][4];
int fila, col;

for (fila = 0; fila < 2; fila++) {


for (col = 0; col < 4; col++)
{
scanf("%f",&discos[fila][col]);
}
}

/* Visualizar la tabla */
for (fila = 0; fila < 2; fila++)
{
for (col = 0; col < 4; col++)
{
printf("\n Pts %.1f \n",discos[fila][col]);
}
}

EJERCICIO 9.1

#include <stdio.h>
/* prototipos funcionales */
void leer(int a[][5]);
void visualizar(const int a[][5]);

int main()
{
int a[3][5];
leer(a);
visualizar(a);
return 0;
}

void leer(int a[][5])


{
int i,j;

puts("Introduzca 15 números enteros, 3 por fila");


for (i = 0; i < 3; i++)
{
printf("Fila %d: ",i);
Arrays 20

for (j = 0; j < 5; j++)


scanf("%d",&a[i][j]);
}
}

void visualizar (const int a[][5])


{
int i,j;

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


{
for (j = 0; j < 5; j++)
printf(" %d",a[i][j]);
printf("\n");
}
}

EJERCICIO 9.2

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 8
#define randomize (srand(time(NULL)))
#define random(num) (rand()%(num))
void gen_mat(int a[][N], int n);
int simetrica(int a[][N], int n);
void escribe_mat(int a[][N], int n);

int main(void)
{
int a[N][N]; /* define matriz de tamaño máximo N */
int n,i,j;
int es_sim;

randomize;
do {
printf("\nTamaño de cada dimensión de la matriz, máximo %d: ",N);
scanf("%d",&n);
}while (n<2 || n>N);

do {
gen_mat(a,n);
es_sim = simetrica(a,n);

if (es_sim)
{
puts("\n\Encontrada matriz simétrica.\n");
escribe_mat(a,n);
}

} while (!es_sim);

return 0;
}
21 Programación en C. Algoritmos, estructuras de datos y objetos.

void gen_mat(int a[][N], int n)


{
int i,j;

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


for (j=0; j<n; j++)
a[i][j]= random(N);
}

int simetrica(int a[][N], int n)


{
int i,j;
int es_simetrica;

for (es_simetrica=1,i=0; i<n-1 && es_simetrica; i++)


{
for (j=i+1; j<n && es_simetrica; j++)
if (a[i][j] != a[j][i])
es_simetrica= 0;
}
return es_simetrica;
}

void escribe_mat(int a[][N], int n)


{
int i,j;
puts("\tMatriz analizada");
puts("\t----- ---------\n");
for (i=0; i<n; i++)
{ putchar('\t');
for (j=0; j<n; j++)
printf("%d %c",a[i][j],(j==n-1 ?'\n ':' '));
}
}

EJEMPLO 9.6

#include <stdio.h>
#define L 100
void leerArray(double a[], int* num );
void imprimirArray (const double [], int n);

int main()
{
double a[L];
int n;

leerArray(a, &n);
printf("El array a tiene %d elementos, estos son\n ",n);
imprimirArray(a, n);

return 0;
}

void leerArray(double a[], int* num)


Arrays 22

{
int n = 0;
puts("Introduzca datos. Para terminar pulsar 0.\n");
for (; n < L; n++)
{
printf("%d: ",n);
scanf("%lf",&a[n]);
if (a[n] == 0) break;
};
*num = n;
}

void imprimirArray(const double a[],int n)


{
int i = 0;
for (; i < n; i++)
printf("\t%d: %lf\n",i,a[i]);
}

EJEMPLO 9.7
double maximo(const double a[],int n)
{
double mx;
int i;

mx = a[0];
for (i = 1; i < n; i++)
mx = (a[i]>mx  a[i]: mx);

return mx;
}
EJEMPLO 9.8
#include <stdio.h>
int SumaDeEnteros(const int ArrayEnteros[], int NoElementos);
int maximo(const int ArrayEnteros[], int NoElementos);

int main()
{
int Items[10];
int Total, i;

puts("Introduzca 10 números, seguidos por return");


for (i = 0; i < 10; i++)
scanf("%d",&Items[i]);

printf("Total = %d \n",SumaDeEnteros(Items,10));
printf("Valor máximo: %d \n",maximo(Items,10));
return 0;
}

int SumaDeEnteros(int ArrayEnteros[], int NoElementos)


{
23 Programación en C. Algoritmos, estructuras de datos y objetos.

int i, Total = 0;
for (i = 0; i < NoElementos; i++)
Total += ArrayEnteros[i];

return Total;
}

int maximo(const int ArrayEnteros[], int NoElementos)

{
int mx;
int i;

mx = ArrayEnteros[0];
for (i = 1; i < NoElementos; i++)
mx = (ArrayEnteros[i]>mx  ArrayEnteros[i]: mx);

return mx;
}

EJERCICIO 9.3

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define F 8
#define C 10
#define N 50
#define randomize (srand(time(NULL)))
#define random(num) (rand()%(num))

void escribe_mat(int a[][C]);


void gen_mat(int a[][C]);
int buscar(int a[][C],int* fila,int* col,int elemento);

int main()
{
int a[F][C];
int item, nf,nc,esta;
int veces = 0;

randomize;
gen_mat(a);
printf("\n Elemento a buscar: ");
scanf("%d",&item);

do {
esta = buscar(a,&nf,&nc,item);
if (esta)
{
veces = veces+1;
printf("\n coincidencia %d: Fila %d, Columna %d\n",veces,nf,nc);
}
}while (esta);
escribe_mat(a);
printf("\nNúmero de coincidencias del elemento
Arrays 24

%d :%d",item,veces);
return 0;
}

/* Busqueda lineal en toda la matriz */


int buscar(int a[][C],int* fila,int* col,int elemento)
{
static int x = 0, y = -1;
int i,j,encontrado;

/* avanza al siguiente elemento(fila,columna) */

if (y == C-1) /* ultima columna */


{
y = 0;
x = x+1;
}
else
y = y+1;

encontrado = 0;
while (!encontrado && (x<F))
{
encontrado = (a[x][y] == elemento);
if (!encontrado) /* avanza a siguiente elemento */
if (y == C-1)
{
y = 0;
x = x+1;
}
else
y = y+1;
}
/* ultimo valor de x e y */
*fila = x;
*col = y;
return encontrado;
}

void gen_mat(int a[][C])


{
int i,j;

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


for (j=0; j<C; j++)
a[i][j]= random(N);
}

void escribe_mat(int a[][C])


{
int i,j;
puts("\t\tMatriz analizada");
puts("\t\t----- ----------\n");
for (i=0; i<F; i++)
{ putchar('\t');
for (j=0; j<C; j++)
printf("%d %c",a[i][j],(j==C-1 ?'\n ':' '));
25 Programación en C. Algoritmos, estructuras de datos y objetos.

}
}

EJERCICIO 9.4

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define F 6
#define C 10
#define V 100.0

void escribe_mat(float mt[][C]);


void gen_mat(float mt[][C]);
float sumar(float v[]);
int maximo(float mt[][C]);

int main()
{
float mat[F][C];
int fila;

srand(time(NULL)); /* inicializa semilla de números aleatorios */


gen_mat(mat);
escribe_mat(mat);

fila = maximo(mat);
printf("\n\nFila cuya suma de elementos es mayor: %d",fila);

return 0;
}

void gen_mat(float mat[][C])


{
int i,j;

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


for (j=0; j<C; j++)
mat[i][j]= rand()/V;
}

void escribe_mat(float mat[][C])


{
int i,j;
puts("\n\t\tMatriz analizada\n");
puts("\t\t----- ---------\n");
for (i=0; i<F; i++)
{
for (j=0; j<C; j++)
printf("%.2f%c",mat[i][j],(j==C-1 ?'\n ':' '));
}
}
float sumar(float v[])
{
int i;
Arrays 26

float s;
for (s=0.0,i=0; i<C; i++)
s += v[i];
return s;
}
int maximo(float mt[][C])
{
float mx;
int i,f;

mx = sumar(&mt[0][0]); /* direcci¢n de primera fila */


printf("\nSuma fila %d %.2f",0,mx);
for (f=0,i=1; i<F; i++)
{
float t;
t = sumar(&mt[i][0]);
printf("\nSuma fila %d %.2f",i,t);
if (t > mx)
{
mx = t;
f = i;
}
}
return f;
}

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