1/80
Notas de Primer Examen Parcial Programación UAQ
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No study sessions yet.

Imprime la “n“ porque como no se trata de una cadena de caracteres solamente imprime el bit menos significativo (el final)
Impresiones entre distintos tipos de variable

Signed o Unsigned en variables
Al declarar una variable cualquiera, por defecto es “signed” si no se especifica lo contrario, lo que significa que puede representar números negativos y positivos. “
Rango de Signed en char
-128 a 127
Rango de Unsigned en char
0 a 255
Longitud de los distintos tipos de variables


Aqui imprime -128 dado que el rango de char (signed) es de -128 a 127, por lo que se desborda al -128. Esto ocurre porque se imprime en formato %i

Aqui imprime el caracter correspondiente a su valor en ASCII dado que se imprime en formato %c
Comandos de la libreria “iostream“
Son instrucciones utilizadas en C++ para entrada y salida de datos.
- std::cin : Entrada de datos.
- std::cout : Salida de datos
Comandos de la librería “stdlib.h“
Instrucciones utilizadas en C++ que proporcionan funciones de utilidad, como manejo de memoria, conversión de tipos y generación de números aleatorios.
- atoi : Convierte una cadena de caracteres a entero
- atof : Convierte una cadena de caracteres a flotante
Comandos de la librería “stdio.h“
Instrucciones utilizadas en C++ para realizar operaciones de entrada y salida estándar, como manejo de archivos y comunicación por consola.
- printf : Imprime datos en la consola
- scanf : Lee datos de entrada estándar
- gets() : Captura una cadena de caracteres desde la entrada estándar
- getchar() : Captura un carácter desde la entrada estándar
- fflush(stdin) : Permite congelar el buffer
- puts () : Escribe una cadena de caracteres en la salida estándar
Comandos de la librería “conio.h“
Mejora la entrada y salida de datos por medio de la consola.
- kbhit() : Determina si una tecla del teclado ha sido presionada
- getch() : Lee un carácter directamente de la consola sin hacer uso del buffer, y sin mostrar salida

En operaciones con flotantes es necesario hacer un casting (float) cuando trabajamos conn números enteros.

Printf no modifica la variable en los casos de x + 1, sin embrago, sí la modifica en ++x, por lo mismo, ambas se desbordan pero solo en ++x se modifica la variable.

No ocurre desbordamiento porque aquí el printf solo modifica el valor, no modifica la variable, por lo que sigue con el siguiente carácter del ASCII.
Imprime 128
Imprime 127
%u
Indica “unsigned“, es decir, imprime una variable sin signo, sin embrago, esto no aplica para float
Desbordamiento de la variable float
Si bien la variable float e int tienen la misma longitud de 4 bytes, dado que la variable float trabaja con exponentes no ocurre desbordamiento en números muy grandes. (1.2E-38 a 3.4E+38)

Marca error de compilación debido a que “a“ no está definida.

Imprime 97 por el codigo ASCII
Tablas de verdad de operadores lógicos

Función de operadores lógicos
Realizan operaciones bit a bit en función a su tabla de verdad
Función de dobles operadores lógicos (&&, ||) y !
Realizan comparaciones de datos

Realiza la función de repetirse hasta que se llene el espacio de la memoria RAM

El operador coma “,“ que se usa dentro del ciclo while no significa que se realicen ambas condiciones, en este caso se descarta x>0, lo que sería igual a tener “while(n--)“.
Aquí se imprime 0 porque realiza la operación hasta llegar a 0, pero NO porque se indique anteriormente (antes del operador coma).

El punto y coma después del while indica que se va quedar atrapado en ese ciclo while, y es hasta después de que sale que continúa con el resto del código, en este caso, imprimir el resultado

Permanece en el ciclo do - while mientras el valor de x sea mayor que 0 y menor que 10.
Es necesario usar punto y coma al final de la restricción del while.
El do - while garantiza que se entre por lo menos una vez al código.

De flotante a carácter no se imprime nada, espacio vacío

