PDF de programación - Programación para físicos

Imágen de pdf Programación para físicos

Programación para físicosgráfica de visualizaciones

Publicado el 8 de Septiembre del 2018
472 visualizaciones desde el 8 de Septiembre del 2018
220,1 KB
43 paginas
Creado hace 12a (21/02/2012)
Programación para físicos

Juan Carlos Córdova, Enrique Pazos

21 de febrero de 2012

Índice general

1 Preparando un programa

2 Entrada, salida, tiempo

3 Funciones en C

4 Funciones recursivas en C

5 Estructuras y funciones relacionadas

6 Sobrecarga de operadores y programación modular

7 Punteros, vectores y asignación dinámica de memoria

8

Introducción a clases en C++

9 Operaciones con matrices

2

5

9

13

17

24

28

33

38

1

Experimento #1:

Preparando un programa

Objetivos

– Comprender los pasos involucrados en la creación de un programa.

– Escribir, guardar, compilar y ejecutar un programa sencillo.

Descripción

En este experimento se desea escribir sobre la pantalla de la computadora
una frase sencilla, “Hola mundo!”. Si bien esto no resuelve ninguna pregunta
trascendental, sí ejemplifica el mecanismo de producción de cualquier programa
usando una plataforma dada.

Procedimiento

Paso 1 Utilizando un editor adecuado, escriba el siguiente programa y guarde-
lo como un archivo de tipo ASCII (American Standard Code for Information
Interchange) que termine con una extensión “.c”. (Por ejemplo, el nombre del
archivo podría ser “hola.c”)

#include <stdio.h>
/* Este programa envia un saludo
al mundo */

void main()
{

printf("Hola mundo!\n");

}

Paso 2 Compile el programa. El procedimiento específico depende de la platafor-
ma que se esté utilizando. En Linux o en Unix existen varias posibilidades, de
las cuales dos se muestran a continuación:

cc hola.c -o hola <Enter>

2

o

gcc hola.c -o hola

<Enter>

Paso 3 Ahora ejecute el programa:

hola <Enter>

Es posible que necesite escribir

./hola <Enter>

Paso 4 Si nos interesara guardar los resultados del programa en un archivo,
digamos hola_out.txt, podríamos usar el comando de redirección de Unix o
Linux de la siguiente forma:

./hola > hola_out.txt <Enter>

De esta manera se ejecuta el programa y la salida (si hay alguna) va a dar al
archivo llamado hola_out.txt. Para verificar el contenido de este archivo puede
usarse el comando cat de Unix (type en DOS), o se podría abrir el archivo usando
un editor de texto convencional.

En el caso de usar el comando cat:

cat hola_out.txt <Enter>

esto desplegaría, sobre la pantalla del monitor, el contenido del archivo.

Impresión

1. Imprima el programa.

2. Imprima la salida del programa.

Preguntas

1. El símbolo # se utiliza en C para indicarle al compilador que haga algo
antes de proceder a compilar el programa. Así # introduce una directiva
al compilador. En particular, cuál es la función de la directiva #include?

2. Qué diferencia hay entre #include <stdio.h> e #include "stdio.h"?

3. Deben las directivas terminarse con un “;”?

4. Qué funciones están definidas en el encabezado stdio.h?

5. Explique el uso del comando printf().

3

6. En el comando de linea cc hola.c -o hola, cuál es el objeto de la opción

-o? Y si hubiese una opción -l?

7. Investigue el propósito y uso de los siguientes operadores, funciones y

palabras clave:

int
sizeof()
¿

long
scanf()
¡

float
void
!=

boolean

double
return =
!

clock()

char
==

8. Investigue el uso de la construcción if, elseif, else.

9. Investigue el uso del iterador for.

10. Investigue el uso de while.

11. Qué objeto tienen los símbolos /* y */?

4

Experimento #2:

Entrada, salida, tiempo

Objetivos

– Determinar algunos parámetros del compilador de C.

– Aprender a ingresar información del teclado.

– Familiarizarse con algunas funciones de tiempo.

– Aprender a determinar tiempos de porciones específicas de un programa.

Descripción

En este experimento tenemos tres cosas por resolver: determinar algunos
parámetros del compilador de C, calcular el cuadrado de un número, determinar
el tiempo que le toma a la máquina obtener este resultado.

Aquí se utilizan varias de las funciones investigadas en el experimento anteri-
or, en la sección de preguntas, para determinar algunos parámetros de operación
del compilador de C. Estamos interesados en particular en el número de bytes
que una variable de los siguientes tipos ocupa: char, int, long, boolean, float,
double, y punteros.

A diferencia del programa del Experimento 1, este programa solicita infor-
mación del teclado, la procesa, e imprime el resultado. De esta manera tenemos
un ejemplo sencillo de lo que la mayor parte de programas hacen: tomar infor-
mación, manipularla, y dar a conocer los resultados de la manipulación.

Además de ésto, estamos interesados en saber en cuánto tiempo se realiza
el procesamiento para lo cual haremos uso de la función clock() definida en
el archivo time.h. Esta función da el tiempo en “pulsaciones de reloj”, para
relacionar esto con segundos se debe saber cuántas “pulsaciones” caben en un
segundo. El símbolo CLOCKS_PER_SEC definido en time.h nos da esta informa-
ción.

Así, lo que deseamos es un programa que, en la primera parte, imprima el
número de bytes ocupados por variables de tipo char, int, long, boolean, float,
double, y punteros; que imprima también cuántas pulsaciones de reloj componen
un segundo; que ingrese un entero del teclado, lo eleve al cuadrado, imprima el
resultado y el tiempo que le toma a la máquina en calcularlo.

5

Procedimiento

Quizá resulte conveniente dividir este problema en varios programas que
resuelvan distintos aspectos que aquí nos competen. Por ejemplo, parametros.c
podría imprimir los parámetros en los que estamos interesados ya que esto, en
sí, no tiene relación directa con el cálculo del cuadrado de un entero.

Otro programa, granularidad.c, puede utilizarse para determinar la resolu-
ción de la función clock(), de esta manera sabríamos cuál es el tiempo mínimo
que tenemos esperanza de medir.

Por último podríamos escribir cuadrado int.c, cuadrado long.c, cuadrado float.c

y cuadrado double.c, que aceptan un número (de tipo int, long, float, y double
respectivamente), lo elevan al cuadrado, imprimen el número original, su cuadra-
do, y el tiempo que le toma (tanto en pulsos de reloj como en segundos) hacer
esta operación.

Luego, podríamos proceder como se describe a continuación:

Paso 1 Escriba parametros.c, que imprime el número de bytes ocupados por
variables de tipo char, int, long, boolean, float, double, y punteros; y también
cuántas pulsaciones de reloj componen un segundo; Las principales funciones
usadas en este programa son printf() y sizeof().

Paso 2 Escriba granularidad.c de manera que se pueda determinar el número
más pequeño de pulsaciones a las que es sensible la función clock(). Esto se
puede lograr usando un enunciado while que continuamente encuesta clock()
hasta que encuentra un valor nuevo: la diferencia entre el valor de clock() justo
antes de comenzar el while y el valor al salir de éste es la granularidad. Imprima
ésta.

Paso 3 Escriba cada una de las funciones cuadrado int.c, cuadrado long.c,
cuadrado float.c y cuadrado double.c, que aceptan un número (de tipo int, long,
float, y double respectivamente), lo elevan al cuadrado, imprimen el número
original, su cuadrado, y el tiempo que le toma (tanto en pulsos de reloj como
en segundos) hacer esta operación.

Para hacer ésto, y en base a la granularidad de la función clock() es muy
posible que sea necesario repetir la operación de elevar al cuadrado un número
suficiente de veces como para que se tomen un tiempo suficientemente grande
que la función clock() pueda cronometrar. Si la resolución de clock() es de
por ejemplo 10000 pulsos, repita la operación de elevar al cuadrado (o en general
cualquier función que nos interese cronometrar) tantas veces como para requerir
un tiempo unas 10 veces mayor, de esta manera el tiempo total empleado es
exacto hasta en un 10 %. Luego, al dividir este tiempo por el número de veces
que se repitió la operación se obtiene el tiempo que buscamos.

En este último programa, se hará uso de clock() para tomar tiempos y de
un iterador for para repetir la operación que buscamos cronometrar, además

6

de scanf() para obtener el número que deseamos cuadrar y printf() para
imprimir resultados.

La diferencia entre los programas cuadrado XXXX.c es simplemente el tipo
de las variables que contienen al número original y su cuadrado. A grandes
rasgos, estos programas tienen la forma:

/* Incluir encabezados necesarios */
#include <stdio.h>
etc.

/* Definir el cuerpo del programa
principal */
void main()
{
/* Declarar variables necesarias
para aceptar un numero, para
contener su cuadrado, y
variables para almacenar el
tiempo to antes de iniciar el
procesamiento, y el tiempo tf al
finalizar el mismo. */

/* Pedir informacion al usuario */

/* Marcar el tiempo antes del procesamiento */
to = clock();

/* Repetir el procesamiento un numero apreciable de veces */
for ( )
{

}

/* El tiempo en segundos por operacion es, aproximadamente,
(tf-to) dividido por CLOCKS_PER_SEC */

/* Imprimir resultados */
}

7

Impresión

1. Imprima cada uno de los programas.

2. Haga una tabla que muestre los parámetros del sistema.

3. Haga una tabla que muestre el tiempo de ejecución para cada programa

que eleva al cuadrado un número.

Preguntas

1. Depende el tiempo de elevar al cuadrado del número que se está cuadran-

do?

2. Depende el tiempo de elevar al cuadrado del tipo de la variable que se esta

cuadrando?

3. Cuál es la granularidad de clock() en segundos?

4. Dado que la granularidad de clock() (en segundos) es G, que una op-
eración O se repitió R veces y que tomó T segundos; cuál es la incerteza
D (en segundos) del tiempo de una sola operación O?

5. La iteración for toma, de por si, tiempo. Cómo eliminaría ese tiempo para
obtener un valor más exacto del tiempo que le toma a la computadora el
elevar un número al cuadrado?

6. Qué otros factores pueden introducir incertezas en el tiempo de proce-

samiento neto calculado de esta manera?

7. Investigar que es una función en C y cómo se declara una.

8. Qué es un prototipo?
  • Links de descarga
http://lwp-l.com/pdf13419

Comentarios de: Programación para físicos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad