abril 23, lunes 2018... · 2018-08-13 · declaraciones de variables ... conjunto de valores y...
TRANSCRIPT
Abril23,Lunes
Agendaparaestaclase� EstadosdeTrabajos� Intervalo� Expresiones&Iteraciones� Constantessimbólicas� TiposdeDatos� Funciones
Prof. Esp. Ing. José María Sola 114
Prof. Esp. Ing. José María Sola 115
K&R1.2-1.3Variables,Tipodedatos,ExpresionesAritméticasylaSentenciaFor
Problema–TablaFahrenheit-Celsius°C=5/9(°F–32)0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140 60 160 71 180 82 200 93 220 104 240 115 260 126 280 137 300 148
/* F2C K&R 1988 */ #include <stdio.h> int main(void){ int fahr, celsius; int lower, upper, step; lower = 0; /*scale lower limit*/ upper = 300; /*upper limit*/ step = 20; /*step size*/ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } }
� Comentarios� Variables
� Abstraccióndedatos� Tipodedatos
� Declaracionesdevariables� Anunciodepropiedades� Asociación� DeclaraciónconvariosDeclaradores
� ComienzodelaEjecución(Cómputo)� Sentencias� "Sentenciadeasignación"� Sentenciawhile� Sentenciacompuesta� Indentación
� Estilosdecodificación� Secuencia� Expresionesaritméticas� Divisiónenterayreal� Formateodelasalida
� ¿Cómomejorarlaalineación?.
Resolución–Fahrenheit-Celsius°C=5/9(°F–32)
F-C2–FormatoyPrecisión#include <stdio.h> int main(void){ float fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature 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; } }
OtrosformatosparaprinH� DiferenciaentreValoryFormato
� 65 ,41,101,LXV,A� 1000001
� %d enterodecimal� %6d enterodecimal,porlomenosancho6� %f puntoflotante� %6f puntoflotante,porlomenosancho6� %.2f puntoflotantey2caracteresluegodelpunto� %6.2f puntoflotante,porlomenosancho6y
2caracteresluegodelpunto� %o octal� %x hexadecimal� %c carácter� %s string� %% porciento
Prof. Esp. Ing. José María Sola 121
F-C3–ForgeneralizaWhileyuna"BestPracMce"
#include <stdio.h> int main(void){ float fahr, celsius; int lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
#include <stdio.h> int main(void){ int fahr; for( fahr = 0; fahr <= 300; fahr = fahr + 20 ) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32) ); }
� forporwhile� Variable
celsiusreemplazadaporexpresión
Sentenciasfor
Sentenciaswhile
Ejercicios� 1-3.Encabezadosobrelatabla� 1-4.C-F.
Prof. Esp. Ing. José María Sola 123
K&R1.4ConstantesSimbólicas
“Númerosmágicos”#include <stdio.h> int main(void){ int fahr; for( fahr = 0; fahr <= 300; fahr = fahr + 20 ) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32) ); return 0; }
Constantes(oNombres)Simbólicas#include <stdio.h> #define LOWER 0 /* lower limit of table */ #define UPPER 300 /* upper limit */ #define STEP 20 /* step size */ int main(void){ int fahr; for( fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP ) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32) ); }
int main(void){
const int LOWER = 0, // lower limit of table
UPPER = 300, // upper limit
STEP = 20; // step size
for (int fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}
� Ejercicio1-5.Modifiqueelprogramaparaqueimprimalatablaenordeninverso,esdecir,desde300hasta0grados.
C11:CalificadorconstyDeclaraciónenfor
FuncionesdelPreprocesador,ParteII� Yaconocidas
� Incluirarchivosencabezado,directiva#include� Reemplazarcomentariosporunespacio� Concatenarcadenasadyacentes.
� Nueva� Atenderdirectivas#definequedefinennombresmacroysulistadereemplazo
� Expandirlosnombresmacro� BestPractice
� Evitar,enlosposible,elusodefine,buscaralternativasmásabsatractasyconmismaeficiencia.� http://www.stroustrup.com/bs_faq2.html#macro
Prof. Esp. Ing. José María Sola 128
Prof. Esp. Ing. José María Sola 129
AlgunosMposdedatos� TiposEnteros,ordenadosporrango
� bool Lógico(C99,stdbool.h)� char Código� int Palabra� short Corto� long Largo
� TiposFlotantesReales,ordenadosporrango� float Simpleprecisión� double Dobleprecisión
� Eltamañodependedelamáquina,aunquehayrestriccionesymínimos
� Variantesdeint� unsigned� short� long� longlong(C99)
� Variantesdedouble� long
� TiposFlotantescomplejos� float_Complex
� double� _Complex� longdouble_Complex
� TiposAritméticos� TiposEnteros� TiposFlotantes,RealesyComplejos
� TiposBásicos� char� Tiposenteros� Tiposflotantes
� Enumeraciones� enum
� TiposDerivados(delosanteriores)� Arreglos� Estructuras� Uniones� Punterosatodosellos.
Prof. Esp. Ing. José María Sola 130
� Declaración� Introduceunnombreenel
programa� Especificaeltipoparauna
entidadnombrada� Tipo
� Conjuntodevaloresyconjuntodeoperacionessobreesosvalores
� Objeto� Bloquedememoriaprincipal
quecontieneunvalordeuntipo
� Valor� Secuenciadebitsquese
interpretansegúnuntipo� Variable
� Objetonombrado
� AlgunostiposfundamentalesdeC� Entero(Z),porejemplo,1,42,y1066
� int
� Carácter(Σ),porejemplo, 'a', 'z',y'9' � char
� Booleano(𝔹):trueyfalse � bool
� Númerodepuntoflotantededobleprecisión(R),porejemplo,3.14y2999793.0 � double
� DeclaracionesEjemplo:� int i=42; � char c='9'; � bool b=true � double d=3.14;
Objetos:Tipos,DeclaracionesyVariables
Prof. Esp. Ing. José María Sola 131
Conjuntodevalores
Conjuntodeoperacionessobreesosvalores
Tipodedato
K&R1.7-1.8FuncionesyArgumentos
RepasodeFunciones� Programa
� Conjunto/Secuenciadefunciones� Abstracciónprocedural,inclusiveparafuncionesdeunalínea� QuéversusCómo
� RecomendablesyEficientes,inclusivecortas� Aplicarinclusiveparafuncionesdeunalínea� CALLf:PUSHIP,JMPf� RET:POPIP
� PrototipodefunciónoDeclaracióndeFunción� Definicióndefunción,encualquierordenyendiferentesfuentes
� Valorytiporetornado.Prof. Esp. Ing. José María Sola 133
#include <stdio.h> int power(int m, int n); /* test power function */ int main(void){ int i; for( i=0; i<10; ++i ) printf( "%d %d %d\n", i, power(2,i), power(-3,i) ); }
/* power: raise base to n-th power; n >= 0 */ int power(int base,int n){ int i, p; p = 1; for( i=1 ; i<=n ; ++i ) p = p * base; return p; }
� Pruebaconprogramasimple(DriverProgram)
� Prototiposysusparámetros� Argumentossonexpresiones� Invocacionessonexpresiones� Ignorarvalordelainvocación� Argumentoversusparámetro
� Definicióndefunción� PrecondiciónyPoscondición,
DominioeImagen� Localidaddeparámetros� return expresión; � Controldeflujo.
RepasodeFunciones(cont.)
/* power: raise base to n-th power; n >= 0; version 2 */ int power(int base, int n){
int p;
for( p=1 ; n>0 ; --n ) p = p * base;
return p;
}
� Noesdesventaja,esventaja� ¿Soloin?� Parámetrossonvariables� Efectodeladoacotado� Punterosparasimularelpasajeporreferencia
� Pasajedearreglos.
Pasajeporvalor(ocopia)
Ejercicio� 1-15.Reescribaelprogramadeconversióndetemperaturadelasección1.2paraqueuseunafuncióndeconversión.
Prof. Esp. Ing. José María Sola 136
Términosdelaclase#Definircadatérminoconlabibliograaa� Expresiones&Iteraciones
� Abstraccióndedatos� Declaraciones� Divisiónenterayreal� Operacióncerrada� Valordeunaexpresión� Efectodeladodeuna
expresión� Formateodevalor
� Constantessimbólicas� “Númerosmágicos”� Constantessimbólicasó
Nombressimbólicos� Directiva#define� Calificadorconst
� TiposdeDatos� TiposEnteros� TiposFlotantes� Variantesdetipo� TiposAritméticos� Tipos"Básicos"� TiposAritméticos� TiposDerivados
� Arreglos� Estructuras� Uniones� Punteros� Precisión:Moneda
� Funciones� Abstracciónprocedural� Función� PrototipooDeclaraciónde
función� ExpresióndeInvocación� Argumento� DefinicióndeFunción� Parámetro� Nomenclatura(estilo)� Precondición� Dominio� Poscondición� Imagen� Programadeprueba(Driver
Program)� Pasajeporvalor(copia)� Pasajeporvariable
(referencia)� Efectodeladodeunafunción� Localidaddeparámetros� Sentenciadesaltoreturn� Simulacióndepasajepor
referencia(variable).
05
Prof. Esp. Ing. José María Sola 137
Tareasparalapróximaclase1. Resolverejercicio1-15.noseentrega,peroesbasedel
próximotrabajo.2. Repasarsobreenueraciones(enums).3. Leersorbreuniones(unions).4. Leersobremake.5. Leersobreinterfaces.
Prof. Esp. Ing. José María Sola 138