Sei sulla pagina 1di 17

Punteros

Son variables cuyo contenido son direcciones de memoria. En la mayora de los sistemas operativos actuales, se suele tratar de un nmero entero de cuatro u ocho bytes (32 o 64 bits). Todo objeto de un programa se debe situar en memoria principal. Cada objeto del programa tiene, por tanto, una posicin de memoria (aquella en la que comienza a almacenarse) que lo identifica. Los punteros se usan para almacenar posiciones (direcciones) de memoria de otros objetos del programa. Un puntero puede considerarse como una referencia a otro objeto del programa (una variable, una funcin). Los punteros son variables, exactamente igual que las dems. Se declaran junto con el resto, usando la siguiente sintaxis: 1Tipo_de_dato *identificador. Donde identificador es el nombre de la variable puntero y tipo_de_dato es el tipo de objeto cuya direccin se va a almacenar. Ejemplos: 1 Int *p; // Puntero a entero 2float *x, *y, *z; // Puntero a real 3struct Punto{ float x,y; 4 }; 5 *w; // Puntero a estructura 6Punto void *t; // Puntero Generico 7 Los punteros a void son un tipo especial de puntero que no estn asociados a un tipo particular

Operaciones sobre punteros


Sobre una variable puntero se pueden realizar una serie de operaciones que veremos a continuacin: - Direccin: el operador de direccin no es realmente uno que se aplique sobre las variables puntero (normalmente), sino sobre otros tipos de variable. ste operador, representado con el smbolo ampersand (&) obtiene la direccin de memoria de la variable a la que precede. As, si la variable entera w est almacenada en la posicin de memoria 32012, la operacin 1int *punt; 2punt= &w; asignar el valor 32012 a la variable punt. Indireccin: el operador de desreferenciacin o de indireccin s se aplica a valores de tipo puntero. ste operador se representa por un asterisco (*) y devuelve un valor del tipo apuntado por el operando. Este valor es el contenido en la posicin apuntada por el puntero. As, en el siguiente cdigo: 1float *p; 2float x=10; 3p= &x; 4cout<<*p<<endl;

el valor que se imprime es 10, ya que p apunta a la direccin de x. En general, si el puntero x apunta a un tipo de datos T, la expresin *x es de tipo T. Incremento, decremento: Los valores de tipo puntero se pueden incrementar y decrementar, siempre en valores enteros. Se admiten los operadores +, , ++ y . Resta de punteros: Se puede hallar la diferencia entre dos punteros, que es la distancia que separa las direcciones a las que apuntan en memoria. Impresin: Para mostrar el valor de un puntero.

Punteros y vectores/matrices
Hay que hacer unas cuantas consideraciones acerca de cmo entiende C los vectores: Para C, un vector es un puntero que apunta a una zona de memoria reservada en tiempo de compilacin. El nombre de un vector es un puntero al primer elemento del vector Cuando C analiza una expresin del tipo vector[indice] realmente la convierte a otra de tipo 1*(vector+indice) Un ejemplo que ilustra estos puntos: 1char cadena[80], *p; 2strcpy(cadena, "palabra"); 3 4p= cadena; 5cout<<cadena[5]<<t<<cadena<<endl; 6cout<<*(p+5)<<t<<p<<endl; Las dos ultimas lineas imprimen lo mismo. En cuanto a las matrices, C las almacena en memoria disponiendo sus elementos por filas de forma consecutiva. Sabiendo que las matrices se almacenan de forma contigua, una forma bastante comn de acceder a un elemento de una matriz bidimensional de FxC a partir de la posicin de inicio de la matriz es mediante la frmula siguiente: 1elemento[fila][columna]= *(puntero+(fila*C)+columna) Esto nos permitir, como veremos ms tarde, pasar matrices de cualquier tamao a una funcin.

Punteros y estructuras
Un puntero puede estar asociados a cualquier tipo de datos, includas estructuras (y, por supuesto,punteros). Cuando se tiene un puntero a estructura, se puede acceder a los campos de la misma directamente sobre el puntero, aplicando el operador >: 1 2 3 4 5 6
struct Punto { float x; float y; }; Punto var, *p; p= &var;

