Download Código Fuente 1

Document related concepts
no text concepts found
Transcript
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];
void main()
{
int i;
printf("\nIntroduzca una lista de %d elementos positivos.\n",MAX);
for (i = 0; i < MAX; muestra[i]>0?++i:i)
Arrays
}
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);
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]);
275
276 Programación en C. Algoritmos, estructuras de datos y objetos.
}
}
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;
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;
Arrays
}
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)
{
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++)
277
278 Programación en C. Algoritmos, estructuras de datos y objetos.
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)
{
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()
{
Arrays
279
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
%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
{
y =
x =
}
else
y =
}
== C-1)
/* ultima columna */
0;
x+1;
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);
280 Programación en C. Algoritmos, estructuras de datos y objetos.
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 ':' '));
}
}
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[])
Arrays
{
int i;
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;
281