Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Tipo de dato Enum

10/16
Recursos

Aportes 62

Preguntas 16

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Sobre esta clase, reitero una opinión que tuve sobre la clase anterior: El orden en el cual se están dictando las clases no es el adecuado. Si una persona no tiene conocimientos sobre programación, (no sabe qué es una variable, no entiende que los lenguajes tienen una sintaxis propia, no sabe qué es una función, no sabe cómo se maneja o asigna la memoria, no entiende que hay una secuencia lógica para escribir las instrucciones, etc), se le va a dificultar bastante entender los contenidos.

Para personas que tenemos algo de experiencia, hay cosas que son muy evidentes, sin embargo para alguien nuevo podría ser bastante confuso.

Aunque este curso puede ser útil, si alguien quiere aprender C muy bien explicado y sin conocimiento previo, pueden tomar un excelente curso de platzi del profesor Mauro Chojrin. Se llama Curso de introducción a C 2019.

https://platzi.com/clases/lenguaje-c-2019/

Espero les sea útil.

Un resumen acerca de enum:

  • Used to assign names to integral constants.

  • If we dont assigns values to enum names then, automatically compiler will start to assign values since 0
    ej=

enum letters {A, B, C, D};
Me: ¿What´s A? 
Computer You didn´t say me. I´ll define A as 0, B as 1, and so on.
  • We can asiggn same values to different names
Me: enum XYJUANITO_123 {Z= 0 X= 0 Y= 0 JUANITO_123= 0};
Computer: That´s okay

All unsigned names will get value as a value of previous name +1

enum jumm{A=1, S=11, D, F =77, G};
Me: ¿What´s D and G?
Computer: 12 and 78
  • Enum only can be an interger
enum X {A= 1, P = 3.141692}C;
C = P
printf("%d", C)
Computer: ¿Are you kidding me?
  • All enum must be unique in their scope.

enum Q{X=0, Y=0, Z=0};
enum W{X = 1, P= 0, Omaiga= 0};

ya he abandonado 3 cursos de la carrera de iot porque exigen conocimientos previos o hardware especifico.
aquí hay conceptos que no se explican con claridad o simplemente no se explican.

confió en platzi pero esto no me agrada

<h3>Enum</h3>
  • enum: guarda valores constantes en una lista, aunque puede incluir variables.
#include <stdio.h>

enum weekDays {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}

int main()
{
    enum weekDays today;
    today = Wednesday;
    printf("Day %d", today + 1);
    return 0;
}
enum designElements
{
    ITALIC = 1;
    BOLD = 2;
    STRIKE = 3;
}
  • "El tipo de datos Enum sirve para nombrar o identificar un determinado valor (usar un nombre que tengan algún sentido para el programador) , y así facilitar la lectura y mantenimiento del programa. En otras palabras es un apodo que se le da a un valor numérico, el cual tiene un sentido para el programador dentro del contexto del programa."

  • "Los nombres o identificadores asignados dentro del enum, únicamente podrán ser cadenas de caracter que no empiecen por valores numéricos. (Tiene las mismas restricciones que los nombres de las variables). Si intenta asignar como identificador un valor numérico (int, float, double) o una cadena de caracteres que empiece por un número (por ejemplo 45a), el compilador arrojará un error. En este sentido, un nombre o identificador actuaría más como el nombre de una variable que como una variable de tipo string en si misma. "

“Nota: recuerde que el tipo de datos string no existe en C.”

Como plus:

  • La función sizeof() nos devuelve el tamaño de una variable en bytes.
  • Con \n hacemos retorno de carro y salto de línea.
sizeof(card)

Esto fue lo que entendí

[enum] : Es un tipo de dato que asigna valores a una lista de constantes 
        enum weekDays {Dom, Lun, Mar, Mie, Jue, Vie, Sab};
                        0    1    2    3    4    5    6

Muy buena explicación para complementar Enumeration in C

Al intentar correr el código del final del ejercicio me encontré con un error al interpolar el texto con sizeof
especificamente:

printf("Size of var %zu", sizeof(card));

Tuve que cambiar “%d” a “%zu”, me pasó con:

$ gcc --version       
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Este curso se titula “CURSO DE INTRODUCCION A C”. Pero no se apega a lo que se enseña. No es recomendable para principiantes, para poder entenderlo es necesario haber realizado algún curso básico de C. Este profesor se equivoca mucho.

Cuando al profe se le olvidó que era jueves

https://www.youtube.com/watch?v=aAUyU_WlIi4

Pienso que Celis debió profundizar más en el uso de la función sizeof.

Excelente no conocía esa forma de guardar valores constantes, creo que conocer a profundidad cada funcionalidad ayuda a no pasar horas y horas escribiendo algo ya establecido o como se dice en la carrera “inventando el agua tibia de nuevo”

Se javascript y algo de python y no se entiende nada de lo que está haciendo. No dudo de su profesionalidad como programador, pero como persona que tiene que trasmitir los conocimientos de la materia de la forma más entendible para el alumno (profesor) lo encuentro muy pobre. Espero lo corrijan ya que estoy utilizando platzi como refuerzo para mi carrera de Ingenieria y no estoy viendo con esto resultados positivos ya que me deja igual que si leyera el libro…

Yo prefiero escribir los identificadores de variables etc en castellano, sobre todo en lenguajes de POO porque de ese modo puedo comprobar de un vistazo cuales son los elementos del sistema (que estarán en inglés) de los elementos creados (que estarán en castellano). En POO es un lío de nombres de clases, métodos, instancias etc y de esta manera identifico mejor las instancias etc. Además el código será más seguro frente a hackers que seguro usarán inglés.
Otra cosa es que trabajes en un equipo internacional y necesites hacerte comprender por otros programadores.

Enfoque a sistemas embebidos:
Estoy utilizando un sensor de presión barométrica en un proyecto, para su calibración el fabricante asigna o almacena algunas constantes en la memoria PROM del mismo con las cuales se deben realizar diversos procesos. Allí estoy utilizando dicho tipo de dato y es muy útil, más de lo que imaginaba.

#include <stdio.h>

enum deck
{
    club = 0,
    diamonds = 5,
    hearts = 10,
    spades = 15,
} card;

int main()
{
    card = spades;
    printf("Card size %d \n", sizeof(card));
    return 0;
}
  #include <stdio.h>

enum weekDays {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; /* Es como una lista. pero también se le pueden 
  asignar valores a las variables de la lista. si no se hace, por defecto será “constante1 = 0, constante2 = 1, constante3 = 2” y así … */
 
 int main(){
     enum weekDays today;
     today = Sunday;
     printf("DAY %d", today); /*colocamos "/d", por que queremos de salida un valor entero. */
     return 0;
 }

En mi caso me salió este error

enums.c:16:26: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
   16 |     printf("Size of var %d", sizeof(card));
      |                         ~^   ~~~~~~~~~~~~
      |                          |   |
      |                          int long unsigned int
      |                         %ld

Lo solucioné remplazando el %d por un %zu

O sea el enum vienen siendo lo mismo que un objeto o una clase??

Escogi el tema de videojuegos y en mi primer curso hablaban de un lenguaje llamado C, y pues ya que comensaron a usar este lenguaje en el primer curso ,me vine a estudiar primero El lenguaje de programacion C,pero es algo confuso por que en la ruta de videojuegos no me aparecia este curso primero, yo no se nada de lenguaje de programacion, este seria mi primero, pero al parecer hay gente que esta diciendo que es recomendable entrar a otro curso de C para poder entender este, jajajaja que confusion. Entonces entrare a mas cursos y haci hasta que me de cuenta que ya me e alejado de lo que enverdad queria estudiar, o es que la ruta de aprendisaje esta mal estructurada?. Sea como sea, estoy entendiendo este curso, aunque estoy haciendo varios ejercicios para poder entender mas, ya que aveces si no entiendo a la primera lo que el profesor esta explicando, Saludos profesor.

#include <stdio.h>

enum weekDays
{
    Sunday,
    Monday,
    Tuesday,
    Wendesday,
    Thursday,
    Friday,
    Saturday
};

int main()
{
    enum weekDays today;
    today = Sunday;
    printf("Day %d", today+1);
    return 0;
}
#include <stdio.h>

enum deck
{
    club = 0,
    diamonds = 5,
    hearts = 10,
    spades = 15,
} card;

int main()
{
    card = spades;
    printf("Size of var %zu", sizeof(card));
    return 0;
}

Una enumeración o Enum, es un tipo de dato que nos permite crear una variable, que define todos los posibles valores fijos que pueda contener.
Un tipo de enumeración consiste en un conjunto de constantes denominado lista de enumeradores.

Aquí dejo un link con ejercicios iguales o muy similares a los dados en la clase para los que queremos que nos quede un poco más claro.

Muy excelente contenido me ayudo muchísimo puesto que jamas había usado este tipo de datos el cual lo veo bastante útil

por cierto les recomiendo que lean la documentacion de ANSI C11, es increible hay anotaciones y explican de forma muy clara.

Otro tip es :

  • ARGC(aguments counts )
  • ARGV(arguments vector)

para quienes no saben el significado de esos parametros de funciones

Tengo un profe que escribe todo en español, y he querido preguntar pero me da cosa porque puede que lo haga para explicar de forma mas sencilla, asi que a fines educativo si se puede escribir vars en español

#include <stdio.h>

//código enum como constante y declarando today en el int
enum week_days
{
monday, tuesday, wednesday, thursday, friday, saturday, sunday
};

//declarando card en el mismo enum
enum deck
{
club = 0,
diamonds = 5,
hearts = 10,
spades = 15
}
card;

int main()
{
//declarando today dentro del int main
enum week_days today;
today = wednesday;
printf(“Day %d”, today + 1);
printf("\n");

  //haciendo uso de el card declarado en el enum fuera del int main
  card = spades;
  printf("Cards %d", card);
  printf("\n");
  printf("Size of card %d", sizeof(card));

  return 0;

}
así quedó mi código XD

para los que se sienten medio perdidos con el curso, el curso es de antes de ciertos cambios en los cursos de platzi, como en los prework actuales que ayudan bastante, otra cosa es que el tema de C se está dando como si vinieses ya de C/C++ básico (osea de ver por encimita el tema de que en C todo lo tienes que declarar antes, por eso el detalle de que ¿para qué quiero un void? El void hasta donde yo veo se usa mucho en malware o en opciones dónde el código se rompe, pero necesitas que el programa siga vivo, por ejemplo cuando dice que hagas “un casteo a una parte de la memoria” ésto se hace en hacking de sombrero negro donde no sabes dónde está lo que estás buscando (por ejemplo un string o una base de datos), pero sí sabes qué podría ser (enteros, funciones, bases de datos, archivos específicos, etc) entonces lo que haces es usar C/C++ para éste tipo de trabajo, por ejemplo en javascript manejas un poco de C respecto a la escritura y sintaxis, pero no es C crudo, mientras que en C tienes que moler más cosas.
Debido que el curso es de antes de que ricardo celis actualizara las métricas, recomiendo que los que lo estén tomando tomen un libro de deitel de programación y alguno de algún sitio web gratuito y luego regresen a éste, ya que encontrarán muchas lagunas en el curso, o al menos no lo tendrán tan explicito como los de javascript recientes, yo igual dejé colgados ya 2 cursos porque justamente la forma de la didáctica no es la adecuada para el estado en el que entra la mayoría de estudiantes de platzi (osea que entramos con 0% información del tema ( o al menos la más relevante)).

en weekDays es donde tiene los valores de la semana y dentro del main esta creando una variable enum del tipo weekDays llamada today osea today hereda todos los valores de enum weekDays

enum frontend {HTML=0, CSS=1, JS=2, SASS=3, WEBPACK=4, REACT=5}

Se usa para guardar todas las variables posibles de ese tipo.

enum vocales {a=0, e=1, i=2, o=3, u=4}

Si lograron ver la fecha de la clase, fue el jueves 30 de abril de 2020.

El tipo de dato enum también se podría usar para guardar los nombres de los meses del año, las estaciones del año, los integrantes de un equipo …

Buenas peña.
 
Mirando un poco el segundo ejemplo, entiendo que la variable card que se pone después de la llave de cierre de la creación del enum, es como si se declarara en la función main, el enum card de tipo deck, es decir, enum deck card.
 
Probarlo con enum weekDays y comentar la línea de la declaración, el resultado es el mismo.:

enum weekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } today;

Comparto el código, el REPL está en revisión.

#include <stdio.h>

enum weekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

enum deck {
  club = 0,
  diamonds = 5,
  hearts = 10,
  spades = 15
};

int main(void) {
  
  printf("\nTipo de Datos => Enum\n\n\n");

  enum weekDays today;
  today = Sunday;
  printf("Day %d \n\n", today + 1);

  enum deck card;
  card = spades;
  printf("Card Power = %d \n", card);
  printf("Size of var = %lu \n\n", sizeof(card));
  
  return 0;
}

Un saludo y gracias.

Les dejo éste enlace para que conozcan
todas las posibilidades de String Format
para Printf

Gente, por favor, aquellos que se sientan perdidos o que piensen que se les dificulta cada clase vean el curso de Daniela Coyotzi. Es un curso excelente (De hecho ojalá ella diera estos xd)

Para los que les cuesta el curso, les recomiendo hacer los primeros cursos de la escuela de programación

Alí encontraran todos los fundamentos

Los enums se declaran con camel case

Las constantes en los enums, solo deben tener un valor, es decir, que no pueden ser arrays.

Sugiero que el profesor debería de tener de antemano laminas con conceptos e ilustraciones de la clase, para concentrarse más en explicar y menos en escribir.

#include <stdio.h>

typedef enum {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday} days;

int main(){
  days today;
  printf("Day %d",today = Monday);
  return 0;
} 

typedef es una palabra reservada usada en C/C++ para asignar un nombre alternativo a tipos existentes, para que asi podamos crear el codigo mas legible.

Aqui lo unico que realice fue indicar con typedef el enum y fuera de llaves le indique el nombre que queria, luego utilice ese nombre para crear una variable referencia como hizo el profesor.

Lo unico que cambia es:

De esto:
enum var_name_enum var_name
a esto:
var_name_enum var_name

La función sizeof() Para reservar memoria se debe saber exactamente el número de bytes que ocupa cualquier estructura de datos. … Con esta función puedes, por tanto, resolver cualquier duda que tengas sobre el tamaño de una estructura de datos. Basta con escribir un pequeño programa que imprima su tamaño con sizeof()

No quiero sonar pesado, pero no recomiendo este curso para alguien que este aprendiendo.

Hay muchas cosas que el profe ha hecho y no las explica o simplemente las pasa por alto.

Con respecto a la clase, estoy de acuerdo que para algunas persona que son nuevas se les hace difícil comprender los temas, en mi experiencia (y lo digo en base ha estudiar en platzi un tiempo ya ) recomendaría hacer la escuela de JavaScript primero antes de tomar este curso ya que esta me ha ayudado a comprender mejor los conceptos

Una excelente explicación, de un tema que pocos conocemos. Sigamos 😃

Los ENUM entonces serian como los Constructores en Java?

no tengo mucha idea de programacion, pero me parecio super practico y bien explicado sobretodo con lo de cartas y modificar valores con el emun

Mas detalle del tipo de dato Enum

En este video se explican algunos facts sobre el enum: Enumerations in C

Buen material

creo que aunque c no es orientado a objetos pude entender que weekDays hace el papel de un aunque es un arreglo y por esto today es de tipo weekDays

A como lo explico el profesor entendí que enum vendría a tener un comportamiento similar a usar #define en el cual se indica que escribir el nombre especificado equivale a escribir el valor que se le asigna. Entonces por ejemplo en el ejercicio del profesor cuando se usa "spades" es equivalente a escribir 15. Entonces a como yo lo veo es como una colección de #define jaja. Considero que hubiera sido mejor explicar las directivas precompilador antes de explicar este tipo de dato, por qué es difícil de asimilar si se desconoce de programación.

Usaría “enum” en las fallas de un sistema de control de temperatura, para indicar el o los posibles problemas que se pudieran presentar.

De manera MUUUY básica, se pueden usar los enums para asignar nombres dentro de un menú que estén relacionados a un número

Si no les late mucho el Visual Studio Code, pueden probar con CLion en su versión community es muy completo o también usar el mismo Vim, este último lo vengo usando y va muy bien.

Un poco complicado captar los conceptos si no tienes previos conosimientos de algun otro lenguaje de programacion

enum Pc {Motherboard, Cpu, Ram, GraficCard, Supplypower;}

Gracias!

Los Enum sirven para guardar información o variables que yo pueda llamar, en el programa.

El nombre de los %d es placeHolders por si alguien quiere profundizar

#include <stdio.h>


enum weekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

int main()
{
    enum weekDays today;
    today = Sunday;
    printf("Day %d", today+1);
    return 0;
}```

Qué quiere decir cuando dice: vamos a pasarle el valor card. Me perdí ahí

¿Enum es lo mismo a listas o arreglos en C?