Entradas

Mostrando entradas de enero, 2021

Algoritmos de búsqueda y ordenación.

Un vector también se puede declarar e inicializar así: typedef TipoElemento TipoVector numerosPrimos = {0,1,2,3,5,7,11,13,17,...} Sí tenemos 100 números primos en el vector, y quisiéramos buscar si un número se encuentra entre esos cien, tendríamos que ir comprobando uno al uno si se corresponde con su valor. Si al comprobar los cien no hay ninguno que haya coincidido, pues no hemos encontrado resultado. int i =0; int valor = 73; while(i if (i!=99)return true; else return false; Quiere decir que si mediante el for no se obtiene ningún valor, i llega a 99 sin problemas. Si obtuviera algún valor idéntico a 73, i no llegaría a 99. Máximo de un vector: int i = 1; int max= 0; while (i vector[max])max=i; i++; } return max;

Vectores.

Declaración de vectores: typedef TipoElemento TipoVector[n]; donde n es el número de componentes del vector. El TipoElemento es el tipo de dato, todos del mismo tipo, que se incluirán en las componentes. p. e. :int, char, float, ... de datos elementales; o Punto, Fecha, ... de datos complejos El TipoVector nos indica si es un vector de enteros: por ejemplo números primos; o un vector de fechas, por ejemplo para un diario, o fechas de nacimiento de los alumnos de clase.... El valor n conviene que lo declaremos mediante una constante: const int numeroLetras = 130; const int longitudAgenda = 20; const int numeroEstados = 15; const int numeroComponentes = 46; y sustituir n por éstas constantes, así podemos cambiar el valor de las mismas si lo necesitamos. typedef char TipoCadena [n]; typedef TipoFecha TipoAgenda[n]; typedef bool TipoEstados [n]; typedef int TipoNumPrimos [n]; typedef int TipoVector [n]; Una vez declarados los tipos de vectores, hay que declarar las vari...

Funciones y procedimientos.

