Práctica 0 Introducción a la programación en C



Documentos relacionados
Preliminares. Tipos de variables y Expresiones

Prof. Dr. Paul Bustamante

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Práctica de introducción a

Programación Estructurada

Arrays y Cadenas en C

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Arquitectura de Computadores: Exámenes y Controles

Esquema de un programa en C: bloques básicos

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

Índice de contenido 2/32

El lenguaje de programación Java

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

El lenguaje de Programación C. Fernando J. Pereda

Race Manager by Master Timing Guía del usuario GUIA RACE MANAGER. Eventronic, SL

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

SISTEMAS INFORMÁTICOS EN TIEMPO REAL 2º Ingeniería Industrial MANUAL DE HERRAMIENTAS SOFTWARE PARA PROGRAMACIÓN EN UNIX

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Problemas de Redes de Computadores. Conjunto de problemas 1

Introducción al Dev-C++

Prof. Dr. Paul Bustamante

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

Modulo 1 El lenguaje Java

1 Itinerario. 2 Descripción y funcionalidades principales. Google Docs. 1.1 Qué vamos a hacer? 1.2 Qué pasos vamos a seguir?

Entorno de Programación Visual Studio 6

Programando por primera vez

PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato

Vectores. 27/05/05 Programación Digital I 1

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

Sistemas Operativos I Manual de prácticas

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Módulo 1 El lenguaje Java

Taller de Sistemas Operativos Introducción

Clases y Objetos. Informática II Ingeniería Electrónica

Una introducción al compilador C de GNU

Tema 9. Vectores y Matrices

Mi primer proyecto en Dev-C++

Carrera: Analista de Sistemas. Asignatura: Resolución de Problemas y Algoritmos

SISTEMAS INFORMÁTICOS EN TIEMPO REAL 2º Ingeniería Industrial MANUAL DE HERRAMIENTAS SOFTWARE PARA PROGRAMACIÓN EN UNIX

GIT Dinahosting 3. Hola!

1. Introducción. 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.) Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.)...

SIEWEB. La intranet corporativa de SIE

HOW TO SOBRE REMOTE ACCESS VPN MODE EN LINUX

MANUAL BÁSICO DE INFORMATICA

Lenguaje de Programación: Go

Curso de PHP con MySQL Gratis

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

SOLUCION EXAMEN junio 2006

SOR -::- Prácticas -::- Curso 05/06. RCP es un estándar desarrollado por Sun Microsystems y usado por muchos distribuidores de sistemas UNIX.

Gesfincas. INSTALACIÓN DE LA APLICACIÓN (Monopuesto y Red Local)

CREACIÓN DEL PRIMER PROYECTO EN mikrobasic PRO for AVR

Práctica de gsoap. int ns enviar (unsigned nodo, std::string cadena, std::string &resultado); int ns recibir(unsigned nodo, std::string &resultado);

Práctica 3ProgramacionRS232: Programación básica de la RS232

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

TEMA 5. INTRODUCCIÓN AL MANEJO DE ORIGIN 6.1

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Desarrollo de Servicios Web con JBuilder

Contenidos. Archivos en C++ Archivos en C++ Introducción

Uso básico de la terminal

Prof. Dr. Paul Bustamante

Servidor FTP en Ubuntu Juan Antonio Fañas

Práctica 3 Manejo de GCC y ejecución de programas por consola. Computador Compilador Editor de texto o IDE

Práctica 00: Compilador

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Instalación y configuración del servidor FTP Filezilla en Windows 2003 Server. Vicente Sánchez Patón I.E.S Gregorio Prieto.

Uso de excepciones en Java

Instituto Tecnológico de Las América. Materia Sistemas operativos III. Temas. Facilitador José Doñe. Sustentante Robín Bienvenido Disla Ramirez

Uso del simulador Modelsim

Examen Principios de Programación Febrero 2012

GENERACIÓN DE CÓDIGO

Cómo capturar páginas web con el programa GNU Wget

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Instituto Tecnológico de Las América. Materia Sistemas operativos III. Temas. Facilitador José Doñe. Sustentante Robín Bienvenido Disla Ramirez

Tutorial Básico de vbscript

