******************************************************** PROGRAMACION APLICADA A LA INGENIERIA CIVIL OOCC GUIA Nº3 Ayudante: Rodrigo Torres Aguirre/2009 Compilador utilizado: Dev-C++ versión 4.9.9.2 ********************************************************* 1-Construya un programa en C que permita llenar un vector de números enteros de largo MAX con números aleatorios. Finalmente ordenarlos e indicar cuantas iteraciones fueron necesarias para lograrlo. #define max 6 //LLENAR EL VECTOR O ARREGLO DE FORMA MANUAL (para el ejercicio no es necesario) void llenar_vector(int V[max]){ int i; for(i=0;i<max;i++){ printf("[%d]=",i); scanf("%d",&v[i]); //LLENAR EL VECTOR 0 ARREGLO DE FORMA ALEATORIA void llenar_vector_aleatorio(int V[max]){ int i; for(i=0;i<max;i++){ V[i]=rand()%100+1; printf("[%d]",v[i]); //ORDENAR EL VECTOR ALEATORIO void ordenar(int A[max]){ int x,y,cont2=0,aux; for(x=0;x<max-1;x++){ for(y=x+1;y<max;y++){ if(a[x]>a[y]){ aux=a[x]; A[x]=A[y]; A[y]=aux; cont2=cont2+1; printf("el numero de iteraciones de intercambio es:%d\n",cont2); //MOSTRAR EL VECOTR O ARREGLO void mostrar_vector(int V[max]){ int i; for(i=0;i<max;i++){ printf("[%d]",v[i]); //PROGRAMA PRINCIPAL int A[max],B[max]; printf("*****************************************\n"); printf("llenado MANUAL Y ORDENAMIENTO\n"); llenar_vector(a); ordenar(a); mostrar_vector(a); printf("\n\n*****************************************\n"); printf("llenado AUTOMATICO Y ORDENAMIENTO\n");
llenar_vector_aleatorio(b); ordenar(b); mostrar_vector(b); 2-Construya un programa en C que permita llenar un vector de números reales de 7 elementos por medio del teclado. Finalmente copiar la mitad izquierda del vector en la derecha y mostrarlo por pantalla. #define L 7 //LLENDADO DEL VECTOR void llenar_vector(int V[L]){ int i; printf("[%d]=",i); scanf("%d",&v[i]); printf("\nvector Original\n"); printf("[%d]",v[i]); //COPIADO DE LA MITAD IZQUIERDA DEL VECTOR Y COLOCADO EN LA PARTE DERECHA void mitad_vector(int V[L]){ int i; for(i=0;i<(l-1)/2;i++){ V[((L-1)/2)+i+1]=V[i]; printf("[%d]",v[i]); int A[L]; printf("llene EL ARREGLO\n"); llenar_vector(a); printf("\n******************"); printf("\nel ARREGLO QUEDO\n"); mitad_vector(a); 3-Construya un programa en C que permita determinar cuál es el número que más veces se repite dentro de un vector de números enteros de largo 20. Los valores contenidos en el vector son ingresados por el usuario. #define L 20 //LLENADO DE LA MATRIZ void llenar_vector(int V[L]){ int i; printf("[%d]=",i); scanf("%d",&v[i]);
printf("[%d]",v[i]); //BUSCANDO EL NUMERO void numero(int V[L]){ int i,j,b[l],aux,maximo,c[l]; B[i]=1; for(j=i+1;j<l;j++){ if(v[i]==v[j]){ B[i]=B[i]+1; C[i]=V[i]; printf("\nel numero %d se repite %d veces",v[i],b[i]); maximo=b[0]; if(b[i]>maximo){ maximo=b[i]; aux=c[i]; printf("\n\n\nel numero que mas se repite es el %d ",aux); int A[L]; printf("llenado MANUAL\n"); llenar_vector(a); numero(a); 4-Construya un programa en C que permita llenar una matriz para luego ordenarla en forma ascendente (menor a mayor) y finalmente determinar cuantas iteraciones fueron necesarias para lograr el orden. #define F 3 #define C 3 //LLENADO DE LA MATRIZ void llenar_matriz(int M[F][C]){ M[i][j]=rand()%15+1; printf("[%d]",m[i][j]); //ORDENAR LA MATRIZ DE MENOR A MAYOR void ordenar(int M[F][C]){
int x,y,i,j,cont=0,aux; for(x=i;x<i+1;x++){ for(y=0;y<c;y++){ if(m[i][j]<m[x][y]){ cont++; aux=m[i][j]; M[i][j]=M[x][y]; M[x][y]=aux; printf("[%d]",m[i][j]); printf("***********************************************"); printf("\n\nel NUMERO DE ITERACIONES FUERON:%d",cont); int A[F][C]; printf("ingrese LOS NUMEROS DE LA MATRIZ"); printf("\nla MATRIZ DE ORDENADA ES\n"); ordenar(a); 5-Construya un programa en C que permita contar cuantos números primos existen dentro de una matriz de 3 x 5. Los valores contenidos en la matriz deben ser generados al azar. #define F 3 #define C 5 //LLENADO DE LA MATRIZ void llenar_matriz(int M[F][C]){ M[i][j]=rand()%15+1; printf("\nla MATRIZ ES\n"); printf("[%d]",m[i][j]); int primos(int M[F][C]){ int i,j,k,primos=0,cont; cont=0;
for(k=1;k<=m[i][j];k++){ if(m[i][j]%k==0){ cont=cont+1; if(cont==2){ primos++; return primos; int A[F][C]; printf("\nla CANTIDAD DE NUMEROS PRIMOS EN LA MATRIZ ES:%d",primos(A)); 6-Construya un programa en C que permita llenar una matriz de números enteros de 4 x 5. Finalmente almacenar los primeros n números positivos en un vector de largo 20. Debe validar que n sea como máximo 20. Luego mostrar el contenido del vector. #define F 4 #define C 5 #define L 20 //LLENADO DE LA MATRIZ void llenar_matriz(int M[F][C]){ scanf("%d",&m[i][j]); printf("\nla MATRIZ ES\n"); printf("[%d]",m[i][j]); //ALMACENAR LOS PRIMEROS N NUMEROS POSITIVOS EN UN ARREGLO void almacenar(int M[F][C]){ int i,j,v[l],cont=0; printf("\nel VECTOR ES\n"); if(m[i][j]>0){ cont++; if(cont<l+1){ V[j]=M[i][j]; printf("[%d]",v[j]);
int A[F][C]; printf("ingrese LOS NUMEROS DE LA MATRIZ\n"); almacenar(a); 7-Construya un programa en C que permita llenar una matriz de N x M y luego copiar la mitad izquierda de la misma sobre su mitad derecha. Simulando un espejo en su mitad. //Los comentarios referidos a "cambios", es para cuando el espejo esta de //forma horizontal (en nuestro caso es vertical) #define N 3 #define M 5 //LLENADO DE LA MATRIZ void llenar_matriz(int A[N][M]){ scanf("%d",&a[i][j]); //MATRIZ ESPEJO MITAD VERTICAL void espejo(int A[N][M]){ //MATRIZ CON N PAR if(m%2==0){//cambiar M POR N,PARA QUE LA MITAD SUPERIOR SE REFLEJE // EN LA INFERIOR //CAMBIAR N POR (N+1)/2 for(j=0;j<(m+1)/2;j++){//(m+1)/2 POR M A[i][M-1-j]=A[i][j];//A[I][M-1-J] POR A[N-1-I][J] printf("\nla MATRIZ ESPEJO\n"); //MATRIZ CON N IMPAR (ESTA ES OPCIONAL,SI SE BORRAR EL IF DEL M PAR, EL //PROGRAMA FUNCIONA IGUAL if(m%2==1){//cambiar M POR N,PARA QUE LA MITAD SUPERIOR SE REFLEJE // EN LA INFERIOR //CAMBIAR N POR (N-1)/2 for(j=0;j<(m-1)/2;j++){//(m-1)/2 POR M A[i][M-1-j]=A[i][j];//A[i][M-1-j] POR A[N-1-I][J] printf("\nla MATRIZ ESPEJO\n");
int A[N][M]; printf("ingrese LOS NUMEROS DE LA MATRIZ\n"); espejo(a); 8-Construya un programa en C que permita invertir todo el contenido de una matriz de caracteres de orden N x N fila por fila. El contenido de la matriz es ingresado por el usuario. #define N 4 //LLENADO DE LA MATRIZ void llenar_matriz(int A[N][N]){ scanf("%d",&a[i][j]); //INVERTIR TODA LA MATRIZ POR FILAS void invertir_matriz(int A[N][N]){ int i,j,aux1,aux2; for(i=0;i<(n+1)/2;i++){ aux1=a[i][j]; aux2=a[n-1-i][j]; A[N-1-i][j]=aux1; A[i][j]=aux2; printf("\nla MATRIZ QUEDA\n"); int A[N][N];
printf("ingrese LOS NUMEROS DE LA MATRIZ\n"); invertir_matriz(a); 9-Construya un programa en C que permita ingresar la siguiente información de 30 alumnos. Nombre, Promedio, Carrera. Finalmente mostrar el nombre de todos los reprobados y Carrera de todos los aprobados en el mismo orden solicitado. #define L 30 //no se ejecuta como corresponde, es mejor hacerlo por estructuras //INGRESAR LOS DATOS(NOMBRE, PROMEDIO,CARRERA) void ingresar_datos(int V[L]){ char nombre[l],carrera[l]; float promedio[l],x; int i; printf("ingrese NOMBRE,PROMEDIO Y CARRERA DEL ALUMNO\n"); printf("nombre:"); scanf("%s",&nombre[i]); printf("promedio:"); scanf("%f",&promedio[i]); printf("carrera:"); scanf("%s",&carrera[i]); printf("\nlos alumnos reprobados son:"); if(promedio[i]<4){ printf("\n[%s]",nombre[i]); printf("\nlos listado de carreras aprobadas son:"); if(promedio[i]>=4){ printf("\n[%s]",carrera[i]); int A[L]; ingresar_datos(a); 10-Construya un programa en C que permita resolver lo siguiente considerando una matriz de números enteros de MAX x MAX. Para cada M(i,j): Si M (i, j) Es par --> M(i,j)=M(i,j)*3 Es Impar--> M(i,j)=M(i,j)*2 #define max 3 //LLENAR MATRIZ void llenar_matriz(int A[max][max]){ for(i=0;i<max;i++){ for(j=0;j<max;j++){ scanf("%d",&a[i][j]);
for(i=0;i<max;i++){ for(j=0;j<max;j++){ //MULTIPLICAR CIERTOS COEFICIENTES POR UN ESCALAR void escalar(int A[max][max]){ for(i=0;i<max;i++){ for(j=0;j<max;j++){ if(a[i][j]%2==0){ A[i][j]=A[i][j]*3; if(a[i][j]%2==1){ A[i][j]=A[i][j]*2; printf("\nla MATRIZ MODIFICADA\n"); for(i=0;i<max;i++){ for(j=0;j<max;j++){ int A[max][max]; printf("\ningrese LOS NUMEROS\n"); escalar(a); 11-Determine si una matriz de números enteros llenada por el usuario es una matriz Nula. Una matriz es nula si todos sus elementos son cero. #define N 3 #define M 3 //LLENAR MATRIZ void llenar_matriz(int A[N][M]){ scanf("%d",&a[i][j]);
//VERIFICAR SI LA MATRIZ LLENADA ES NULA void verificar(int A[N][M]){ int i,j,cont=0; if(a[i][j]==0){ cont++; if(cont==n*m){ printf("la MATRIZ ES UNA MATRIZ NULA"); else{ printf("la MATRIZ ES UNA MATRIZ NO NULA"); int A[N][M]; printf("\ningrese LOS NUMEROS\n"); verificar(a); 12-Construya un programa en C que muestre por pantalla la matriz transpuesta de una ingresada por el usuario. #define N 3 #define M 3 //MATRIZ TRANSPUESTA void transpuesta(int A[N][M]){ scanf("%d",&a[i][j]); printf("\nla MATRIZ TRANSPUESTA\n"); int A[N][M];printf("INGRESE LOS NUMEROS\n"); transpuesta(a);
13-Se tiene una matriz cuadrada de orden N, compuesta por 1 s y 0 s, la cual representa una letra escaneada desde un texto, un 1 en la matriz representa escritura y un 0, no escritura. Se pide codifique una función en C que permita determinar si la letra representada en la matriz es una H. #define N 3 //LLENADO DEL VECTOR void llenar_matriz(int A[N][N]){ scanf("%d",&a[i][j]); //VERIFICACION DE QUE LA MATRIZ FORMA LA LETRA H void verificar(int A[N][N]){ int i,j,cont1=0,cont2=0,cont3=0,cont4=0,unos,ceros; if(a[i][0]==1 && A[i][N-1]==1){ cont1=cont1+2; for(j=1;j<n-1;j++){ if(a[(n-1)/2][j]==1){ cont2=cont2+1; for(i=0;i<(n-1)/2;i++){ for(j=1;j<n-1;j++){ if(a[i][j]==0){ cont3=cont3+1; for(i=(n+1)/2;i<=n;i++){ for(j=1;j<n-1;j++){ if(a[i][j]==0){ cont4=cont4+1; unos=cont1+cont2; ceros=cont3+cont4; if(unos==(3*n-2) && ceros==(n*n-3*n+2)){ printf("\nla MATRIZ FORMA LA LETRA H"); else{ printf("\nla MATRIZ --NO-- FORMA LA LETRA H");
int A[N][N]; printf("llene LA MATRIZ\n"); verificar(a); 14-Una agencia de venta de vehículos distribuye 15 modelos diferentes y tiene en su plantilla 10 vendedores. Se desea un programa que escriba un informe mensual de las ventas por vendedor y modelo, así como el número de automóviles vendidos por cada vendedor y el número total de cada modelo vendido por todos los vendedores. Asimismo, para entregar el premio al mejor vendedor, se necesita saber cuál es el vendedor que más coches ha vendido. /*Este programa no se ejecuta como corresponde... de todas formas lo adjunto, para dar una idea aproximada de como deberia ser. Este tipo de problemas es mejor resolverlo por estructuras.*/ int i,a,x,cont,suma,total,maximo,; int Mvendido,ventas[10],Modelos[15],Autos[50]; char b,vendedor[10],mejor; cont=0; Total=0; for(x=1;x<=15;x++){ Modelos[x]=x; for(x=1;x<=15;x++){ Autos[x]=0; for(i=0;i<10;i++){ printf("\nnombre del vendedor:");scanf("&s",&vendedor[i]); printf("\ncuantos autos fueron vendidos por el?:");scanf("%d",&ventas[i]); a=ventas[i]; Total=Total+a; if(a>0){ printf("\nmodelo vendido(entre 1 y 15):"); scanf("%d",&mvendido); for(x=1;x<=15;x++){ if(modelos[x]==mvendido){ Autos[x]=Autos[x]+1; maximo=ventas[0]; for(i=0;i<10;i++){ if(ventas[i]>maximo){ maximo=ventas[i]; mejor=vendedor[i]; for(i=0;i<10;i++){ b=vendedor[i]; a=ventas[i]; printf("\nnombre del vendedor: %s",b); printf("\nautos vendidos por el: %d",a);
printf("\n\nla cantidad de autos vendidos son %d",total); printf("\nel premio al mejor vendedor es para %s",mejor); 15-Una matriz cuadrada de orden N es diagonal dominante si cumple que >,, =1,2,3. Escriba una función que permita imprimir un mensaje adecuado si una matriz dada como parámetro es diagonal dominante o no. #define N 3 //LLENAR MATRIZ void llenar_matriz(int A[N][N]){ scanf("%d",&a[i][j]); //VERIFICAR SI LA MATRIZ ES DIAGONAL DOMINANTE int diagonal_dominante(int A[N][N]){ int i,j,suma,cont; cont=0; suma=0; if(i!=j){ suma=suma+abs(a[i][j]); if(abs(a[i][i]) > suma){ cont++; if(cont==n){ printf("\nla MATRIZ ES DIAGONAL DOMINANTE"); else{ printf("\nla MATRIZ NO ES DIAGONAL DOMINANTE"); int A[N][N]; printf("ingrese LOS NUMEROS\n"); diagonal_dominante(a);
16-Cuando el 80% o más de los elementos de una matriz cuadrada de orden N es nulo, entonces la matriz se denomina esparse (o matriz rala ). Escriba una función que permita retornar un 1 si una matriz dada es esparse, un 0 sino. #define N 3 //LLENADO DEL VECTOR void llenar_matriz(int A[N][N]){ int i,j,suma=0; scanf("%d",&a[i][j]); //VERIFICACION SI UNA MATRIZ ES RALA O NO int matriz_rala(int A[N][N]){ int i,j,cont,x,p; float y; cont=0; if(a[i][j]==0){ cont=cont+1; x=(int)n*n*0.8; y=(float)n*n*0.8; if((y-x)<0.5){ p=x; else{ p=x+1; if(cont>=p){ printf("\nla MATRIZ ES ESPARCE O RALA"); return 1; else if(cont<p){ printf("\nla MATRIZ--NO--ES ESPARCE O RALA"); return 0; int A[N][N]; printf("llene LA MATRIZ\n"); printf("\n\nla MATRIZ ES %d [1=esparse,0=no esparse]",matriz_rala(a));
17-Dada una matriz A, =, A es invertible ssi det(a) 0. Si existe, se puede calcular como =. Escriba una función que permita calcular y mostrar ( ) la inversa de una matriz si es que ella existe, o un mensaje apropiado en caso de no existir. #define N 2 //LLENADO DEL VECTOR void llenar_matriz(int A[N][N]){ int i,j,suma=0; scanf("%d",&a[i][j]); //SACAR EL DETERMINANTE DE LA MATRIZ 2X2 float determinante(int A[N][N]){ int i,j,det; det=a[0][0]*a[1][1]-a[0][1]*a[1][0]; return det; //INVERTIR LA MATRIZ void inversa(int A[N][N]){ float B[N][N]; if(determinante(a)!=0){ B[0][0]=A[1][1]/determinante(A); B[0][1]=-1*A[0][1]/determinante(A); B[1][0]=-1*A[1][0]/determinante(A); B[1][1]=A[0][0]/determinante(A); printf("[%f]",b[i][j]); if(determinante(a)==0){ printf("la MATRIZ INVERSA NO EXISTE"); int A[N][N]; printf("llene LA MATRIZ\n"); determinante(a); printf("\nla MATRIZ INVERSA ES\n"); inversa(a);