Codificación en C
Como pasar de Pseudocódigo a C(con pequeños trucos de C++)
Plantilla• Librerias
• Constantes
• Algoritmo
#include <stdio.h>#include <stdlib.h>
#define PI 3.1416
int main(void){/*Variables*//*Código en C*/
}
Librerias
• Las más importantes son:– De entrada y salida:#include <stdio.h>
– Operaciones estandar:#include <stdlib.h>
– Funciones matemáticas:#include <math.h>
• Para más información:– http://c.conclase.net/librerias/index.php
Constantes
• En realidad son macros que sustituyen un nombre por un valor antes de la compilación.
• Formato:#define nombre_cte valor
• Ejemplos:#define PI 3.1416#define VERDADERO 1#define FALSO 0#define PI2 PI*PI
Algoritmoint main(void){/*entradas*//*salidas*//*variables*/
/*código en C*/return(0);
}
• Dentro del algoritmo se declaran:– Entradas.– Salidas.– Variables.– Codigo en C/C++
Declaración de variables
• En Pseudocódigo:a1, a2: ENTERO
b: REAL
c: LOGICO
d: CARACTER
• En C:int a1,a2;
float b;//double b;
int c; //bool c; (C++) //(true, false)
char d;
Expresiones aritméticas• En Pseudocódigo:a1 4a2 (2*a1)+3 - 9a1 9 DIV 2a2 9 MOD 2b 9 / 2b a1 / a2c FALSO
c VERDAD
d 'a'
• En C:a1 = 4;a2 = (2*a1)+3-9;a1 = 9 / 2;a2 = 9 % 2;b = 9.0 / 2.0;b = a1 / (float)a2;c = FALSO;
//c = 0; //c = false;c = VERDAD;
//c = 1; //c = true;d = 'a';
//d = 97; (código ASCII)
Expresiones lógicas
• En Pseudocódigo:
c 2 > 3c a1 < a2c (b >= 3.0) O
(a1 <= 2)
c c Y (a2 = 3)c NO cc a1 <> a2 (distinto)
• En C:
c = (2 > 3);c = (a1 < a2);c = (b >= 3.0) ||
(a1 <= 2);c = (c && (a2 == 3));c = !c;c = (a1 != a2);
Salida estándar• En pseudocódigo:
ESCRIBIR "hola"ESCRIBIR "el resultado es: ", a1ESCRIBIR a1, " + ", b, " = ", a1+bESCRIBIR '''SaltoDeLinea'''
• En C:printf("hola");printf("el resultado es: %i", a1);printf("%i + %f = %f", a1, b, a1+b); // |5 + 3.86000000 = 8.86000000// printf("%3i + %5.1f = %.1f", a1, b, a1+b);// |··5 + ··3.9 = 8.9
printf("\n");// \t (tabulador) \r (retorno de carro)// \b (borrar carácter)
Entrada estándar
• En Pseudocódigo:LEER a1LEER a2, bLEER d
• En C:scanf("%i", &a1);scanf("%i %f", &a2, &b);scanf("%c", &d); //d = getchar();
Condicional simple
• En Pseudocódigo:SI condición ENTONCES
ordenesFIN_SI
SI condición ENTONCESordenes
SI_NOordenes
FIN_SI
• En C:if( condición ){
ordenes}
if( condición ){ordenes
} else {ordenes
}
Condicional compuesto• En Pseudocódigo:
EN CASO DE QUE d VALGA HACER'a': ordenes'b': ordenes'c': ordenes'0': ordenes
[ EN OTRO CASO: ordenes ]FIN_CASO
• En C:switch(d){
case 'a':ordenesbreak;
case 'b':ordenesbreak;
case 'c':ordenesbreak;
case '0':ordenesbreak;
[ default: ordenes ]}
Estructura cíclica (PARA)
• En Pseu docódigo:PARA cont inicio HASTA fin [C.I. incr] HACER
sentenciasFIN_PARA
• En C:for(cont=inicio; cont<=fin; cont=cont+incr){sentencias
}
cont>=fin
Si se utiliza decremento cambia la condición
Ejemplo de PARA
• En Pseudocódigo:PARA cont 0 HASTA 10 HACERsentencias
FIN_PARA
• En C:for(cont=0; cont<=10; cont=cont+1){sentencias
}cont++
cont+=1
Ejemplo de PARA
• En Pseudocódigo:PARA cont 20 HASTA 10 C.I. -1 HACERsentencias
FIN_PARA
• En C:for(cont=20; cont>=10; cont=cont-1){sentencias
}cont--
cont-=1
Estructura cíclica (MIENTRAS)
• En Pseudocódigo:MIENTRAS condición HACERsentencias
FIN_MIENTRAS
• En C:while( condición ){sentencias
}
Ejemplo de MIENTRAS
• En Pseudocódigo:MIENTRAS edad=50 HACERsentencias
FIN_MIENTRAS
• En C:while( edad == 50 ){sentencias
}
Estructura cíclica(REPETIR … HASTA)
• En Pseudocódigo:REPETIRsentencias
HASTA condición
• En C:do{sentencias;
}while( !(condición) );
Ejemplo REPETIR … HASTA
• En Pseudocódigo:REPETIRsentencias
HASTA a>b
• En C:do{sentencias;
}while( !(a>b) ); (a <= b)
Arrays (Declaración)
• En Pseudocódigo:Notas: ARRAY (0..20) DE REALESEdad: ARRAY (1..100) DE ENTEROSA: ARRAY (30..40) DE ENTEROSTablero: ARRAY (1..8,1..8) DE CARACTERES
• En C:float Notas[21];int Edad[101];int A[11];char Tablero[8][8];
No utilizamos la posición 0
Arrays (uso)
• En Pseudocódigo:Notas(5) 2.5Edad(22) Edad(15) + 1A(32) A(num+1) * 35LEER Tablero(8,8)
• En C:Notas[5] = 2.5;Edad[22] = Edad[15] + 1;A[32-30] = A[(num+1)-30] * 35;scanf(“%c”, &Tablero[8-1][8-1]);
“num” es una variable entera
Funciones (Declaración)• En Pseudocódigo:FUNCION Nombre( parametros ): TipoENTRADAS:SALIDAS:VARIABLES:INICIO
...DEVOLVER valor
FIN
• En C:Tipo Nombre( parametros ){
...return valor;
}
Funciones (Ejemplo declaración)
• En Pseudocódigo:FUNCION Suma(a, b): ENTEROENTRADAS:a: ENTEROb: ENTERO
SALIDAS:La suma de los 2 números
...
• En C:int Suma(int a, int b)...
Funciones (Uso)
• En Pseudocódigo:valor Suma(3, 2)ESCRIBIR Suma(valor,8)valor 8 * Suma(Suma(valor,2),6)
• En C:valor = Suma(3,2);printf(“%i”, Suma(valor,8) );valor = 8 * Suma(Suma(valor,2),6);
Procedimientos (Declaración)• En Pseudocódigo:PROCEDIMIENTO Nombre( parametros )ENTRADAS:SALIDAS:VARIABLES:INICIO
...FIN
• En C:void Nombre( parametros ){
...}
Procemientos(Ejemplo declaración)
• En Pseudocódigo:PROCEDIMIENTO Suma(a, b, VAR resul)ENTRADAS:a: ENTEROb: ENTERO
SALIDAS:resul: ENTERO...
• En C:void Suma(int a, int b, int &resul)...
Procemientos(Ejemplo declaración)
• En Pseudocódigo:PROCEDIMIENTO Intercambia(VAR a, VAR b)ENTRADAS:a, b: ENTEROS
SALIDAS:a, b: ENTEROS (Valores intercambiados)...
• En C:void Intercambia(int &a, int &b)...
Procemientos(Ejemplo declaración)
• En Pseudocódigo:PROCEDIMIENTO Ordena(VAR vector, tama)ENTRADAS:
vector: ARRAY(0..1000) DE REALES (desordenado)tama: ENTERO
SALIDAS:vector: ARRAY(0..1000) DE REALES (ordenado)
...
• En C:void Ordena(int vector[1001], int tama)...
Los arrays siempre se pasan por referencia en C
Procedimientos (Uso)
• En Pseudocódigo:Suma( maximo-3, 2, valor )Intercambia( maximo, valor )Ordena( notas, 97 )
• En C:Suma( maximo-3, 2, valor );Intercambia( maximo, valor );Ordena( notas, 97 );