Hacer una página web con Kompozer

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Guía Teórica Práctico 1: Ventana de Comandos o Terminal

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

TEMA 4: EMPEZANDO A NAVEGAR ESCUELA UNIVERSITARIA DE INFORMÁTICA. Raúl Martín Martín

Prof. Dr. Paul Bustamante

Ejercicios - Persistencia en Android: ficheros y SQLite

UNIDAD DIDÁCTICA Nº 7 USO DE LOS RECURSOS EN MOODLE

Cómo instalar fácilmente tu WordPress tras contratar un hosting en Hostalia

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Introducción al tipo de dato ARRAY

DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Transcripción:

DEPARTAMENTO DE AUTOMÁTICA ARQUITECTURA Y TECNOLOGÍA DE COMPUTADORES OBJETIVO Grado en Ingeniería de Computadores COMPUTACIÓN DE ALTAS PRESTACIONES Práctica 0 Introducción a la programación en C Se pretende adquirir una familiaridad con el lenguaje de programación C, dada su práctica ubicuidad y la utilización que de él haremos en los sucesivos laboratorios de la asignatura. Esta práctica no es obligatoria: puede ser obviada si se juzga oportuno. Como objetivo adicional, aprendemos aquí también a conectarnos al nodo de usuario del cluster ATC2-HPC. Será en este nodo en donde realizaremos todas las prácticas, editando los programas, compilando y ordenando la ejecución. RESULTADOS Esta práctica no requiere presentación formal de resultados, pues su objetivo es, como se ha dicho, facilitar el primer contacto con el entorno de programación y las plataformas de computación que usaremos en el laboratorio. DESARROLLO DE LA PRÁCTICA Presentarse en la máquina Abrimos un terminal alfanumérico, buscándolo para ello en los iconos que se encuentran en la izquierda de la pantalla. Nos conectamos ahora al nodo de presentación del cluster. Este nodo se llama Epi y su dirección IP es 172.29.23.150. El profesor nos proporcionará una cuenta y una clave que utilizaremos para presentarnos en el cluster. Si esa cuenta es, por ejemplo, cap_prac1, y estamos sentados frente a la máquina LN05P01 del laboratorio, podemos usar el siguiente comando: larq@ln05p01:~$ ssh -X cap_prac1@172.29.23.150 El sistema nos pide la clave y, si todo va bien, veremos el prompt: cap_prac1@epi:~$ El cluster está compuesto de seis máquinas cuyos nombres son: Epi, Blas, Fuji-s0, Fuji-s1, Fuji-s2, Fuji-s3. Desde cada máquina son accesibles todas las demás por nombre, utilizando el mismo protocolo ssh. Además, el directorio raíz de cada cuenta está compartido, de manera que todos los nodos tienen acceso a los mismos datos.

Edición de un programa Para editar un programa, ejecutamos el editor gedit invocándolo directamente desde el terminal: cap_prac1@epi:~$ gedit & Este editor es muy sencillo de usar y sirve para cualquier tipo de fichero textual. Si somos amantes del vi, disponemos de una versión gráfica que podemos invocar mediante el comando: cap_prac1@epi:~$ xvile Compilación y ejecución La compilación de un programa C, ejemplo.c, se realizará en el terminal alfanumérico. En primer lugar, nos situamos en la carpeta en donde se han almacenado los ficheros, con el comando: cap_prac1@epi:~$ cd carpeta Después se puede compilar el programa con el siguiente comando: cap_prac1@epi:~/carpeta$ gcc -o ejemplo ejemplo.c -lm Para ejecutarlo, basta teclear cap_prac1@epi:~/carpeta$./ejemplo EJEMPLOS DE PROGRAMAS Incluimos a continuación algunos ejemplos de programas sencillos, que pueden servir de plantilla para empezar a hacer otros más complicados. El inevitable Hola, mundo : int main(int argc, char *argv[]) printf("hola, mundo.\n"); return 0; A continuación, detallo algunos posibles ejemplos. En internet hay hay cientos de tutoriales, con muchos más, que podéis bajar y utilizar. Una rutina de entrada/salida: int i, nc; nc = 0; i = getchar(); while (i!= EOF) nc = nc + 1; i = getchar(); printf("number of characters in file = %d\n", nc); 2

Aquí tenéis uno de cómputo: /************************/ /* Table of */ /* Sine Function */ /************************/ /* Michel Vallieres */ /* Written: Winter 1995 */ # include <math.h> int angle_degree; double angle_radian, pi, value; /* Print a header */ printf("\ncompute a table of the sine function\n\n"); /* obtain pi once for all */ /* or just use pi = M_PI, where M_PI is defined in math.h */ pi = 4.0*atan(1.0); printf("value of PI = %f \n\n", pi); printf("angle Sine \n"); /* initial angle value */ angle_degree = 0; /* scan over angle */ /* loop until angle_degree > 360 */ while (angle_degree <= 360) angle_radian = pi * angle_degree/180.0 ; value = sin(angle_radian); printf(" %3d %f \n", angle_degree, value); /* increment the loop index */ angle_degree = angle_degree + 10; Ahora uno manejando punteros: float x, y; /* x and y are of float type */ float *fp, *fp2; /* fp and fp2 are pointers to float */ x = 6.5; /* x now contains the value 6.5 */ 3

/* print contents and address of x */ printf("value of x is %f, address of x %lu\n", x, &x); fp = &x; /* fp now points to location of x */ /* print the contents of fp */ printf("value in memory location fp is %f\n", *fp); /* change content of memory location */ *fp = 9.2; printf("new value of x is %f = %f \n", *fp, x); /* perform arithmetic */ *fp = *fp + 1.5; printf("final value of x is %f = %f \n", *fp, x); /* transfer values */ y = *fp; fp2 = fp; printf("transferred value into y" " = %f and fp2 = %f \n", y, *fp2); En este ejemplo se trata con punteros y vectores: #define SIZE 3 float x[size]; float *fp; int i; /* initialize the array x */ /* use a "cast" to force i */ /* into the equivalent float */ for (i = 0; i < SIZE; i++) x[i] = 0.5*(float)i; /* print x */ for (i = 0; i < SIZE; i++) printf(" %d %f \n", i, x[i]); /* make fp point to array x */ fp = x; /* print via pointer arithmetic */ /* members of x are adjacent to */ /* each other in memory */ /* *(fp+i) refers to content of */ /* memory location (fp+i) or x[i] */ for (i = 0; i < SIZE; i++) printf(" %d %f \n", i, *(fp+i)); 4

Uno de manejo de cadenas de caracteres: # include <string.h> char line[100], *sub_text; /* initialize string */ strcpy(line,"hello, I am a string;"); printf("line: %s\n", line); /* add to end of string */ strcat(line," what are you?"); printf("line: %s\n", line); /* find length of string */ /* strlen brings back */ /* length as type size_t */ printf("length of line: %d\n", (int)strlen(line)); /* find occurrence of substrings */ if ((sub_text = strchr(line, W ))!= NULL) printf("string starting with \"W\" ->%s\n", sub_text); if ((sub_text = strchr(line, w ))!= NULL) printf("string starting with \"w\" ->%s\n", sub_text); if ((sub_text = strchr(sub_text, u ))!= NULL) printf("string starting with \"u\" ->%s\n", sub_text); Para manejo de funciones, tenemos: void exchange(int *a, int *b); int a, b; a = 5; b = 7; printf("from main: a = %d, b = %d\n", a, b); exchange(&a, &b); 5

printf("back in main: "); printf("a = %d, b = %d\n", a, b); void exchange(int *a, int *b) int temp; temp = *a; *a = *b; *b = temp; printf(" From function exchange: "); printf("a = %d, b = %d\n", *a, *b); En el programa anterior, podéis observar la diferencia si en vez de pasar los punteros pasáis los valores, es decir, si declaráis la función así: void exchange(int a, int b); Y, por fin, uno para escribir un fichero: FILE *fp; int i; /* open foo.dat for writing */ fp = fopen("foo.dat", "w"); /* write some info */ fprintf(fp, "\nsample Code\n\n"); for (i = 1; i <= 10 ; i++) fprintf(fp, "i = %d\n", i); /* close the file */ fclose(fp); 6