Estructura básica del switch case.
El argumento a evaluar puede ser entero o carácter.
Los casos evalúan si el argumento coincide con el número o letra.
Es necesario colocar break; pues de lo contrario se ejecutan los casos seguidos del primer caso seleccionado.
Definición de variable
Representación alfanumérica de una dirección de memoria
Característias de la variable
- Tipo de dato (Longitud)
- Identificador (Nombre)
- Dirección (Espacio en la memoria RAM)
Característica de la variable - Tipo de dato
int, float, char, bool, short, double, long
Reglas de la característica de la variable - Identificador
- No iniciar con números
- No palabras reservadas (cout,cin,getch)
- No caracteres especiales

Imprimirá “Esto es falso “, debido a que la magnitud de float no es exacta, solamente aproximada, aun cuando nosotros lo hayamos declarado como un número exacto
La función principal (main) es signed o unsigned?
La función principal es forzosamente unsigned, es decir, solo puede devolver números positivos

Dado que la función principal es forzosamente unsigned, al retornar un -1, la variable entera se desborda hacia el número más alto.
Aunque coloquemos
“signed int main(){
return -1;
}“
La variable entera se seguirá desbordando

Estas son formas de declarar las variables, llamada “constructor de inicialización “

Aquí se muestra la diferencia que existen en el desbordamiento de las variables con las distintas formas de impresión.
printf no desborda la variable e imprime el -45.
cout sí desborda la variable hasta el valor máximo de unsigned int.
Esto se debe a que cout imprime según el tipo de variable (siempre la respeta), mientras printf lee los bits como si fuera un entero con signo (4294967251 = -45 en signed int)

Se imprimirá “Falso“, esto se debe a el “if“ está evaluando si la variable existe, y cuando es 0, se considera que no existe, y por lo tanto, es falso.
Cualquier otro valor lo retornará como verdadero, incluso valores negativos. Únicamente el “0“ es falso en una evaluación
NOT lógico y NOT de comparación
NOT de comparación:
! → Niega como relación y comparación
NOT lógico:
~ → Modifica los bits

Imprime “Verdadero“, el operador condicional ? evalúa si la condición se cumple, si es así realiza la primera opción seguida del operador, de lo contrario (:), realiza la instrucción seguida de (:)

En los ciclos while, ya sea que se use cin o scanf para guardar un carácter en una variable entera el buffer se ciclará hasta que se termine el espacio en la memoria RAM; y si se quiere guardar un flotante, solo se tomará la parte entera y el resto quedará en el buffer por lo que también se ciclará hasta que se termine el espacio en la memoria RAM.

El parámetro de la inicialización de la variable puede ser opcional si ya se inicializó con anterioridad.

Pueden realizarse operaciones en el parámetro de inicialización de la variable, sin embargo, tenemos que inicializar antes “i“. Esta operación se efectuará al iniciar el ciclo y la variable comenzará por ahí.

Al no colocarse una condición el bucle se ciclará repetidamente hasta que termine con el espacio de la memoria RAM.

Al no colocarse parámetros el bucle se cicla repetidamente hasta que termine con el espacio de la memoria RAM.

Pueden combinarse multiples expresiones de incializacion mediante el operador coma

Es posible no incluir operaciones y realizarlas dentro del ciclo

Marca error de compilación, esto se debe a que en un ciclo for con punto y coma (;), la variable debe declarase fuera del ciclo pues de lo contrario la toma como variable local del ciclo for y no será posible imprimirla al terminar el ciclo pues la toma como no declarada.

Se imprime: 10
El ; asegura que se realicen todos los procedimientos del ciclo for, es hasta que termina que continúa con el resto del código.

En el primer for se imprime 10 y en el segundo de 0 a 9.
Esto se debe a que primero se realiza la operación y luego se evalúa la condición, por lo que en el primero termina siendo 10 y lo imprime al final el bucle, sin embrago, en el segundo el proceso de impresión se encuentra en el bloque de código del ciclo for, por lo que imprimirá hasta el 9 y después se restringirá el paso al bloque de código por la condición n < 10.

Esto es un error de compilación, lo que pasa es que la variable “i“ solo está disponible en el entorno del for, por lo que no podemos imprimirla al terminar el ciclo.
Para solucionarlo debemos declarar “i“ antes del for (como global)
Dato importante del uso del for
El ciclo for primero realiza la operación y luego evalúa la restricción
Dato importante sobre fflush
fflush no limpia el buffer, sino, lo congela, es decir, ya no cicla el dato si lo congela, pero se sigue quedando ahi.
Por lo tanto, se considera que fflsuh no es indicado para borra el buffer.
fflush entonces se queda con el ultimo valor congelado.

