ayuda en programa para noob (yo)

Iniciado por gdzc1, 9 Diciembre 2018, 18:46 PM

0 Miembros y 4 Visitantes están viendo este tema.

gdzc1

tengo un problema al momento de declarar las variables, estoy aprendiendo acerca de programar en c y solo estoy usando #include "stdio.h" main(), el asunto es que estoy haciendo un arreglo en el cualquiero poner un registro de 5 señales distintas, en el momento de colocar las señales me indica que no están declaradas ninguna de ellas si pueden ayudarme lo agradecería este es el programa:
#include "stdio.h"
main()
{         
      int altitud[2], i; struct reg
      {
             int A;
             int B;
             int C;
             int D;
             int E;
             };
      i=1;
      while (i<2)
      {
            printf("Las revoluciones por minuto de todos los motores es de: ");
            scanf("%d", &altitud.A);
            printf("La presión en PSI es: ");
            scanf("%d", &altitud.B);
            printf("la cantidad de aceite en l/m es: ");
            scanf("%d", &altitud.C);
            printf("La temperatura del aceite es de: ");
            scanf("%d", &altitud.D);
            printf("La temperatura de incendio es; ");
            scanf("%d", &altitud.E);
            }
      i=1;
      while(i<2)
      {
                 if(altitud.A>10800)
                 {
                                            printf("APU se apago por el exceso de revoluciones en el motor");
                                            }
                 if(altitud.B<3000)
                 {
                                           printf("APU se apago por falta de presión");
                                           }
                 if(altitud.C<175)
                 {
                                          ("APU se apagó por falta de aceite");
                                          }
                 if(altitud.D<380)
                 {
                                          ("APU se apago por falta de temperatura en el aceite");
                                          }
                 if(altitud.E>800)
                 {
                                          ("APU se apagó por incendio en una zona del avión");
                                          }
                 i=i+1;
                 }
                 }

K-YreX

Primero, el código ponlo entre etiquetas GeSHi, seleccionando el lenguaje que usas.
Segundo, ese código tiene problemas lo cojas por donde lo cojas.

Ahora la pregunta es, quieres usar un arreglo o una <struct>?? Si quieres usar un arreglo para 5 datos de tipo <int> tienes que crear un arreglo de tamaño 5, como es lógico y acceder a cada posición del arreglo con los índices {0,1,2,3,4}.

const int MAX_SIGNALS = 5;
int signals[MAX_SIGNALS];
for(int i = 0; i < MAX_SIGNALS; i++){
    printf("Introduce numero para guardar en la posicion %d del arreglo", i);
    scanf("%d", &signals[i]);
}


Si lo que quieres es usar una <struct> primero declara la <struct> antes del <main> para después usarla dentro de este.

struct Signal{
    int a, b, c, d, e;
};

int main(){
    Signal mySignal;
    printf("Introduce primer numero: ");
    scanf("%d", mySignal.a);
    // asi con todos los numeros
}


Dejar claro que esto no es un arreglo, es una estructura, esto está más orientado a la programación orientada a objetos POO. Por lo que estás creando un objeto <mySignals> de tipo <Signal> y un objeto de tipo <Signal> está compuesto internamente de 5 enteros.

Si quieres mezclar ambas cosas, que es lo que parece que estabas intentando con ese código, lo que hay que hacer es crear un arreglo de Signals. Entonces creamos por ejemplo un arreglo de tamaño 2 y cada uno de sus elementos {0,1} serán un objeto de tipo <Signal>.

struct Signal{
    int a, b, c, d, e;
};

int main(){
    Signal mySignals[2];
    // para acceder por ejemplo al segundo entero del primer objeto sería mySignals[0].b
}


Ahora ya es decisión tuya usar lo que creas más conveniente para tu programa. Suerte. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

gdzc1

Cita de: YreX-DwX en  9 Diciembre 2018, 19:35 PM
Primero, el código ponlo entre etiquetas GeSHi, seleccionando el lenguaje que usas.
Segundo, ese código tiene problemas lo cojas por donde lo cojas.

Ahora la pregunta es, quieres usar un arreglo o una <struct>?? Si quieres usar un arreglo para 5 datos de tipo <int> tienes que crear un arreglo de tamaño 5, como es lógico y acceder a cada posición del arreglo con los índices {0,1,2,3,4}.

const int MAX_SIGNALS = 5;
int signals[MAX_SIGNALS];
for(int i = 0; i < MAX_SIGNALS; i++){
    printf("Introduce numero para guardar en la posicion %d del arreglo", i);
    scanf("%d", &signals[i]);
}


Si lo que quieres es usar una <struct> primero declara la <struct> antes del <main> para después usarla dentro de este.

struct Signal{
    int a, b, c, d, e;
};

int main(){
    Signal mySignal;
    printf("Introduce primer numero: ");
    scanf("%d", mySignal.a);
    // asi con todos los numeros
}


Dejar claro que esto no es un arreglo, es una estructura, esto está más orientado a la programación orientada a objetos POO. Por lo que estás creando un objeto <mySignals> de tipo <Signal> y un objeto de tipo <Signal> está compuesto internamente de 5 enteros.

Si quieres mezclar ambas cosas, que es lo que parece que estabas intentando con ese código, lo que hay que hacer es crear un arreglo de Signals. Entonces creamos por ejemplo un arreglo de tamaño 2 y cada uno de sus elementos {0,1} serán un objeto de tipo <Signal>.

struct Signal{
    int a, b, c, d, e;
};

int main(){
    Signal mySignals[2];
    // para acceder por ejemplo al segundo entero del primer objeto sería mySignals[0].b
}


Ahora ya es decisión tuya usar lo que creas más conveniente para tu programa. Suerte. :-X
Disculpa pero lo que estoy buscando hacer es tener un arreglo en el cual pueda tener cinco datos, el problema como tal si esta orientado a un objeto dado que es una parte de un avión llamado APU, el arreglo sería de diez partes y que dentro de dicho arreglo tenga un registro de cinco señales que hacen que la APU se apague

K-YreX

No termino de entender tu planteamiento. Si lo que quieres es un arreglo donde almacenar 5 enteros, te sirve la primera opción que te he dado. En cambio si vas a ampliar el programa. igual te viene mejor usar <struct>.

Citar
el arreglo sería de diez partes y que dentro de dicho arreglo tenga un registro de cinco señales
No entiendo esto que has comentado. :rolleyes:
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

gdzc1

#4
Cita de: YreX-DwX en  9 Diciembre 2018, 23:55 PM
No termino de entender tu planteamiento. Si lo que quieres es un arreglo donde almacenar 5 enteros, te sirve la primera opción que te he dado. En cambio si vas a ampliar el programa. igual te viene mejor usar <struct>.
No entiendo esto que has comentado. :rolleyes:
Básicamente lo que quiero es que en cada uno de los espacios de los arreglos se pueda registrar cinco señales a eso era lo que me refería, tengo un arreglo de diez pero en cada uno de estos espacios cinco señales que en cada posicion del arreglo se puedan ingresar cinco señales, en vez de hacer una matriz hago un arreglo pero que dicho arreglo tengo cinco espacios de informacion

K-YreX

Vale, creo que ya te entiendo. Un arreglo de 5 elementos y que cada elemento sea un conjunto de 5 señales.
Para eso la idea más simple es un arreglo de arreglos, comúnmente conocido como matriz.

Si lo quieres hacer sin matrices y usando <struct> entonces tienes que usar la tercera opción que te he dado antes. Crear una <struct> que almacene 5 enteros y luego hacer un arreglo de 5 structs. Ya te he dejado antes también como acceder a cada uno de los elementos. Suerte. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

gdzc1

Cita de: YreX-DwX en 10 Diciembre 2018, 00:04 AM
Vale, creo que ya te entiendo. Un arreglo de 5 elementos y que cada elemento sea un conjunto de 5 señales.
Para eso la idea más simple es un arreglo de arreglos, comúnmente conocido como matriz.

Si lo quieres hacer sin matrices y usando <struct> entonces tienes que usar la tercera opción que te he dado antes. Crear una <struct> que almacene 5 enteros y luego hacer un arreglo de 5 structs. Ya te he dejado antes también como acceder a cada uno de los elementos. Suerte. :-X
Ya hice lo que me dijiste de sacar la estructura pero me sigue apareciendo el error que dice ´a´ que en este caso es la señal dentro de <struct> no está definido como hago?

MAFUS

Un array de estructuras.

struct tsignals {
   int sigA;
   int sigB;
   int sigC;
   int sigD;
   int sigE,
} signals[10];

// ...

signals[i].sigA = getSignal();

K-YreX

Cita de: gdzc1 en 10 Diciembre 2018, 00:09 AM
Ya hice lo que me dijiste de sacar la estructura pero me sigue apareciendo el error que dice ´a´ que en este caso es la señal dentro de <struct> no está definido como hago?
Sin ver cómo te ha quedado el código no sé por qué te saldrá ese error...
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

gdzc1

[quote author=MAFUS link=topic=490488.msg2180521#msg2180521 date=1544397010]
Un array de estructuras.
signals[i].sigA = getSignal();

[/quote]
Disculpa no entiendo en esta ultima parte en que parte del programa tengo que poner eso? entendi lo demás pero esa no se como hacerla, el programa sería así? (dime por favor si me equivoque en algo o que puedo arreglar para terminarlo)
struct reg
{
       int A,B,C,D,E;
       }reg[10];
int main()
{         
      int reg, altitud[2], i;
      i=1;
      while (i<2)
      {
            printf("Las revoluciones por minuto de todos los motores es de: ");
            scanf("%d", &altitud.A);
            printf("La presión en PSI es: ");
            scanf("%d", &altitud.B);
            printf("la cantidad de aceite en l/m es: ");
            scanf("%d", &altitud.C);
            printf("La temperatura del aceite es de: ");
            scanf("%d", &altitud.D);
            printf("La temperatura de incendio es; ");
            scanf("%d", &altitud.E);
            }
      i=1;
      while(i<2)
      {
                 if(altitud.A>10800)
                 {
                                            printf("APU se apago por el exceso de revoluciones en el motor");
                                            }
                 if(altitud.B<3000)
                 {
                                           printf("APU se apago por falta de presión");
                                           }
                 if(altitud.C<175)
                 {
                                          ("APU se apagó por falta de aceite");
                                          }
                 if(altitud.D<380)
                 {
                                          ("APU se apago por falta de temperatura en el aceite");
                                          }
                 if(altitud.E>800)
                 {
                                          ("APU se apagó por incendio en una zona del avión");
                                          }
                 i=i+1;
                 }
                 }