7 p->x=10; 8 p->y=12; cout<<p->x<<, <<p->y<<endl; 9 10

Ejercicios
1) Programa para intercambiar el valor de 2 variables numricas. 1 2 3 #include<iostream> 4 using namespace std; 5 6 void cambio(float *, float *); 7 int main() 8 { 9 float x,y; cout<<"Valor de x : "; 10 cin>>x; 11 cout<<"Valor de y : "; 12 cin>>y; 13 cambio(&x,&y); 14 cout<<"Nuevos datos"<<endl; cout<<"Valor de x : "<<x<<endl; 15 cout<<"Valor de y : "<<y<<endl; 16 system("pause"); 17 return 0; 18} 19 20void cambio(float *a, float *b) 21{ float temp; 22 temp = *a; 23 *a = *b; 24 *b = temp; } 25 26 27 2) Programa para ingresar el valor de un Punto en coordenadas Polares y reporte su equivalente en coordenadas cartesianas. 1 #include<iostream> #include<math.h> 2 3 using namespace std; 4 5 void ingreso(float *,float *); 6 void calculo(float,float,float *,float *); 7 void reporte(float,float); 8 9 int main() 10{ float r,t,x,y; 11 ingreso(&r,&t); 12 calculo(r,t,&x,&y);

reporte(x,y); 13 system("pause"); 14 return 0; 15} 16 17void ingreso(float *r, float *t) 18{ do{ 19 cout<<"Valor de r : "; 20 cin>>*r; 21 }while(*r<=0); 22 23 cout<<"Angulo en grados sexagesimales : "; cin>>*t; 24 } 25 26 void calculo(float r, float t, float *x, float *y) 27{ 28 t=t*M_PI/180; *x=r*cos(t); 29 *y=r*sin(t); 30 } 31 32void reporte(float x, float y) 33{ 34 cout<<"x = "<<x<<endl; cout<<"y = "<<y<<endl; 35 } 36 37 38 39 40 41 42

3) Ingrese 2 puntos del plano cartesiano y reporte la ecuacin de la recta que los contiene. 1 #include<math.h> 2 using namespace std; 3 void ingreso(float *,float *,float *, float *); 4 void calculo(float,float,float,float,float *,float *); 5 void reporte(float,float); 6 int main() 7 { 8 float x1,y1,x2,y2,m,b; ingreso(&x1,&y1,&x2,&y2); 9 calculo(x1,y1,x2,y2,&m,&b); 10 reporte(m,b); 11 system("pause"); 12 return 0; 13} 14 15void ingreso(float *x1, float *y1, float *x2, float *y2) 16{ cout<<"Primer Punto"<<endl; 17 cout<<"Valor de x : "; 18 cin>>*x1; cout<<"Valor de y : "; 19 cin>>*y1; 20 cout<<"Segundo Punto"<<endl; 21 cout<<"Valor de x : ";
#include<iostream>

cin>>*x2; 22 cout<<"Valor de y : "; 23 cin>>*y2; 24} 25void calculo(float x1, float y1, float x2, float y2,float *m,float *b) 26{ *m = (y2-y1)/(x2-x1); 27 28} *b = y1 - *m*x1; 29 30void reporte(float m, float b) 31{ cout<<"y = "<<m<<"x"; 32 if(b>0) 33 cout<<"+"<<b<<endl; 34 else 35 cout<<b<<endl; 36} 37 38 39 40 41 42 43 44

4) Hacer un programa para ingresar n valores reales en un arreglo y los muestre en la pantalla, adems reportar el mayor, el menor y el promedio 1 using namespace std; 2 3 #define MAX 100 4 void numDatos(int *n,char *mensaje); 5 void ingresoVector(float *v, int n,char *mensaje); 6 void reporteVector(float *v, int n, char *mensaje); float mayor(float *v, int n); 7 float menor(float *v, int n); 8 float promedio(float *v, int n); 9 10int main() 11{ float x[MAX]; 12 int n; 13 numDatos(&n,"Numero de elementos del arreglo : "); 14 ingresoVector(x,n,"Ingreso de datos del arreglo"); reporteVector(x,n,"Vector Ingresado"); 15 cout<<"El mayor : "<<mayor(x,n)<<endl; 16 cout<<"El menor : "<<menor(x,n)<<endl; 17 cout<<"El promedio es : "<<promedio(x,n)<<endl; 18 system("pause"); return 0; 19 } 20 21 numDatos(int *n,char *mensaje) 22void { 23 do{ 24 cout<<mensaje; cin>>*n; 25 }while(*n<=0 || *n>MAX); 26 } 27void ingresoVector(float *v, int n,char *mensaje)
#include<iostream>

28{ int i; 29 cout<<mensaje<<endl; 30 for(i=0;i<n;i++) 31 { cout<<"v["<<i<<"]:"; 32 cin>>*(v+i); 33 } 34} 35 36void reporteVector(float *v, int n, char *mensaje) 37{ 38 int i; 39 cout<<mensaje<<endl; for(i=0;i<n;i++) 40 cout<<*(v+i)<<endl; 41} 42 43float mayor(float *v, int n) 44{ int i; 45 float may; 46 may=*v; 47 for(i=0;i<n;i++) if(*(v+i)>may) 48 may=*(v+i); 49 return may; 50} 51 52float menor(float *v, int n) 53{ int i; 54 float men; 55 men=*v; 56 for(i=0;i<n;i++) 57 if(*(v+i)<men) men=*(v+i); 58 return men; 59 } 60 61float promedio(float *v, int n) 62{ 63 int i; float s=0; 64 for(i=0;i<n;i++) 65 s=s+*(v+i); 66 return s/n; 67} 68 69 70 71 72 73 74 75 76 77 78 79 80 81

5) Programa para ingresar 2 vectores de n elementos reales cada uno y reportar el producto escalar de ellos. 1 #include<iostream> 2 using namespace std; 3 4 #define MAX 100 5 6 void numDatos(int *n,char *mensaje); 7 void ingresoVector(float *v, int n,char mensaje[]); reporteVector(float *v, int n, char mensaje[]); 8 void float productoEscalar(float *x, float *y, int n); 9 10int main() 11{ float x[MAX],y[MAX]; 12 int n; 13 numDatos(&n,"Numero de elementos de los vectores : "); 14 cout<<"Primer Vector"<<endl; 15 ingresoVector(x,n,"Ingreso de datos del primer vector"); cout<<"Segundo Vector"<<endl; 16 ingresoVector(y,n,"Ingreso de datos del segundo vector"); 17 cout<<"El producto escalar es : "<<productoEscalar(x,y,n)<<endl; 18 system("pause"); 19 return 0; 20} 21 22void numDatos(int *n,char mensaje[]) 23{ do{ 24 cout<<mensaje; 25 cin>>*n; 26 }while(*n<=0 || *n>MAX); 27} 28 29void ingresoVector(float *v, int n,char *mensaje) { 30 int i; 31 cout<<mensaje<<endl; for(i=0;i<n;i++) 32 { 33 cout<<"v["<<i<<"]:"; 34 cin>>*(v+i); 35 } 36} 37 38void reporteVector(float *v, int n, char *mensaje) 39{ int i; 40 cout<<mensaje<<endl; 41 for(i=0;i<n;i++) cout<<*(v+i)<<endl; 42 43} 44 productoEscalar(float *x, float *y, int n) 45float { 46 int i; 47 float pe=0; for(i=0;i<n;i++) 48 pe=pe + *(x+i) * *(y+i); 49 return pe; 50} 51

