Vous êtes sur la page 1sur 13

Practica de programacin de sistema: arrays y procesos. Puntuacin 15 pts. (EF) Ejercicios resueltos y Ejercicios propuestos.

Enunciado de la/s practica/s. 1. Corrija los errores encontrados en los programas que se muestran 2. Envi una carpeta comprimida (a la plataforma en programas C++ resueltos) con los ejecutables y los pseudocdigos en Word. Nota: ejemplo de cmo hacer los pseudocdigos Supongamos un algoritmo que lea las coordenadas de tres puntos y los mueva tres puntos en la coordenada x y escriba el resultado en algn dispositivo de salida: ALGORITMO lee_tres_vertices ENTRADA: las coordenadas (x,y) de tres puntos SALIDA: las coordenadas (x,y) de los tres puntos movidos 3 puntos hacia la derecha. VARIABLES: i:entera x,y: real INICIO PARA i=1 HASTA 3 CON INCREMENTO +1 ESCRIBE "Abscisa del punto nmero ", i LEER x ESCRIBE "Ordenada del punto nmero ", i LEER Y ESCRIBE "El punto es (" x+3","y")" FIN_PARA FIN ________________________________________________ ____________________________________ 3. Crear los programas propuestos c++ y los pseudocdigo en word, tienen un valor de 15 pts. en la nota EF (Examen final). La fecha de envi es el da asignado por la Universidad en el calendario de examen/es. Carpeta de envi programas C++ propuesto 4. Investigue las instrucciones que no conozca. Forman parte del material terico. 5. La prueba terica es el da que asigne la

Universidad en el calendario de exmenes final/es. 6. Fecha de revisin del analizador lxico: Jueves 01 de diciembre 2011 PRACTICA DE LOS EJERCICIOS RESUELTOS EN C++ /*Dado el vector T de tamao n. Si el tamao es par invertir los elementos de la mitad de los elementos Ejemplo: v=[1][2][3][4][5][6] v(invertido)=[3][2][1][6][5] [4] */ #include<stdioh> #include<conio.h> void llenar (int v [], int d) { for (int i = 1 ; i <= d ; i++) { printf ("Inserte pos.[%d]: ",i); scanf("%d",&V[i]); } } void mostrar (int V [], int d) { for (int i = 1 ; i <= d ; i++) { printf ("[%d]",V[i]); } } void invierte (int v [], int d) { int aux1; int fin1 = d / 2; for (int i = 1 ; i <= (d / 2) / 2 ; i++) { aux1 = V [i]; V [i] = V [fin1]; V [fin1] = aux1; fin1--; }

fin1 = d; for (int j = (d / 2) + 1 ; j <= (d / 2) + 1 ; j++) { aux1 = V [j]; V [j] = V [fin1]; V [fin1] = aux1; fin1--; } } int mai () { int V[20]; int d; printf ("Inserte dimen. del vector: "); scanf("%d",&d); llenar (V, d); printf ("\nVECTOR ORIGINAL: \n"); mostrar (V, d); printf ("\n\nVECTOR LUEGO DE LA INVERSION: \n"); invierte (V, d); mostrar (v, d); getch(); } /*Generar la matriz: [01][02][03][04] [08][07][06][05] [09][10][11][12] */ include<stdio.h> #include<conio.h> void llenar (int M[20][20], int f, int c) { int k=1; for (int i=1;i<=f;i++) { if (i%2!=0) { for (int j=1;j<=c;j++) { M[i][j]=K; k++; } }

else { for (int j=c;j>=1;j--) { M[i][j]=k; k++; } } } } void mostrar (int M[20][10], int f, int c) { for (int i=1;i<=f;i++) { printf("\n"); for (int j=1;j<=c;j++) { printf("[%d] ",M[i][j]); } } } int main () { int f, c; int M[20][20]; print("Inserte filas de M: "); scanf("%d",&f); printf("Inserte cols. de M: "); scanf("%d",&c); llenar(M, f, c); mostrar(M, f, c); getch(); } // Dadas dos matrices A y B intercambiar los minimos de A con los maximos de B #include <stdio.h> #include <conio.h> void llenar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++)

