Intro_Progr_2_2011

Anuncio
Introducción a la programación (clave 115106, créditos 9)
Profesor Dr. Georgii Khachaturov
2. Programas simples
......
(continuación del capitulo 2)
2.1.3. Operadores y
algoritmos nuevos (clase
3):
Temas a aprender: operador if…else;
Implementaciones con ese operador: (i).
Algoritmo de redondeo; (ii) programa de
resolución de una ecuación cuadrática;
Ciclo do…while;
Implementaciones con ese operador: (i)
algoritmo de búsqueda de "épsilon de la
máquina"; (en clase)
(ii) Tarea: escribir programa que suma los
valores enteros de 1 hasta 100.
Clase 4
2.1.4
: más de Ciclo do…while:
sacar raíz cuadrada implementando el
algoritmo de aproximaciones sucesivas a
continuación:
1. Introducir de teclado valor de X para
sacar su raíz;
2. Inicializar aproximación inicial Y0 a la
raíz: Y0=X/2;
3. Aplicar la regla de aproximación
Yi+1=(Yi+X/Yi)/2 tantas veces como
sea necesario para que | Yi Yi+1|<0.000001
4. Imprimir último Yi como resultado del
programa
Aprender concepto de funciones:
sintaxis, parámetros formales, valor
que regresa, cuerpo de función,
operador return, llamada de una
función. Tarea: Modificar el programa
anterior de la raíz cuadrática de tal
manera que algunos sus partes estén
implementados mediante funciones (valor
absoluto, el paso iterativo, etc.)
2.2. (Clase 5). Temas a aprender:
Arreglos arreglos unidimensionales
y dos-dimensionales,
representación en memoria de un
arreglo dos-dimensional,
declaración de arreglo,
inicialización de valores de arreglo,
acceso a elementos de arreglo,
valores permitidos de máximo y
mínimo de índice de un elamento de
arreglo, ciclo tipo "for", sintaxis, y
significado de cada parte
construcción de elementos de
arreglo por una regla sencilla
mediante ciclo "for".
2.2.1(Clase 6) Temas a aprender:
1. Implementación del algoritmo
de ordenación "Burbuja"
mediante dos ciclos: "for" y
"do…while"
2. Construcción y
transformación algorítmica
de las matrices mediante
unas reglas simples tales
como transposición de una
matriz, o un giro por 90°.
3. Operador "switch"
operador de la asignación
condicionada, operadores ++, --, +=,
/= y similares, operadores de
comparición "==" y "!="
Consideramos otro ejemplo de un programa
simple, dedicado transponer una matriz:
/****** INTRODUCCION A COMPUTACION****/
// transponer matriz.c
# include <stdio.h>
main( )
{int i, j;
double buf, matriz[5][5];
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{matriz[i][j]=(i>j)?(double)j : 0;
printf("i= %i j= %i matriz[ %i][ %i]= %f\n",
i, j, i,j, matriz[i][j]);
}
for (i=0; i<5; i++)
for (j=i; j<5; j++)
{ buf= matriz[i][j];
matriz[i][j]=matriz[j][i];
matriz[j][i]=buf;
}
printf("\n\n");
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{
printf("i= %i j= %i matriz[ %i][ %i]= %f\n",
i, j, i,j, matriz[i][j]);
}
}
Intorducimos en el texto los comentarios a
las nuevas (para nosotros) construcciones
del programa.
/****** INTRODUCCION A COMPUTACION****/
// transponer matriz.c
# include <stdio.h>
main( )
{
//
La definición de dos varaibles enteros i y j:
int i, j;
// La definición de una varaible tipo "double" –
// doble flotante - buf y de la matriz
// del tamaño 5x5 con los elementos de tipo "double"
double buf, matriz[5][5];
// inicia el operador de bucle
// con sintaxis:
// for ( inicialización ;
//
condición para continuar bucle ;
//
operaciones despues del cuerpo de bucle)
// el operador "i++" es equivalente a i=i+1; (ver la descripción
// más correcta de "i++;" y "++i;" en libros de C)
for (i=0; i<5; i++)
// el cuerpo del bucle anterior es otro bucle:
for (j=0; j<5; j++)
{
//en el cuerpo del bucle interior se construyen
// y imprimen los elementos de "matriz"
//el siguiente operador tiene sintaxis
// variable=(condición a verificar)?
//
expreción 1 : expreción 2;
// Eso significa que variable obtiene valor de
// expreción 1 o de expreción 2 si cumple o no
// la condición a verificar, respectivamente.
matriz[i][j]=(i>j)?(double)j : 0;
// en contraste con "printf" del programa anterior
// el siguiente imprime unas variables
// la lista de variables a imprimir sale despues de las
// comillas, mientras lugares para ellos en la impresión
// se indica mediante el símbolo "%". Las letras "i" y "f"
// después de cada "%" indican los formatos entero y
// doble flotante de representación de las variables
// a imprimir
// Tarea: cambia el formato "f" a "i" y compara los
// resultados del programa
printf("i= %i j= %i matriz[ %i][ %i]= %f\n",
i, j, i, j, matriz[i][j]);
}
// transposición de la matriz:
for (i=0; i<5; i++)
for (j=i; j<5; j++)
//Tarea: Analiza que va a pasar si cambiar
// el operador anterior al siguiente:
// for (j=0; j<5; j++)
{ buf= matriz[i][j];
matriz[i][j]=matriz[j][i];
matriz[j][i]=buf;
}
// separar en impresión la matriz de entrada
// de la de la salida:
printf("\n\n");
// imprimir matriz transpuesta
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{
printf("i= %i j= %i matriz[ %i][ %i]= %f\n",
i, j, i,j, matriz[i][j]);
}
}
Los resultados de esa programa están presentados a
continuación:
}
printf("\n\n");
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{
printf("i= %i j= %i matriz[ %i][ %i]= %i\n",
i, j, i,j, (int)matriz[i][j]);
}
}
Abajo el mismo programa tiene unos
modificaciones solo en los operadores "printf":
/****** INTRODUCCION A COMPUTACION****/
// transponer matriz.c
# include <stdio.h>
main( )
{int i, j;
double buf, matriz[5][5];
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{matriz[i][j]=(i>j)?(double)j : 0;
printf("i= %i j= %i matriz[ %i][ %i]= %i\n",
i, j, i,j, (int) matriz[i][j]);
}
for (i=0; i<5; i++)
for (j=i; j<5; j++)
{ buf= matriz[i][j];
matriz[i][j]=matriz[j][i];
matriz[j][i]=buf;
Tarea: Acabas de conocer el operador "for".
1. Busca en libros y compara con "for" otros
operadores de bucle: "while", "do... while"
2. Busca en libros como va a funcionar operador
"for" con los campos de contol vacios:
.....
for( ; ; ){...}
.....
3. ¿Como funciona operador ?
.....
while(1)
{}
....
4. Intenta encontrar las respuestas a las preguntas
anteriores mediante el "Help" de RHIDE o de
TurboC (claro, que hay que saber ingles para ese)
5. Modifica el programa "matriz.c" de tal manera
que el efecto funcional no se cambia cuando tu
usas solo el operador de bucle "while" en lugar del
"for"
Tarea. Escribe un programa que
1. Genera una matriz A del tamaño NxN con los
elementos enteros iguales A[i][j]=i+j para i>N/2 y
A[i][j]=|i-j| en el caso contrario,
2. Imprime la,
3. Hace rotación de sus datos por 90° contra
dirección de reloj,
4. Y imprime la matriz de resultado.
Tarea. En la tarea anterior, supongamos que N<10.
Haz lo mismo bajo la especificación que los
elementos de cada renglón de las matrices se
imprimen en una sola línea. (Tienes 80 símbolos en
cada línea de la ventana de comandos) (Pista: usar
la secuencia de escape "\n" en printf solo después
de impresión de un renglón completo...)
Descargar