Funciones: Cuando ciertas operaciones tienen entidad propia y se pueden utilizar aisladamente y en diversos momentos en un programa, dando resultados pertinentes, se pueden programar como funciones. La cabecera de la función consta: TipoResultado NombreFuncion (Tipo1 argumento1, Tipo2 argumento2,...) El cuerpo: { .... operaciones y resultado} Ejemplo: bool esPrimo (int n){ int i=2; while (i if (i ¡= n-1) return false; else return true; } Esta función podemos utilizarla en cualquier momento y por cualquier programa. Nos dirá si un entero es primo o no. Utilizamos una variable local i, entera, una estructura repetitiva while y una condicional if. El argumento es un entero n cualquiera. El resultado es un valor de tipo bool La condición del while nos dice que mientras n no sea divisible por i, éste incremente su valor en una unidad, pero si lo es, que pare, si entonces i es distinto de n, éste no es primo. Bastaría que i fuera ...

Cadena de caracteres.

Normalmente los caracteres no se emplean de forma aislada, sino formando palabras o frases. Entonces se escriben como una secuencia de caracteres entre comillas. (Si en su interior han de usarse comillas se escribe \"). No es lo mismo un carácter 'c', que una cadena de un solo carácter "c". Las cadenas de caracteres son vectores con algunas características especiales. Aunque no hemos estudiado los vectores vamos a adelantarnos por la importancia que tienen las cadenas de caracteres. Una cadena de caracteres se declara de la siguiente forma: typedef char TipoCadena[N]; donde N es el número máximo de caracteres,la cadena puede tener menos caracteres; el último carácter, automáticamente, se coloca el nulo:'\0'. por eso al valor N se se incrementa en 1. La declaración de variables se hace de forma habitual: TipoCadena direccion = "Calle Marina Baixa, 28"; Como se puede ver, se inicializa mediante cadena constante, y no hace falta llena...

Programación imperativa

Las estructura de la programación imperativa se representa mediante diagramas de flujo o flow-chart. Se componen de dos elementos básicos: las acciones y las condiciones. Hay tres estructuras basicas: Secuencias, Selección e iteración, aunque se pueden combinar entre ellas. Secuencias: cuando a una acción le sigue otra, así indefinidamente. Selección: cuando se elige una acción u otra según se cumpla o no una condición. Iteración: cuando se realiza una acción mientras se cumpla una condición. El problema es producir bucles infinitos. También no definir adecuadamente la iteración de modo que se llegue a un resultado correcto. Lo mismo puede pasar en la selección y en la secuencia. Las condiciones de la selección o iteración puede ser muy complejas: por ejemplo. if ((anyo%4==0 && anyo%100!=0)!!anyo%400==0)return true; else return false; Que nos indica si un año es bisiesto o no. (desde la aplicación de la reforma gregoriana. )

Operaciones de escritura y lectura simples.

Las acciones que envían resultados al exterior se llaman operaciones de escritura, y, viceversa, las que los reciben del exterior se llaman operaciones de escanear. En ambos casos se utilizan procedimientos, que vienen incluidos en la librerías o módulos que se cargan en el compilador: include# stdio.h El procedimiento printf escribe en la pantalla del ordenador una cadena de caracteres: printf("Hola a todos"); Sí queremos escribir como texto una serie de valores de los tipos elementales vistos, habrá que darle el formato adecuado mediante %x, siendo x: d para un entero. f para un real. e para un exponencial. g para un real con/sin notación exponencial. c para un c arácter. s para un string. Ejemplo: printf("Datos:%7d#%4.3f",29*15,32/57); En donde se especifican los formatos a aplicar a cada dato: 7 corresponde al número de espacios mínimos que ocupará el entero resultante de multiplicar 29*15. 4.3 En 4 es lo mismo q...

El tipo bool, o booleano

El tipo bool en C+- es un tipo predefinido enumerado: typedef enum bool {false, true}; pero esta definición esta implícita en el lenguaje y no se requiere saberla. Lo usamos como un tipo elemental más Al igual que los caracteres, están referenciados por los enteros, en éste caso 0 y 1. int (false)==0; bool (0) == false; int (true)==1; bool (1) == true; requiere, como vemos, los correspondientes castings o conversiones Operadores booleanos: Relacionales > >= Conjunción & Disyunción exclusiva ^ Disyunción lógica | Conjunción cortocircuitada && Disyunción cortocircuitada ||

El tipo carácter (char)

Los ordenadores no manejan caracteres sino que éstos son representados por enteros: La tabla -charset- asocia a cada carácter el código numérico -codepoint- que lo representa. La más importante es la ASCII, pero la completa es la UNICODE. Podemos hacer casting o conversiones de char a int o viceversa: char(65) es la letra A int ('a') es el número 35 ? El tipo char, como es numérico, admite operaciones de suma y resta para obtener otros caracteres. La librería ctype.h contiene funciones que facilita el manejo de caracteres. Por último indicar que no es lo mismo el carácter '0' cero que el int 0 cero. Secuencias de escape: Existen algunos caracteres, agrupados de dos en dos, o tres, que tienen una acción en la ejecución del programa, son las secuencias de escape: '\n' que genera una nueva línea. '\t' que realiza una tabulación. '\0' corresponde al carácter nulo. ... Se utilizan para dar formato a los textos que se impri...

Tipos elementales numéricos.

Tipos numéricos enteros: int Tipos numéricos reales: float Los rangos de sus valores dependen de la plataforma, no son infinitos como en matemáticas: Si el tamaño de la palabra es de 16 bits, los enteros: -32.768. ... 0. .... 32.767 si es de 32 bits: -2.147.483.648 ...0...2.147.483.647 si es de 64 bits: -9.223.372.036.854.775.808 ...0... 9.223.372.036.854.775.807 Podemos conocer el rango admisible de nuestro ordenador: INT_MIN ...0... INT_MAX De modo similar, los reales o float también están sujetos a un rango, pues el ordenador es limitado. Además son imprecisos debido al número limitado de decimales. Por ello no sólo se restringe su tamaño sino sus decimales. Tamaño de la palabra de 32 bits -6 cifras decimales - -3.4E+38...-1.2E-38 o +1.2E-38...+3.4E+38 Tamaño de la palabra de 64 bits -15 cifras decimales - -1.7E+308...-2.3E-308 o +2.3E-308...+1.7E+308 Operadores de enteros y reales: Los operadores de los enteros y los reales están sobrecargados...

Variables: declaración, asignación e inicialización.

Una variable representa la dirección de memoria donde se puede guardar un dato del tipo de la variable, para hacer uso de él a lo largo de la ejecución del programa, operando con él, modificándolo, pero en esa dirección de memoria, representada por esa varíable, sólo se pueden guardar datos del mismo tipo:(int, float, char, bool), si son datos elementales. Semejante será para los complejos. Es como un apartado de correos. Declaración de variables: las variables se declaran indicando el tipo de dato que se va a guardar en la dirección de memoria que representa y el nombre que damos a esa dirección de memoria: llamamos a esos nombres "abstractos" o de alto nivel, pues el compilador los traduce a las verdaderas direcciones de memoria con que se manejan a bajo nivel que están en lenguaje máquina en binario. Los nombres de las variables han de cumplir una serie de requisitos: Han de comenzar mediante una letra. No pueden tener espacios ni símbolos especiales. ...

Introducción

El código de un programa consiste en secuencias de instrucciones que operan sobre datos. Un dato es una información. Todo dato pertenece a un TIPO DE DATO, que es un conjunto de datos, limitado por la capacidad del ordenador, y un conjunto de operaciones que se pueden realizar con ellos. Los tipos elementales de datos son: int o enteros. float o reales. char o caracteres. bool o booleanos. Existen también datos complejos, formados por agrupaciones de datos elementales que se manejan como un único dato. Así mismo, para cada tipo de dato complejo existen un conjunto de operaciones que actúan sobre ellos.