52 53 54 55 56 57 58 59 6) Crear una funcin para calcular el nmero de caracteres de una cadena. 1 2 #include<iostream> 3 4 using namespace std; 5 6 int numCaracteres(char *); 7 8 int main() 9 { char cadena[80]; 10 cout<<"Ingrese cadena : "; 11 cin.getline(cadena,80); cout<<"El numero de caracteres de "<<cadena<<" es : 12 "<<numCaracteres(cadena)<<endl; 13 system("pause"); 14 return 0; 15} 16 17int numCaracteres(char *cad) 18{ int i=0; 19 while(*cad) 20 { 21 i++; cad++; 22 } 23 return i; 24 } 25 26 7) Ingresar una cadena que representa la hora como por ejemplo: 12:20:35 y obtener en variables enteras la hora, minutos y segundos, h=12, m=20 y s=35. 1 #include<iostream> using namespace std; 2 void obtenerEnteros(char *, int *,int *,int *); 3 void reporte(int,int,int); 4 5 int main() 6 { char hora[100]; 7 int h,m,s; 8 cout<<"Ingrese (hh:mm:ss) : "; 9 cin>>hora; 10 obtenerEnteros(hora,&h,&m,&s); 11 reporte(h,m,s); system("pause"); 12 return 0; 13}

14 15void obtenerEnteros(char *hora, int *h, int *m,int *s) 16{ *h=(*hora-48)*10+(*(hora+1)-48); 17 *m=(*(hora+3)-48)*10+(*(hora+4)-48); 18 *s=(*(hora+6)-48)*10+(*(hora+7)-48); 19} 20 21void reporte(int h, int m, int s) 22{ cout<<"Horas : "<<h<<endl; 23 cout<<"Minutos: "<<m<<endl; 24 cout<<"Segundos : "<<s<<endl; 25} 26 27 28 29 30 8) Programa para ingresar las coordenadas de 2 puntos del plano cartesiano. Reportar la distancia que hay entre ellos y la ecuacin de la recta que pasa por ellos. 1 2 3 #include<iostream> 4 #include<math.h> 5 using namespace std; struct Punto{ 6 float x; 7 float y; 8 }; 9 10void ingresoPunto(Punto *P,char *mensaje); 11float distancia(Punto P1, Punto P2); 12int main() 13{ 14 Punto P1, P2; 15 ingresoPunto(&P1,"Primer Punto"); 16 ingresoPunto(&P2,"Segundo Punto"); cout<<"La distancia entre los puntos es : "<<distancia(P1,P2)<<endl; 17 system("pause"); 18 return 0; 19} 20 21void ingresoPunto(Punto *P,char *mensaje) 22{ cout<<mensaje<<endl; 23 cout<<"Valor de x : "; 24 cin>>P->x; cout<<"Valor de y : "; 25 cin>>P->y; 26 } 27 28float distancia(Punto P1, Punto P2) 29{ 30 return sqrt(pow(P1.x-P2.x,2)+pow(P1.y-P2.y,2)); 31} 32 33

34 9) Hacer un programa para ingresar los nombres y las notas de los alumnos de Lenguaje de Programacin y se reporte: a) Una Lista en orden Alfabtico b) Una Lista en orden de Merito. 1 #include<iostream> #include<string.h> 2 3 using namespace std; 4 5 struct Alumno{ 6 char nombre[40]; float nota; 7 }; 8 9 void numAlumnos(int *n); 10void ingreso(Alumno *A, int n); 11void reporte(Alumno *A, int n); 12void ordenAlfabetico(Alumno *A, int n); 13void ordenMerito(Alumno *A, int n); 14 main() 15int { 16 Alumno A[100]; 17 int n; 18 numAlumnos(&n); 19 ingreso(A,n); ordenAlfabetico(A,n); 20 cout<<"Lista en orden alfabetico"<<endl; 21 reporte(A,n); 22 ordenMerito(A,n); 23 cout<<"Lista en orden de Merito"<<endl; 24 reporte(A,n); system("pause"); 25 return 0; 26} 27 28void numAlumnos(int *n) 29{ do{ 30 cout<<"Numero de alumnos : "; 31 cin>>*n; }while(*n<=0); 32 33} 34 35void ingreso(Alumno *A, int n) { 36 int i; 37 for(i=0;i<n;i++) 38 { cout<<"Datos del alumno"<<i+1<<endl; 39 cout<<"Nombre : "; 40 cin.ignore(); 41 cin.getline((A+i)->nombre,40); 42 do{ cout<<"Nota : "; 43 cin>>(A+i)->nota; 44 }while((A+i)->nota<0 || (A+i)->nota>20); 45 } 46} 47

