CURSO C++ [Pt. 2]


Rodkaiser

Més que un nodero | Verdunchderechista
Noderador
Nodero
Noder
CURSO DE PROGRAMACION EN C++ [Pt. 2]

Bienvenidos chavales a la segunda parte del curso. En este caso hablaremos de la entrada y salida de datos por terminal o consola y de los distintos tipos de operadores.

Adelante:



Para poder uso de las funciones de entrada y salida en C++, necesitamos la librería estándar "iostream". Que a su vez se compone de otras 2 librerías: "istream" y "ostream". La primera para la entrada(in) y la segunda(out) para la salida.

Bien, con esto ya podemos mostrar datos por pantalla:

C++:
#include<iostream>

int main(){
                                //SALIDA POR PANTALLA
    std::cout<<"Hola noders";         // Hola noders
   
    return 0;
}

Bien, podréis ver que antes de poner "cout", la función de salida de datos hay que poner "std::". Esto se puede solucionar poniendo lo siguiente: "using namespace std" antes de la función principal.
Cabe destacar que también podremos utilizar la función heredada de C: printf(). Pero vaya, no os la recomiendo.

Para la entrada de datos podréis utilizar la función "cin" como vemos a continuación:

C++:
#include<iostream>

using namespace std;

int main(){
   
    char nombre[20];
   
    cout<<"Introduce tu nombre: ";
   
    cin>>nombre;
   
    cout<<endl<<"Hola, me llamo "<<nombre;
   
    return 0;
}

Poco a poco. Ya he incluido "using namespace std" por lo que me ahorraré usar std:: cada vez que utilice "cout" o "cin". Como podéis ver, las flechitas apuntan a distinta dirección en cin y en cout. Estos son los operadores de entrada y salida, que los veremos más adelante. Básicamente marca la dirección donde se dirige la información. También tenéis que ver que cada vez que queramos intercalar datos y texto en el cout hay que poner los angulitos.
La palabra "endl" significa salto de línea, para que la frase aparezca en una línea distinta, también podéis utilizar ["\n"].

Pero lo importante, ¿qué pasa si tu nombre tiene 6 letras? ¿Cómo va a imprimir 20 caracteres si solo has metido 6? Bueno, el compilador se ocupa de eso, solo mostrará lo que hayas escrito y parará.
¿y si eres descendiente de algún rey medieval europeo y tienes cuatro nombres como nuestra ex-reina consorte y te llamas Sofía Margarita Victoria Federica? Pues lo siento pero tendrás dos problemas. El primero es que con el método "cin" solo lees hasta un espacio, es decir te quedarías con Sofía. Para solucionar esto podemos usar "cin.getline(nombre,20)" . Esta función coge todos los caracteres que le pases como parámetro, 20 en este caso, solventando el problema de los espacios, pero si el el nombre sigue siendo más grande que tu vector, te dará problemas al imprimirlo por pantalla y mostrará al menos un carácter mal.

C++:
#include<iostream>

using namespace std;

int main(){
   
    char nombre[20];
   
    //Problema 1
    cout<<"Introduce tu nombre: ";        //Introduce tu nombre: Spooky Nooder
    cin>>nombre;                        //Nombre = Spooky
   
    //Solucion 1
    cout<<"Introduce tu nombre";        //Introduce tu nombre: Spooky Nooder
    cin.getline(nombre,20);                //nombre = Spooky Nooder
   
    cout<<"Tu nombre es: "<<nombre;        //Tu nombre es Spooky Nooder
   
    //Problema 2
    cout<<"Introduce tu nombre: "        //Introduce tu nombre: Sofía Margarita Victoria Federica
    cin.getline(nombre,20);              
    cout<<"Tu nombre es "<<nombre;        //Tu nombre es Sofía Margarita Vic??????
                                        //Las interrogaciones indican que no sabemos con seguridad que sale ahí.
   
    return 0;
}

Pero estas dudas las aclararemos más adelante con la clase String. Por ahora declarad los vectores de char lo suficientemente grandes para que no pase nada, aunque sea un sacrilegio y una pérdida de memoria.

Bueno, esto es lo más básico de entrada y salida de datos por consola. Seguramente me haya saltado algo, si alguien me lo dice lo pongo sin problema. Os recomiendo investigar más sobre el flujo de datos, es un tema bastante denso y por eso no lo pongo todo por aquí por ahora.


OPERADORES EN C++

En C++ existen varios tipos de operadores: el de asignación, los aritméticos, los relacionales(comparación), los lógicos, a nivel de bit(no los abordaré) y el resto de operadores que no se engloban en ninguno de los grupos anteriores.

También se pueden dividir en unarios, binarios y ternarios. Depende de los operandos que necesiten. Nada importante.

Operador de asignación. El operador "=". Sirve para asignar valores a variables. Tampoco tiene mucho misterio. Se puede combinar con los operadores aritméticos, como mostraré a continuación.

Operadores Aritméticos:
Son aquellos operadores que se usan para hacer cálculos con los números reales:

1635861909808.png


De aquí solo explicar el funcionamiento del incremento y decremento, dependiendo de cómo los utilices obtienes un resultado u otro:
C++:
int x=4;
int y=4;

cout<<x++;            //Consola: 4
                    //x=5

cout<<++y;            //Consola: 5
                    //y=5

Podéis ver que la diferencia está en el orden que se ejecutan las órdenes. Si lo pones antes, primero se hace el incremento y luego lo que le pidas, imprimirse en este caso. Si se pone después, primero se ejecuta la orden y luego se incrementa.


Operadores Aritméticos de Asignación.

Como he dicho antes, estos son la mezcla de los operadores aritméticos con el de asignación, su función es la misma que el del operador aritmético correspondiente siendo el primer parámetro la propia variable a la que se aplica:

Suponemos X=6

1635862455451.png


Podéis ver que x*=5 es lo mismo que x=x*5. Por esto digo que es lo mismo que hacer la operación normal utilizando la propia variable como primer operando y luego asignarle el valor. Los operadores "++" y "--" no están aquí porque su función ya es modificar la variable en sí.


Operadores relacionales o de comparación en C++

Bien, estos operadores sirven para comparar datos. Devuelven un valor booleano, es decir, true o false. Para utilizarlos, los datos comparados deben ser del mismo tipo: no puedes comparar un número con una cadena de caracteres, sí puedes comparar un float con un int. Adjunto tabla, aunque no me gusta mucho la explicación, así que pondré un trozo explicándolo yo mismo. Para empezar no es "¡=", es "!="

1635863016019.png


Aunque se ve bastante claro, todavía no os he explicado los condicionales, aquí va mi explicación:

C++:
bool comprueba;

int numero=40;

float decimal=5.7;

char pal1[]="Hola",pal2[]="Adios";  //Sí, se pueden declarar varias variables del mismo
                                    // tipo en una misma línea, separando por comas

comprueba=numero>decimal;            //comprueba=true

comprueba=numero!=decimal;            //comprueba=true

comprueba=(decimal==pal1);            //ERROR

comprueba=(pal1!=pal2);                //pal1 es distinto a pal2, comprueba=true

comprueba=pal1>pal2;                //comprueba=true

//Cómo comprueba que una cadena de caracteres es mayor o menor que otra? Porque ver
//si es igual sí es fácil y lógico, pero cuál es mayor?
//Os acordáis que os dije que cada caracter tiene un valor asociado entre 0 y 255?
//Pues va comparando cada carácter empezando por el principio, en el momento que un
//carácter de una cadena es mayor que el de la otra, esa cadena es mayor


Operadores lógicos en C++

Bueno, estos operadores son solo 3: And lógico(&&), Or lógico( || ) y la negación lógica (!).

Todos devuelven valores booleanos. El and devuelve true cuando todos los operandos son true, el or cuando alguno de ellos es true y el negado hace honor a su nombre y devuelve la negación del valor.

Os los explicaré yo mismo:

C++:
bool x=true,y=false,z=true;

bool resultado;

resultado=x&&y;            //resultado = false

resultado=x||y;            //resultado = true

resultado=z&&!y;        //resultado = true

resultado = !z;            //resultado=false

A estos operadores les puedes aplicar el álgebra de Boole y las leyes de Morgan. Si no sabes lo que son, estás tardando en buscarlo.


El resto de operadores no los enseñaré como tal porque los iremos utilizando conforme vayamos viendo cosas nuevas.

La verdad, no sé cómo he hecho esto hoy teniendo ya todos los exámenes, pero la verdad es que me da menos pereza que estudiar xd.

Aquí os dejo la primera parte del curso: Curso C++ Parte 1

Lo siguiente que veremos será la clase String, para quitarnos ya de las putas cadenas de caracteres, y los condicionales.

Me voy a estudiar y lo de siempre, se agradece un laik :)
 

kTo

Miembro muy activo
Noderador
Nodero
Noder
Buen post!!

Si quieres puedo sumarme a ella, con bucles, exportar/ importar archivos, vectores…
 
Última edición: