Autor Tema: Ejercicio de estructura

0 Usuarios y 1 Visitante están viendo este tema.

07 Septiembre, 2025, 09:45 am
Leído 7799 veces

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
Problema 1:

Se desea guardar los sueldos de 5 operarios. Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto momento los 5 sueldos almacenados en memoria. Empleando un vector solo se requiere definir un único nombre y accedemos a cada elemento por medio del subíndice.

Hola, el ejercicio ya lo tengo resuelto pero me serviría ver como se resolvería definiendo esas 5 variables y no empleando el vector.

Gracias.

07 Septiembre, 2025, 12:34 pm
Respuesta #1

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada

Problema 1:

Se desea guardar los sueldos de 5 operarios. Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto momento los 5 sueldos almacenados en memoria. Empleando un vector solo se requiere definir un único nombre y accedemos a cada elemento por medio del subíndice.

Hola, el ejercicio ya lo tengo resuelto pero me serviría ver como se resolvería definiendo esas 5 variables y no empleando el vector.

Gracias.
Hola , es lo más sencillo, guardas el valor del monto del sueldo en una variable cuyo nombre  te permita identificar de que persona se trata.

Código: [Seleccionar]
Sueldo_Andres=1300
Sueldo_Beatriz=1300
Sueldo_Carlos=1400
Sueldo_Daniela=1550
Sueldo_Ernesto=1550

Si no quieres tipear tanto eliges un valor de variables más sencilla , por ejemplo la primera  letra del nombre.

Código: [Seleccionar]
A=1300
B=1300
C=1400
D=1550
E=1550
Si son muchos nombres y las letras iniciales se repiten puedes usar una línea de comentario para dejar registro de que empleado se trata el nombre de la variable
Código: [Seleccionar]
'''Andres es x, Beatriz es y,Carlos es z, Daniela es u,Ernesto es v'''
x=1300
y=1300
z=1400
u=1550
v=1550


Pero como por lo general usarás muchas más variables o registros que 5 y a todas esas variables les aplicarás las mismas operaciones, llámese calcular bonificaciones por antigüedad, horas extras, descuentos de cargas sociales impuestos, sindicatos  manejar muchos nombres de variables con o sin relación al nombre se hace inviable entonces se manejan en un array ,vector o matriz, donde el subindice identifica al empleado, y cada calculo lo haces en un subprocedimiento , te devuelve el valor calculado para cada empleado que lo vuelves a guardar en otra o la misma variable identificada por el mismo subindice.

Como no nos das un enunciado  especifico,  para hacer algo con las variables,  solo guardar las variables,  con esto es suficiente,  pero imagina que te piden que cargues  el nombre de la persona y el sueldo en tiempo de ejecución,  allí  no tienes forma de crear una variable  con el nombre de la persona, es por eso que se pensó en programar vectores donde se almacenan los datos de la persona nombre,  edad, documento, dirección,  obra social, sueldo, etc, y luego otro vector donde cada registro es uno de los vectores anteriores,  así en un solo vector  te quedan todos los datos de manera ordenada y fácil de acceder  por algún atributo, por ejemplo los que ganen más de 1500, los del documento  terminado en 3...etc.
De otra manera cada resultado  tienes que tipear las líneas para manejar cada nombre de variable  distinto,  esa es la ventaja de los vectores  ,aún me queda la intriga  de porqué buscarías resolver  por la vía más difícil  que es reprogramar todo si cambias, quitas o agregas un empleado, ya que es mejor cambiar el contenido de un registro, por eso esta la frase somos un número...(el del subíndice).
Saludos  \(\mathbb {R}^3\)

07 Septiembre, 2025, 05:24 pm
Respuesta #2

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0

Problema 1:

Se desea guardar los sueldos de 5 operarios. Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto momento los 5 sueldos almacenados en memoria. Empleando un vector solo se requiere definir un único nombre y accedemos a cada elemento por medio del subíndice.

Hola, el ejercicio ya lo tengo resuelto pero me serviría ver como se resolvería definiendo esas 5 variables y no empleando el vector.

Gracias.
Hola , es lo más sencillo, guardas el valor del monto del sueldo en una variable cuyo nombre  te permita identificar de que persona se trata.

Código: [Seleccionar]
Sueldo_Andres=1300
Sueldo_Beatriz=1300
Sueldo_Carlos=1400
Sueldo_Daniela=1550
Sueldo_Ernesto=1550

Si no quieres tipear tanto eliges un valor de variables más sencilla , por ejemplo la primera  letra del nombre.

Código: [Seleccionar]
A=1300
B=1300
C=1400
D=1550
E=1550
Si son muchos nombres y las letras iniciales se repiten puedes usar una línea de comentario para dejar registro de que empleado se trata el nombre de la variable
Código: [Seleccionar]
'''Andres es x, Beatriz es y,Carlos es z, Daniela es u,Ernesto es v'''
x=1300
y=1300
z=1400
u=1550
v=1550


Pero como por lo general usarás muchas más variables o registros que 5 y a todas esas variables les aplicarás las mismas operaciones, llámese calcular bonificaciones por antigüedad, horas extras, descuentos de cargas sociales impuestos, sindicatos  manejar muchos nombres de variables con o sin relación al nombre se hace inviable entonces se manejan en un array ,vector o matriz, donde el subindice identifica al empleado, y cada calculo lo haces en un subprocedimiento , te devuelve el valor calculado para cada empleado que lo vuelves a guardar en otra o la misma variable identificada por el mismo subindice.

Como no nos das un enunciado  especifico,  para hacer algo con las variables,  solo guardar las variables,  con esto es suficiente,  pero imagina que te piden que cargues  el nombre de la persona y el sueldo en tiempo de ejecución,  allí  no tienes forma de crear una variable  con el nombre de la persona, es por eso que se pensó en programar vectores donde se almacenan los datos de la persona nombre,  edad, documento, dirección,  obra social, sueldo, etc, y luego otro vector donde cada registro es uno de los vectores anteriores,  así en un solo vector  te quedan todos los datos de manera ordenada y fácil de acceder  por algún atributo, por ejemplo los que ganen más de 1500, los del documento  terminado en 3...etc.
De otra manera cada resultado  tienes que tipear las líneas para manejar cada nombre de variable  distinto,  esa es la ventaja de los vectores  ,aún me queda la intriga  de porqué buscarías resolver  por la vía más difícil  que es reprogramar todo si cambias, quitas o agregas un empleado, ya que es mejor cambiar el contenido de un registro, por eso esta la frase somos un número...(el del subíndice).

Gracias por tu respuesta Richard me estas ayudando mucho. Te molesto con una cosa mas, dejo el código para darme a entender en esto que te voy a preguntar, es la primera vez que estoy programando por eso me cuesta también formular ciertas preguntas dado que no entiendo casi nada.

Código: [Seleccionar]
#include<stdio.h>
#include<conio.h>

int main()
{
    int f;
    int sueldos[5];
    //Carga del vector
    for (f=0; f<5; f++)
    {
        printf("Ingrese valor del sueldo:");
        scanf("%i",&sueldos[f]);
    }
    printf("Listado de sueldos.");
    printf("\n");
    //impresion del vector
    for(f=0; f<5; f++)
    {
        printf("%i",sueldos[f]);
        printf("\n");
    }
    getch();
    return 0;
}

Ese es el código resuelto usando un vector, ¿que pasaría si quiero resolver el mismo problema usando la palabra clave struct (estructura), o sea sin usar vector? Se que es medio raro el asunto pero para darme a entender bien estoy cursando en la facultad sistemas y el profesor me da a entender que con struct puedo agrupar diversas variables de un tipo pero sería muy repetitivo y caótico tener que trabajar con una estructura así si son muchos datos, entonces puedo usar un vector de n dimensiones e ir cargando los datos allí. No logro encontrar un ejemplo de estructuras sin vector y uno empleando vectores para ver la diferencia, estoy buscando eso en realidad.

07 Septiembre, 2025, 08:08 pm
Respuesta #3

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada

Gracias por tu respuesta Richard me estas ayudando mucho. Te molesto con una cosa mas, dejo el código para darme a entender en esto que te voy a preguntar, es la primera vez que estoy programando por eso me cuesta también formular ciertas preguntas dado que no entiendo casi nada.

Código: [Seleccionar]
#include<stdio.h>
#include<conio.h>

int main()
{
    int f;
    int sueldos[5];
    //Carga del vector
    for (f=0; f<5; f++)
    {
        printf("Ingrese valor del sueldo:");
        scanf("%i",&sueldos[f]);
    }
    printf("Listado de sueldos.");
    printf("\n");
    //impresion del vector
    for(f=0; f<5; f++)
    {
        printf("%i",sueldos[f]);
        printf("\n");
    }
    getch();
    return 0;
}


Ese es el código resuelto usando un vector, ¿que pasaría si quiero resolver el mismo problema usando la palabra clave struct (estructura), o sea sin usar vector? Se que es medio raro el asunto pero para darme a entender bien estoy cursando en la facultad sistemas y el profesor me da a entender que con struct puedo agrupar diversas variables de un tipo pero sería muy repetitivo y caótico tener que trabajar con una estructura así si son muchos datos, entonces puedo usar un vector de n dimensiones e ir cargando los datos allí. No logro encontrar un ejemplo de estructuras sin vector y uno empleando vectores para ver la diferencia, estoy buscando eso en realidad.

Hola, no soy experto en computación, es otro de mis hobbies, pero veamos...
La senctencia struct, es basicamente un constructor de objetos, no se hasta donde hayas avanzado en eso en la materia , pero lo que hace es asginar , propiedades y metodos a una variable. un ejemplo sencillo creas una variable que se llama "auto", y a la que le enumeras que tiene, ruedas, puertas, llave de encendido, color =azul.... luego accedes y asignas un determinado nombre y sobre él le asignas  4 ruedas, 4 puertas, una llave de encendido, y será de color azul.... por ej lo llamas  Mercedes_Benz   y ya tienes un Mercedes Benz azul al que le puedes reasignar el numero de ruedas 6, el  puertas 3 y puedes verificar si llave de encendido esta en off o en on....  del mismo modo, puedes crear otros objetos Peugeot, Renault, ... y a todos tienes que asignarle caracteristicas y otras se la puedes dar de entrada, algunas la podras cambiar y otras no, pero tendran por defecto las que asignes por ejemplo seran todos de color azul , hasta que se lo cambies.

Bueno volviendo al tema sueldos, y al código que pones, allí no estas relacionando un nombre con su sueldo, solo estás cargando 5 veces un valor que lo pones en el vector "sueldos", y luego lo imprimes... alli repito no relacionas el nombre de ninguna persona con su sueldo.
con
Código: [Seleccionar]
struct Personal {   // declaras la estructura con el nombre Personal
  int DNI;           // es una variable miembro de la estructura  en una  variable entera allí guradaras el  numero de DNI por eejemplo
  char Apellido;       // en una variable char guardas el apellido

  char Nombres;       // en una variable char guardas sus nombres

  char Telefono;       // en una variable char guardas el telefono de contacto

  int Sueldo;       // en una variable entera en este caso,  o long  como quieras guardas el valor del sueldo.
  int Edad;       // en una variable entera  guardas el valor de su edad.
}; //


luego puedes  crear una variable que se llame Juan_Perez asignadole la misma estructura, eso tienes que verlo como se hace, "creo solo creo" que se hace así

Código: [Seleccionar]
struct Personal Juan_Perez;
Asi que con scanf puedes cargarle a Juan_Perez su sueldo, su dni , Sus nombres etc, pero de nuevo  estarías manejando de a uno cada persona, aúnque  tendrías facilmente acceso a sus datos que ya sabes cuales nombres reciben   

puede luego imprimirlos como y cuando quieras,  haciendo (revisa la sintaxis)

Código: [Seleccionar]
printf("%i",Juan_Perez.Sueldo);
printf("%i",Mario_Gomez.Edad);
printf("%i",Carmen_Electra.Apellido);

te saldra  depende de lo que hayas cargado algo como

1300
35
Patrick

si quieres saber el sueldo de todos tendras que sumar

total =Juan_Perez.Sueldo+Mario_Gomez.Sueldo+Carmen_Electra.Sueldo

En cambio con los array bien trabajados ,puedes hacer cálculos mas rápidos en pocas lineas y  también puedes trabajar hacer los  mismos cálculos con struct sin tipear los nombres o crear variables pero son cosas dificiles de explicar en pocas líneas aquí en el foro.

Saludos  \(\mathbb {R}^3\)

07 Septiembre, 2025, 09:04 pm
Respuesta #4

Nub

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,458
  • País: 00
  • Karma: +0/-0
el profesor me da a entender que con struct puedo agrupar diversas variables de un tipo pero sería muy repetitivo y caótico tener que trabajar con una estructura así si son muchos datos, entonces puedo usar un vector de n dimensiones e ir cargando los datos allí.
Como tu mismo dijiste, estas aprendiendo y creo que estas buscando la forma de hacerlo mas eficiente :laugh:, y si, es caotico hacer 500 structs o 500 variables para almacenar un dato pero el punto es que creo que ese ejercicio era solo para ilustrar algo que queria el profesor, no para hacerlo lo mas eficiente posible, por eso decia solo 5 datos, si fueran 100 datos ya usar 100 variables es mas caotico. Supongo que ese ejerció venia para enseñar que es un array o que es un struct y listo.

PD: tambien podes hacer un array de structs, o una lista de structs con los structs "Personal" que dijo Richard pero eso es otra historia :)

Ah y como te dijo Richard, revisa la sintaxis siempre porque por ejemplo para guardar el apellido o nombre de una persona en una variable no es con char, char es una letra sola, debe ser un array de chars. Igual a esto probablemente nadie le importe y solo te estan enseñando los fundamentos para programar, eso de que un texto sea un array de caracteres es mas del lenguaje... (o en el fondo es asi ;) )

07 Septiembre, 2025, 10:22 pm
Respuesta #5

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0

Gracias por tu respuesta Richard me estas ayudando mucho. Te molesto con una cosa mas, dejo el código para darme a entender en esto que te voy a preguntar, es la primera vez que estoy programando por eso me cuesta también formular ciertas preguntas dado que no entiendo casi nada.

Código: [Seleccionar]
#include<stdio.h>
#include<conio.h>

int main()
{
    int f;
    int sueldos[5];
    //Carga del vector
    for (f=0; f<5; f++)
    {
        printf("Ingrese valor del sueldo:");
        scanf("%i",&sueldos[f]);
    }
    printf("Listado de sueldos.");
    printf("\n");
    //impresion del vector
    for(f=0; f<5; f++)
    {
        printf("%i",sueldos[f]);
        printf("\n");
    }
    getch();
    return 0;
}


Ese es el código resuelto usando un vector, ¿que pasaría si quiero resolver el mismo problema usando la palabra clave struct (estructura), o sea sin usar vector? Se que es medio raro el asunto pero para darme a entender bien estoy cursando en la facultad sistemas y el profesor me da a entender que con struct puedo agrupar diversas variables de un tipo pero sería muy repetitivo y caótico tener que trabajar con una estructura así si son muchos datos, entonces puedo usar un vector de n dimensiones e ir cargando los datos allí. No logro encontrar un ejemplo de estructuras sin vector y uno empleando vectores para ver la diferencia, estoy buscando eso en realidad.

Hola, no soy experto en computación, es otro de mis hobbies, pero veamos...
La senctencia struct, es basicamente un constructor de objetos, no se hasta donde hayas avanzado en eso en la materia , pero lo que hace es asginar , propiedades y metodos a una variable. un ejemplo sencillo creas una variable que se llama "auto", y a la que le enumeras que tiene, ruedas, puertas, llave de encendido, color =azul.... luego accedes y asignas un determinado nombre y sobre él le asignas  4 ruedas, 4 puertas, una llave de encendido, y será de color azul.... por ej lo llamas  Mercedes_Benz   y ya tienes un Mercedes Benz azul al que le puedes reasignar el numero de ruedas 6, el  puertas 3 y puedes verificar si llave de encendido esta en off o en on....  del mismo modo, puedes crear otros objetos Peugeot, Renault, ... y a todos tienes que asignarle caracteristicas y otras se la puedes dar de entrada, algunas la podras cambiar y otras no, pero tendran por defecto las que asignes por ejemplo seran todos de color azul , hasta que se lo cambies.

Bueno volviendo al tema sueldos, y al código que pones, allí no estas relacionando un nombre con su sueldo, solo estás cargando 5 veces un valor que lo pones en el vector "sueldos", y luego lo imprimes... alli repito no relacionas el nombre de ninguna persona con su sueldo.
con
Código: [Seleccionar]
struct Personal {   // declaras la estructura con el nombre Personal
  int DNI;           // es una variable miembro de la estructura  en una  variable entera allí guradaras el  numero de DNI por eejemplo
  char Apellido;       // en una variable char guardas el apellido

  char Nombres;       // en una variable char guardas sus nombres

  char Telefono;       // en una variable char guardas el telefono de contacto

  int Sueldo;       // en una variable entera en este caso,  o long  como quieras guardas el valor del sueldo.
  int Edad;       // en una variable entera  guardas el valor de su edad.
}; //


luego puedes  crear una variable que se llame Juan_Perez asignadole la misma estructura, eso tienes que verlo como se hace, "creo solo creo" que se hace así

Código: [Seleccionar]
struct Personal Juan_Perez;
Asi que con scanf puedes cargarle a Juan_Perez su sueldo, su dni , Sus nombres etc, pero de nuevo  estarías manejando de a uno cada persona, aúnque  tendrías facilmente acceso a sus datos que ya sabes cuales nombres reciben   