{ printf ("Inserte pos[%d][d]: ",i,j); scanf("%d",&M[i][j]); } } } void mostrar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { printf("\n"); for (int j = 1 ; j <= c ; j++) { printf ("[%d]",M[i][j]); } } } int menor (int M[20][20], int f, int c) { int men = M [1] [1]; for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { if (M [i] [j] < men) men = M [i] [j]; } } return (men); } int maximo (int M[20][30], int f, int c) { int max = M [1] [1]; for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { if (M [i] [j] > max) max = M [i] [j];

} } return (max); } void intercambiar (int A[20][20], int fa, int ca, int B[20][20], int fb, int cb) { int min_a = menor (A, fa, ca); int max_b = maximo (B, fb, cb); //para cambiar los minimos de A con los maximos de B for (int i = 1 ; i <= fa ; i++) { for (int j = 1 ; j <= ca ; j++) { if (A[i][j] == min_a) A[i][j]=max_b; } } //para intercambiar los maximos de con los minimos de A for (int i = 1 ; i <= fb ; i++) { for (int j = 1 ; j <= cb ; j++) { if (B[i][j] == max_b) B[i][j]=min_a; } } } int main () { int A [20] [20]; int B [20] [20]; int fa, ca, fb, cb; printf ("Insert filas de A: "); scanf("%d",&fa); printf ("Insert columnas de A: "); scanf("%d",&ca); printf ("Insert filas de B: "); scanf("%d",&fb); printf ("Insert columnas de B: "); scanf("%d",&cb); //lectura de matrices printf ("\nINSERTANDO DATOS EN MATRIS A: \n");

llenar (A, fa, ca); printf ("\nINSERTANDO DATOS EN MATRIS B: \n"); llenar (B, fb, cb); printf ("\nMATRICES ORIGINALMENTE INSERTADAS: "); mostrar (A, fa, ca); printf ("\n"); mostrar (B, fb, cb); printf ("\n"); //intercambiando elementos intercambiar (A, fa, ca, B, fb, cb); printf ("\nMATRICES DESPUES DEL INTERCAMBIO:"); mostrar (A, fa, ca); printf ("\n"); mostrar (B, fb, cb); getch() // programa que lista procesos #include <cstdlib> #include <iostream> #include <cstdlib> #include <windows.h> #include <psapi.h> #include <stdio.h> /* /* Listar procesos C++ */ using namespace std; void procesos(){ DWORD Procesos[200], PN, cProcesos; unsigned int i; TCHAR procsnombre[200] = TEXT(""); //if ( !EnumProcesses( Procesos, sizeof(Procesos), &amp;PN ) ) if ( !EnumProcesses( Procesos, sizeof(Procesos), &PN ) ) return; cProcesos = PN / sizeof(DWORD); for ( i = 0; i < cProcesos; i++ ) { HANDLE hProcesos = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, Procesos[i] ); if (NULL != hProcesos ){

GetModuleBaseName( hProcesos, NULL, procsnombre, sizeof(procsnombre)/sizeof(TCHAR) ); } printf(TEXT(" %s, PID = %u \n"), procsnombre, Procesos[i]); CloseHandle( hProcesos ); } } int main(int argc, char *argv[]) { procesos(); system("PAUSE"); return EXIT_SUCCESS; } ______________________________________________________ Nota: para que el programa funcione es necesario. 1. Por ejemplo en DEV C++ o CODE::BLOCKS 10.05, solamente tienen que hacer lo siguiente para que el ejemplo mas arriba funcione perfectamente: 1)En la linea siguiente: if ( !EnumProcesses( Procesos, sizeof(Procesos), &PN ) ) En realidad deben reemplazar el ampersand (&) por & y les debera quedar as: if ( !EnumProcesses( Procesos, sizeof(Procesos), &PN ) ) Se ha tratado de un error de transcripcin HTML. Respecto de lo segundo: 2)undefined reference to EnumProcesses Falta linkear la librera: Por ejemplo en CODE BLOCKS 10.05 En Project -> Properties -> Projects Build options -> Linker settings -> Agregan psapi y LISTO el programa funcionar psapi

EJERCICIOS PROPUESTOS. DE ACUERDO A LOS SIGUIENTES PSEUDOCDIGO ELABORE LOS PROGRAMAS EN C++ o CUALQUIER LENGUAJE DE PROGRAMACION QUE USTED DOMINE. LE RECUERDO enviar los ejecutable EN UNA CARPETA COMPRIMIDA. Ejercicio 1. Crear un array unidimensional de 20 elementos con nombres de personas. Visualizar los elementos de la lista debiendo ir cada uno en una fila distinta. PROGRAMA nombres ENTORNO: DIMENSIONA datos[ 20 ] i <- 1 ALGORITMO: Borrar_pantalla( ) fi <- 10 MIENTRAS i < 21 HACER EN fi,10 ESCRIBIR "Nombre: " EN fi, 18 LEER datos[ i ] i <- i + 1 FINMIENTRAS Borrar_pantalla( ) i <- 1 fi <- 3 EN 1,20 ESCRIBIR "Elementos de la lista" MIENTRAS i < 21 HACER EN fi,28 ESCRIBIR datos[ i ] fi <- fi + 1 i <- i + 1 FINMIENTRAS FINPROGRAMA