Este código muestra cómo las etiquetas pueden hacernos retroceder en el código mientras se cumple determinado valor almacenado en x

Dado que la programación es secuencial, se supone que no se pueden mandar a llamar etiquetas si no han sido declaradas con anterioridad, sin embrago, Dev C no tiene problema con mandar a una etiqueta que se declara después.

Este ciclo for actúa como un contador desde el valor asignando en “x“ hasta 0, sin embrago, el continue; hace que cuando la variable “x“ sea igual a 5 el ciclo continúe sin incluir el 5 en el contador.
Básicamente el continue; salta el resto del bloque en un bucle. (usualmente utilizados en bucles)

Este código guardará todo lo que se teclee en la variable “op“ gracias al comando getch() y, lo imprimirá en formato entero, es decir su homologación al ASCII.
El código termina cuando el ciclo termina, es decir, cuando se tecla “0“.

Este código guardará lo que se teclea durante el contador y acabará con el ciclo cuando se teclea el carácter “ESC“.
Características fundamentales de los vectores
Es un apuntador.
Empiezan a guardarse desde la posición 0.
Al declarar un vector todas sus posiciones se guardarán consecutivamente en la memoria RAM
No es posible hacer recorrimientos de bits en sus direcciones de memoria, dado que como se guardan consecutivamente, afectarían a todas las posiciones.

Marca error de compilación debido a que A funciona como un puntero a la dirección de memoria de la primera dirección del vector, por lo que no es posible hacer operaciones de recorrimiento de bits.

Aquí, sin embargo, sí es posible hacer operaciones puesto que al nombrar la posición del vector o al utilizar el puntero * ya estamos apuntando a su valor dentro de la dirección de memoria.

Se respeta la jerarquía de operaciones, en el primer ejemplo primero se recorre dos posiciones del vector y luego se apunta a su valor, por lo que imprime 30.
En el segundo ejemplo primero se apunta al valor de la dirección de memoria de la primera posición y luego se le suma dos al valor, por lo que imprime 12.
Características de inicialización de vectores


Si no se declara una posición del vector, se imprimirá la dirección de memoria de la primera posicion.
Definiciones de & y *
& reference op = La dirección de…
* dereference op = El valor apuntado por…
Definición de apuntador
Variable que almacena una dirección de memeoria

Estas son las distintas formas de imprimir la dirección de memoria de la primer posición del vector.
Es importante recalcar que en la operación &*, se cancelan debido a que son operaciones contrarias.

Se imprimen las direcciones de memoria, aquí nos damos cuenta de que al sumar direcciones de memoria se moverán los bytes correspondientes al tipo de variable, es decir, char se moverá un byte, pero int se moverá 4 bytes.
Definición de string
Es un vector de caracteres que finaliza con un fin de linea \0

Aquí se imprimirá la dirección de memoria de v[0] mas 1, es decir, en este caso la dirección de memoria de la segunda posición

Aquí por jerarquía primero se especifica la posición v[0] y después se le suma 1. Entonces es 11

Aquí se le suma una posición y luego se apunta a ella. Por lo tanto es 20

Es posible declarar un string de caracteres por medio de un vector (pues son lo mismo) y imprimirlo por completo con %s.
En este caso puede o no incluirse en el vector el salto de línea ‘\0‘

Es posible imprimir una cadena de caracteres de estas dos formas, sin embargo, si se usan comillas dobles o se incluye ‘\0‘ en el vector debe tomarse en cuenta que el fin de línea forme parte de la longitud del vector.

Cuando declaramos matrices, la primera dimension corresponde a los renglones y la segunda a las columnas

En matrices de dos o más dimensiones es necesario definir la longitud de todas las dimensiones menos la primera, y además, declarar por lo menos una posición
Uso de apuntadores en matrices

Operaciones con apuntadores en matrices

Operaciones con apuntadores en matrices parte 2


Las operaciones a las variables en un ciclo while se realizan desde el primer instante que se entra al código.