31
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

Embed Size (px)

Citation preview

Page 1: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

1

TÉCNICAS DE PROGRAMACIÓN

Lenguaje CTercera Clase

(Segunda de C)

Page 2: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

2Daniel Finol

Cuerpo del whileCuerpo del while

while: el cuerpo de una instrucción while puede consistir de Una o más instrucciones encerradas entre llaves; o Una sola instrucción sin llaves.

En todo caso, para que el código sea fácil de leer y entender (para el lector humano), se debe sangrar (indent) el cuerpo del while (así como cualquier sub-bloque de código) para resaltar la estructura lógica del programa.

Posición de las llaves. Punto y coma(;) - 1 instrucción por línea.

Page 3: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

3Daniel Finol

Más acerca de printfMás acerca de printf

Si sustituimos la línea:printf("%d\t%d\n", fahr, celsius);

por:printf("%3d %6d\n", fahr, celsius);

la tabla se imprimirá con justificación a la derecha:

en vez de 0 -17 20 -6 40 4 60 15 80 26 100 37 ...

1 -17 20 -6 40 4 60 15 80 26 100 37 ...

Page 4: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

4Daniel Finol

Punto flotantePunto flotante

Para tener más precisión en los datos de la tabla de conversión necesitamos trabajar con números fraccionarios en vez de enteros.

Entonces la variables fahr y celsius deben cambiarse a float, sustituyendo:

int fahr, celsius; por float fahr, celsius;

Page 5: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

5Daniel Finol

El programa quedaría así: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Page 6: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

6Daniel Finol

CambiosCambios

El programa quedaría así: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Page 7: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

7Daniel Finol

#include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Operandos enteros -> Operación EnteraOperandos de punto flotante -> Operación de Punto Foltante

Page 8: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

8Daniel Finol

El programa quedaría así: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Si uno de los operandos es de punto flotante y el

otro entero,el entero se

transforma en punto flotante.

Page 9: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

9Daniel Finol

El programa quedaría así: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Así que lo podemos poner de

esta manera.

Page 10: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

10Daniel Finol

El programa quedaría así: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Con estos dos tampoco hay

problema.

Page 11: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

11Daniel Finol

Más acerca de printfMás acerca de printf

%f – imprime como punto flotante.

%6f – igual pero con por lo menos 3 caracteres de amplitud.

%6.1f – igual pero con una cifra después del punto.

%.2 – imprime como punto flotante con dos cifras después del punto decimal.

Page 12: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

12Daniel Finol

printf("%3.0f %6.1f\n", fahr, celsius);

imprime de esta manera:

0 -17.8

20 -6.7

40 4.4

...

Page 13: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

13Daniel Finol

Sustitución de variables por constantes... #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;

lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */

fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Page 14: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

14Daniel Finol

Sustitución de variables por constantes: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius;

fahr = 0; while (fahr <= 300) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + 20; } }

Page 15: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

15Daniel Finol

Sustitución de variable por expresión... #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius;

fahr = 0; while (fahr <= 300) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + 20; } }

En cualquier contexto en el que se permita usar el valor de una variable es posible usar una expresión del mismo

tipo.

Page 16: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

16Daniel Finol

Sustitución de variable por expresión: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr;

fahr = 0; while (fahr <= 300) {

printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }

En cualquier contexto en el que se permita usar el valor de una variable es posible usar una expresión del mismo

tipo que la variable.

Page 17: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

17Daniel Finol

fahr -> int... #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr;

fahr = 0; while (fahr <= 300) { printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }

Page 18: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

18Daniel Finol

fahr -> int: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { int fahr;

fahr = 0; while (fahr <= 300) { printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }

Page 19: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

19Daniel Finol

while -> for... #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { int fahr;

fahr = 0; while (fahr <= 300) { printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }

Page 20: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

20Daniel Finol

while -> for: #include <stdio.h>

/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { int fahr;

for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); }

Page 21: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

21Daniel Finol

La instrucción forLa instrucción for

for(inicialización; condición; incremento)cuerpo;

for (fahr = 0; fahr <= 300; fahr = fahr + 20)

printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

Page 22: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

22Daniel Finol

ConstantesConstantes

Es una mala práctica usar “constantes literales” como:

#include <stdio.h>

main()

{

int fahr;

for (fahr = 0; fahr <= 300; fahr = fahr + 20)

printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

}

Page 23: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

23Daniel Finol

Constantes simbólicasConstantes simbólicas

Es mejor usar “CONSTANTES SIMBÓLICAS” como:#include <stdio.h>

#define LOWER 0 /* lower limit of table */

#define UPPER 300 /* upper limit */

#define STEP 20 /* step size */

main()

{

int fahr;

for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)

printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

}

Page 24: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

24Daniel Finol

Entrada y Salida de CaracteresEntrada y Salida de Caracteres

Toda entrada y salida de texto se trata como un “flujo (stream) de caracteres”

Un “flujo de texto” es una secuencia de texo dividido entre líneas; cada línea consta de cero o más caracteres seguidos de un carácter “nueva línea”.

Page 25: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

25Daniel Finol

getchar y putchargetchar y putchar

La función getchar (de la biblioteca estándar) lee el siguiente carácter de la entrada de una secuencia de texto y lo devuelve como su valor:

c = getchar(); La función putchar escribe el contenido de

una variable entera como un carácter en la salida (generalmente la pantalla).

putchar(c);

Page 26: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

26Daniel Finol

Copia la entrada a la salidaCopia la entrada a la salida

#include <stdio.h>

/* copy input to output; 1st version */ main() { int c;

c = getchar(); while (c != EOF) { putchar(c); c = getchar(); }

}

Page 27: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

27Daniel Finol

Copia la entrada a la salida (versión 2)Copia la entrada a la salida (versión 2)

#include <stdio.h>

/* copy input to output; 2nd version */ main() { int c;

while ((c = getchar()) != EOF) putchar(c); }

Page 28: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

28Daniel Finol

Conteo de caracteresConteo de caracteres

#include <stdio.h>

/* count characters in input; 1st version */ main() { long nc;

nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); }

Page 29: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

29Daniel Finol

Conteo de caracteres (versión 2)Conteo de caracteres (versión 2)

#include <stdio.h>

/* count characters in input; 2nd version */ main() { double nc;

for (nc = 0; gechar() != EOF; ++nc) ; printf("%.0f\n", nc); }

Page 30: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

30Daniel Finol

Conteo de líneasConteo de líneas

#include <stdio.h>

/* count lines in input */ main() { int c, nl;

nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); }

Page 31: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)

31Daniel Finol

Conteo de palabrasConteo de palabras #include <stdio.h>

#define IN 1 /* inside a word */ #define OUT 0 /* outside a word */

/* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state;

state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c = '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc); }