48void reporte(Alumno *A, int n) 49{ int i; 50 for(i=0;i<n;i++) 51 cout<<(A+i)->nombre<<"t "<<(A+i)->nota<<endl; 52} 53 54void ordenAlfabetico(Alumno *A, int n) 55{ int i,j; 56 Alumno temp; 57 for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) 58 if(strcmp((A+i)->nombre,(A+j)->nombre)>0) 59 { 60 temp = *(A+i); 61 *(A+i) = *(A+j); *(A+j) = temp; 62 } 63 64} 65 66void ordenMerito(Alumno *A, int n) 67{ 68 int i,j; Alumno temp; 69 for(i=0;i<n-1;i++) 70 for(j=i+1;j<n;j++) 71 if((A+i)->nota<(A+j)->nota) 72 { 73 temp = *(A+i); *(A+i) = *(A+j); 74 *(A+j) = temp; 75 } 76} 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 10) Hacer un programa para generar una matriz de f filas y c columnas y calcular el mayor, el menor y el promedio. 1 2 3 4 5 6
#include<iostream> using namespace std; #define MAX 10 void ordenMatriz(int *f, int *c); void ingresoMatriz(float *M, int f, int c);

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

void reporteMatriz(float *M, float mayor(float *M, int f, float menor(float *M, int f, float promedio(float *M, int

int f, int c); int c); int c); f, int c);

int main() { float M[MAX][MAX]; int f,c; ordenMatriz(&f,&c); ingresoMatriz(&M[0][0],f,c); cout<<"Matriz ingresada"<<endl; reporteMatriz(&M[0][0],f,c); cout<<"El mayor es : "<<mayor(&M[0][0],f,c)<<endl; cout<<"El menor es : "<<menor(&M[0][0],f,c)<<endl; cout<<"El promedio : "<<promedio(&M[0][0],f,c)<<endl; system("PAUSE"); return 0; }

void ordenMatriz(int *f, int *c) { do{ cout<<"Numero de filas : "; cin>>*f; }while(*f<=0 || *f>MAX); do{ cout<<"Numero de columnas : "; cin>>*c; }while(*c<=0 || *c>MAX); } void ingresoMatriz(float *M, int f, int c) { int i,j; for(i=0;i<f;i++) for(j=0;j<c;j++) { cout<<"M["<<i<<"]["<<j<<"]:"; cin>>*(M+c*i+j); } } void reporteMatriz(float *M,int f, int c) { int i,j; for(i=0;i<f;i++) { for(j=0;j<c;j++) cout<<*(M+c*i+j)<<"t"; cout<<endl; } } float mayor(float *M, int f, int c) { int i,j; float may=*M; for(i=0;i<f;i++) for(j=0;j<c;j++) if(*(M+c*i+j)>may) may=*(M+c*i+j); return may; }

61 62 float menor(float *M, int f, int c) 63 { int i,j; 64 float men=*M; 65 for(i=0;i<f;i++) for(j=0;j<c;j++) 66 if(*(M+c*i+j)<men) 67 men=*(M+c*i+j); 68 return men; 69 } 70 71 float promedio(float *M, int f, int c) 72 { int i,j; 73 float s=0; 74 for(i=0;i<f;i++) 75 for(j=0;j<c;j++) s=s+*(M+c*i+j); 76 return s/(f*c); 77 78 } 79 80 81 #include<iostream> 82 83 using namespace std; 84 85 #define MAX 10 86 87 void ordenMatriz(int *f, int *c); 88 void ingresoMatriz(float *M, int f, int c); void reporteMatriz(float *M, int f, int c); 89 void sumaDeFilas(float *M, int f, int c,float *sf); 90 void sumaDeColumnas(float *M, int f, int c,float *sc); 91 92 93 int main() 94 { float M[MAX][MAX],sf[MAX],sc[MAX]; 95 int f,c,i,j; 96 ordenMatriz(&f,&c); 97 ingresoMatriz(&M[0][0],f,c); cout<<"Matriz ingresada"<<endl; 98 reporteMatriz(&M[0][0],f,c); 99 sumaDeFilas(&M[0][0],f,c,sf); 100 for(i=0;i<f;i++) 101 cout<<"suma de fila "<<i<<" = "<<*(sf+i)<<endl; 102 sumaDeColumnas(&M[0][0],f,c,sc); for(j=0;j<c;j++) 103 cout<<"suma de columna "<<j<<" = "<<*(sc+j)<<endl; 104 system("PAUSE"); 105 return 0; 106} 107 108void ordenMatriz(int *f, int *c) 109{ 110 do{ cout<<"Numero de filas : "; 111 cin>>*f; 112 }while(*f<=0 || *f>MAX); 113 do{ cout<<"Numero de columnas : "; 114
cin>>*c;

115 }while(*c<=0 || *c>MAX); 116} 117 void ingresoMatriz(float *M, int f, int c) 118{ 119 int i,j; for(i=0;i<f;i++) 120 for(j=0;j<c;j++) 121 { 122 cout<<"M["<<i<<"]["<<j<<"]:"; 123 cin>>*(M+c*i+j); 124 } 125} 126void reporteMatriz(float *M,int f, int c) { 127 int i,j; 128 for(i=0;i<f;i++) { 129 for(j=0;j<c;j++) 130 cout<<*(M+c*i+j)<<"t"; 131 cout<<endl; 132 } 133} 134 135void sumaDeFilas(float *M, int f, int c,float *sf) 136{ int i,j; 137 for(i=0;i<f;i++) 138 { 139 sf[i]=0; for(j=0;j<c;j++) 140 *(sf+i)=*(sf+i)+ *(M+c*i+j); 141 } 142} 143 144void sumaDeColumnas(float *M, int f, int c,float *sc) 145{ int i,j; 146 for(j=0;j<c;j++) 147 { 148 sc[j]=0; 149 for(i=0;i<f;i++) *(sc+j)=*(sc+j)+*(M+c*i+j); 150 } 151 } 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168

169 170 171 172 173 174 175 176 177 178 179 180 181

Ejercicios Propuestos
1)Hacer un programa para ingresar 2 fracciones y reporte su suma, resta, multiplicacin y divisin. 2) Ingresar 2 nmeros complejos y reportar su suma, resta, multiplicacin y divisin 3) Ingresar los coeficientes de una ecuacin de segundo grado y devuelva las races reales de la ecuacin. 4) Ingresar los catetos de un triangulo rectngulo y crear una funcin que calcule el area del triangulo y el rea. 5) Escriba una funcin que tome como parmetros el da, mes y ao y retorne la fecha del da siguiente. 6) Leer un punto en coordenadas cartesianas y convertir a coordenadas polares luego muestre las coordenadas polares desde main. 7) Escribir un programa en C que lea una secuencia de caracteres ASCII y escriba una secuencia de caracteres codificados. Si el carcter es una letra o dgito, ser reemplazado por el siguiente carcter en el conjunto de caracteres, excepto Z que ser reemplazado por A, z por a y 9 por 0. Por tanto, 1 se transforma en 2, C en D, p en q, etc. Cualquier carcter que no sea letra o dgito ser reemplazado por un punto (.). 8) Escribir una funcin int busca_caracter(Cadena cad, char c) que cuente el nmero de apariciones de un carcter c en una cadena cad, devolvindolo como resultado. 9) Escribir una funcin que reciba como parmetro una cadena de caracteres y elimine los espacios en blanco del final de la cadena. 10) Leer 2 cadenas desde teclado y decir si la segunda cadena est contenida en la primera y en dicho caso, indicar a partir de qu posicin. 11) Crear un programa que compruebe si un texto introducido por teclado es o no un palndromo. 12) Programa para ingresar n valores reales en un vector y luego invierta el vector. 13) Programa para ingresar 2 vectores de n elementos reales cada uno y reportar el producto escalar de ellos..

14) Ingresar n nmeros en un vector y mostrar luego, primero la lista de los nmeros pares que fueron ingresados y luego la lista de los nmeros negativos 15) Ingresar n enteros en un vector A y otros n enteros en un vector B y mostrar la lista de enteros del vector C. Donde cada C[i]=A[i]+B[i] 16) Ingresar un vector de n elementos. Mostrar la lista de nmeros menores al promedio. 17) Ingresar una matriz cuadrada de orden n y reportar si es simtrica. Recordar que una matriz es simtrica si se cumple la condicin: a[i][j]=a[j][i] 18) Programa para ingresar una matriz de f filas y c columnas, y que se haga lo siguiente: a) Ingresar un nmero de fila y eliminarla de la matriz. b) Ingresar un nmero de columna y eliminarla de la matriz. c) Ingresar un nmero de fila e insertar una fila en la matriz. d) Ingresar un nmero de columna e insertar una columna en la matriz. e) Intercambiar 2 filas de la Matriz. El nmero de las filas a intercambiar debe ingresarse. f) Intercambiar 2 columnas de la Matriz. El nmero de las columnas a intercambiar debe ingresarse. g) Ordenar las filas de una matriz h) Ordenar las columnas de una matriz 19) El curso de Computacin tiene n alumnos y se rinden 4 exmenes. Escribir un programa que reporte lo siguiente: a) El promedio de calificaciones de cada alumno. b) El promedio de cada Examen c) El alumno que obtuvo el mejor Promedio d) El examen que tuvo el mayor promedio de calificacin. 20) Hacer un programa para invertir las columnas de una matriz (Los elementos de la primera columna se intercambian con los de la ultima, los de la segunda con los de la penltima y as sucesivamente). 21) Escribir un programa que genere un cuadrado mgico. Un cuadrado mgico se representa por una matriz cuadrada de orden n, impar y contiene los nmeros comprendidos entre 1 y n*n. En un cuadrado mgico la suma de cualquiera de las filas, columnas y diagonales principales siempre es la misma. El cuadrado mgico se genera aplicando el siguiente algoritmo: a) El primer numero 1 se coloca en la celda central de la primera fila. b) El siguiente nmero se coloca en la celda de la fila anterior y columna posterior. c) La fila anterior al primero es el ltimo. La columna posterior a la ltima es la primera. d) Si el nmero es un sucesor de un mltiplo de n, no aplique la regla 2. Coloque el nmero en la celda de la misma columna de la fila posterior. 22) Ingresar el nombre, nota del Examen1, nota del Examen2 y nota de Trabajos de n alumnos si los pesos de los exmenes son 0.25 y del trabajo 0.5 encontrar el promedio ponderado de cada alumno y reportarlos en orden de Merito, adems reportar el Promedio general. 23) Ingresar los datos de n clientes de un banco (cdigo, nombre, saldo). Haga un men donde se pueda crear una Cuenta, consultar Saldo, depositar una cantidad, retirar una cantidad y Mostrar todas las cuentas ingresadas. 24) Los trminos de un polinomio los podemos colocar como una estructura (coeficiente y exponente). Ingresar el grado y los trminos de un polinomio y Escriba una funcion que encuentre el valor numrico del polinomio.

25) Hacer un programa para ingresar los datos de n trabajadores (cdigo, nombre, valor por hora, horas trabajadas). Hacer las siguientes operaciones: - Mostrar los Trabajadores ordenados por nombre, - Mostrar los Trabajadores ordenados por sueldo - Ingresar un codigo de un trabajador y mostrar todos sus datos. 26) Se tiene una serie de fracciones (numerador y denominador).Calcule la suma de todas estas fracciones y muestre el resultado. La respuesta debe estar simplificada.

Potrebbero piacerti anche