Ejercicio2 Hacer un programa que lea las calificaciones de un alumno en 10 asignaturas, las almacene en un vector y calcule e imprima su media. PROGRAMA notamedia ENTORNO: DIMENSIONA notas[ 10 ] suma <- 0 media <- 0 ALGORITMO: Borrar_pantalla( ) fi <- 7 PARA i DESDE 1 HASTA 10 HACER EN fi,15 ESCRIBIR "Nota " EN fi,20 ESCRIBIR i EN fi,21 ESCRIBIR ": " EN fi,23 LEER notas[ i ] fi <- fi + 1 FINPARA PARA i DESDE 1 HASTA 10 HACER suma <- suma + notas[ i ] FINPARA media <- suma / 10 EN 20,20 ESCRIBIR "Nota media: " EN 20,32 ESCRIBIR media FINPROGRAMA Ejercicio3 Usando el segundo ejemplo, hacer un programa que busque una nota en el vector. PROGRAMA buscar ENTORNO: i <- 0 num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Nota a buscar: " LEER num ITERAR

i <- i + 1 SI notas[ i ] = num O i = 10 ENTONCES SALIR FINSI FINITERAR SI notas[ i ] = num ENTONCES ESCRIBIR "Encontrado en posici&oacute;n: " ESCRIBIR i SINO ESCRIBIR "No existe esa nota" FINSI FINPROGRAMA Ejercicio4 Generar una matriz de 4 filas y 5 columnas con numeros aleatorios entre 1 y 100, e imprimirla. PROGRAMA matriz ENTORNO: DIMENSIONAR A[ 4, 5 ] i <- 1 fi <- 10 co <- 15 ALGORITMO: Borrar_pantalla( ) EN 6,25 ESCRIBIR "Elementos de la matriz" MIENTRAS i <= 4 HACER j <- 1 MIENTRAS j <= 5 HACER A[ i, j ] <- Int( Rnd( ) * 100 ) + 1 EN fi,co ESCRIBIR A[ i, j ] co <- co + 5 j <- j + 1 FINMIENTRAS co <- 15 fi <- fi + 2 i <- i + 1 FINMIENTRAS FINPROGRAMA

Ejercicio5 Generar una matriz de 4 filas y 5 columnas con nmeros aleatorios entre 1 y 100, y hacer su matriz transpuesta. PROGRAMA transpuesta ENTORNO: DIMENSIONAR A[ 4, 5 ] DIMENSIONAR B[ 5, 4 ] fi <- 8 co <- 10 fit <- 8 cot <- 40 i <- 1 ALGORITMO: Borrar_pantalla( ) EN 6,15 ESCRIBIR "Matriz uno" EN 6,45 ESCRIBIR "Transpuesta" MIENTRAS i <= 4 HACER j <- 1 MIENTRAS j <= 5 HACER A[ i, j ] <- Int( Rnd( ) * 100 ) + 1 B[ j, i ] <- A[ i, j ] EN fi,co ESCRIBIR A[ i, j ] EN fit,cot ESCRIBIR B[ j, i ] co <- co + 4 fit <- fit + 2 j <- j + 1 FINMIENTRAS fi <- fi + 2 co <- 10 fit <- 8 cot <- cot + 4 i <- i + 1 FINMIENTRAS FINPROGRAMA Ejercicio 6. Elabore los pseudocdigos y los programas fuentes

1. Crear una pequea aplicacin que cree un hilo: El hilo deber, constantemente, escribir por pantalla hilo. El proceso que crea el hilo (padre), deber escribir, constantemente, padre. 2. Crear un programa que cree tres procesos hijos, en el que cada uno de ellos har un bucle para escribir en pantalla un nmero del 1 al 100, en grupos de 10 (cada diez nmeros), especificando en cada iteracin el pid del hijo que la realiza.

Vous aimerez peut-être aussi