puede luego imprimirlos como y cuando quieras,  haciendo (revisa la sintaxis)

Código: [Seleccionar]
printf("%i",Juan_Perez.Sueldo);
printf("%i",Mario_Gomez.Edad);
printf("%i",Carmen_Electra.Apellido);

te saldra  depende de lo que hayas cargado algo como

1300
35
Patrick

si quieres saber el sueldo de todos tendras que sumar

total =Juan_Perez.Sueldo+Mario_Gomez.Sueldo+Carmen_Electra.Sueldo

En cambio con los array bien trabajados ,puedes hacer cálculos mas rápidos en pocas lineas y  también puedes trabajar hacer los  mismos cálculos con struct sin tipear los nombres o crear variables pero son cosas dificiles de explicar en pocas líneas aquí en el foro.

Creo que la elección que hice con este ejercicio fue errónea, hubiese elegido uno con mas variables... Había uno de sueldos, otros de alumnos y me vine a elegir este... :banghead:

el profesor me da a entender que con struct puedo agrupar diversas variables de un tipo pero sería muy repetitivo y caótico tener que trabajar con una estructura así si son muchos datos, entonces puedo usar un vector de n dimensiones e ir cargando los datos allí.
Como tu mismo dijiste, estas aprendiendo y creo que estas buscando la forma de hacerlo mas eficiente :laugh:, y si, es caotico hacer 500 structs o 500 variables para almacenar un dato pero el punto es que creo que ese ejercicio era solo para ilustrar algo que queria el profesor, no para hacerlo lo mas eficiente posible, por eso decia solo 5 datos, si fueran 100 datos ya usar 100 variables es mas caotico. Supongo que ese ejerció venia para enseñar que es un array o que es un struct y listo.

PD: tambien podes hacer un array de structs, o una lista de structs con los structs "Personal" que dijo Richard pero eso es otra historia :)

Ah y como te dijo Richard, revisa la sintaxis siempre porque por ejemplo para guardar el apellido o nombre de una persona en una variable no es con char, char es una letra sola, debe ser un array de chars. Igual a esto probablemente nadie le importe y solo te estan enseñando los fundamentos para programar, eso de que un texto sea un array de caracteres es mas del lenguaje... (o en el fondo es asi ;) )

Buenísimo , lo tengo en cuenta.  :)

07 Septiembre, 2025, 11:16 pm
Respuesta #6

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Creo que la elección que hice con este ejercicio fue errónea, hubiese elegido uno con mas variables... Había uno de sueldos, otros de alumnos y me vine a elegir este... :banghead:
;D   
Postea otro hilo, con el enunciado completo  así comprederemos mejor tus dudas.
Por lo pronto veo que lo que nos cuentas es que tienes que comprender  como decidir la elección  del tipo de contenedor de datos en función  de la cantidad de veces que vas a usarlos en el programa.
Si es único y varía constantemente usas una variable. Si tienes pocos datos  muy relacionados entre sí usas struct , pero los vectores o las matrices mejoran la performance con muchos datos con múltiples relaciones o no.
En definitiva  es la práctica y la intuición lo que te dirá  que usar, pero con estos problemas sencillos  es donde vas viendo como se te complican las situaciones tomando una u otra decisión, porque lo que más te va a mejorar los tiempos de programación es planear correctamente  la resolución  y no tanto  la sintaxis.
Saludos  \(\mathbb {R}^3\)

08 Septiembre, 2025, 02:17 pm
Respuesta #7

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
Creo que la elección que hice con este ejercicio fue errónea, hubiese elegido uno con mas variables... Había uno de sueldos, otros de alumnos y me vine a elegir este... :banghead:
;D   
Postea otro hilo, con el enunciado completo  así comprederemos mejor tus dudas.
Por lo pronto veo que lo que nos cuentas es que tienes que comprender  como decidir la elección  del tipo de contenedor de datos en función  de la cantidad de veces que vas a usarlos en el programa.
Si es único y varía constantemente usas una variable. Si tienes pocos datos  muy relacionados entre sí usas struct , pero los vectores o las matrices mejoran la performance con muchos datos con múltiples relaciones o no.
En definitiva  es la práctica y la intuición lo que te dirá  que usar, pero con estos problemas sencillos  es donde vas viendo como se te complican las situaciones tomando una u otra decisión, porque lo que más te va a mejorar los tiempos de programación es planear correctamente  la resolución  y no tanto  la sintaxis.

Muchas gracias Richard  :)