sexta-feira, 29 de novembro de 2013

Programa Struct Aninhada

Quando um membro de uma estrutura também é uma estrutura, podemos afirmar que trata-se de estruturas aninhadas.Se você chegou até aqui, quero crer que você já estudou ifs aninhados, que nada mais é do que uma instrução if dentro da declaração de outra.Pode parecer complicado utilizar estes tipos de estruturas, más o benefício da capacidade de armazenar inúmeras informações sobre o assunto principal supera isto.
O programa abaixo mostra um claro exemplo de como criar e declarar structs aninhadas,
Criei algumas estruturas, sendo duas aninhadas, más para não crescer muito o tópico,me calo aos comentários, ficando por conta dos interessados procurar entender como tudo foi feito.

Eis algumas imagens do Programa em Execução:


Veja abaixo o código do programa:



#include <stdio.h>
#include <string.h>
#include <conio.h>
void got_color ( int tam_lin_ini , int tam_lin_fim , int tam_ini_col ,
         int tam_fim_col , int a , int b ) {
     int i, e;
     if ( a >= 1 && a <= 16 ) {
         textcolor ( a );
     }
     if ( b >= 1 && b <= 16 ) {
         textbackground ( b );
     }
     for ( i = tam_lin_ini; i < tam_lin_fim ; i++ ) {
         for ( e = tam_ini_col; e < tam_fim_col ; e++ ) {
              gotoxy ( e , i );
              printf ( " " );
         }
     }
}
struct Diretor {
     char Dire_tor [ 85 ];
} Diretor_De_Escola [ 48 ] = {
          {"Um Diretor de Escola da rede Estadual de ensino" },
          {"listou seus 10 melhores alunos"                  },
          {"Pressione qualquer tecla para conhece - los"   } };
struct Escola {
     char nome [ 16 ];
};
struct Escola Alu_no [ 16 ] =
        {{ "Ana Celia      "  },  { "Eder Costa     " },
         { "Humberto Gomes "  },  { "Dijalma Lacerda" },
         { "Caroline Silva "  },  { "Igor Goncalves " },
         { "Bruna Carla    "  },  { "Fabio Quadros  " },
         { "Geany Barros   "  },  { "Jaqueline Vega "}};
struct End_Da_Escola {
     int Numero;
     int Total_de_Alunos;
};
struct Professor {
     float Idade_Do_Professor;
     float Idade_Do_Diretor;
};
struct Classe {
     float Idade;
     float Notas;
     int Chamada;
     struct End_Da_Escola Atual;
     char Nome_da_rua [ 30 ];
     struct Professor Profe_ssor;
     char Nome_Do_Professor [ 30 ];
     char Nome_Do_Diretor [ 30 ];
};
struct Classe End_Da_Escola;
struct Classe Professor;
int main ( ) {
     system ( "title PROGRAMA STRUCT ANINHADA" );
     int i;
     struct Classe Notas_Idades [ 10 ] = { { 20.4, 9.5, 1 }, { 18.6, 8.9, 5 }, {
              16.5, 6.4, 8 }, { 19.4, 7.5, 4 }, { 17.5, 8.0, 3 },
              { 17.0, 7.7, 9 }, { 19.7, 6.9, 2 }, { 18.6, 9.0, 6 },
              { 16.0, 9.9, 7 }, { 20.0, 8.5, 10 } };
     strcpy ( Professor.Nome_Do_Professor , "Inacio Santana" );
     strcpy ( Professor.Nome_Do_Diretor , "Juvencio Guimaraes" );
     Professor.Profe_ssor.Idade_Do_Professor = 40.5;
     Professor.Profe_ssor.Idade_Do_Diretor = 55.6;
     strcpy ( End_Da_Escola.Nome_da_rua , "Presidente General Figueiredo" );
     End_Da_Escola.Atual.Numero = 335;
     End_Da_Escola.Atual.Total_de_Alunos = 1200;
     got_color ( 2 , 25 , 3 , 79 , 2 , 15 ); //Moldura
     textcolor ( VERMELHOCLARO );
     gotoxy ( 30 , 3 );
     printf ( "PROGRAMA STRUCT ANINHADA" );
     textcolor ( PRETO );
     gotoxy ( 24 , 5 );
     printf ( "Programa desenvolvido por:" );
     textcolor ( CINZAESCURO );
     gotoxy ( 51 , 5 );
     printf ( "Samuel Lima" );
     textcolor ( VERDECLARO );
     gotoxy ( 34 , 7 );
     printf ( "sa_sp10@hotmail.com" );
     for ( i = 0; i < 2 ; i++ ) {
         gotoxy ( 17 , i + 7 );
         textcolor ( AZULCLARO );
         if ( i == 48 ) {
              gotoxy ( 17 , 9 );
         }
         printf ( " %s " , Diretor_De_Escola [ i ].Dire_tor );
         textcolor ( VERMELHOCLARO );
         gotoxy ( 20 , 17 );
         printf ( " %s " , Diretor_De_Escola [ 2 ].Dire_tor );
     }
     getche ( );
     system ( "cls" );
     got_color ( 2 , 25 , 3 , 79 , 2 , 11 );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 30 , 3 );
     printf ( "PROGRAMA STRUCT ANINHADA" );
     textcolor ( PRETO );
     gotoxy ( 11 , 5 );
     printf ( "Nomes                Idades          Notas         Numeros" );
     textcolor ( AZULCLARO );
     for ( i = 0; i < 10 ; i++ ) {
         gotoxy ( 4 , i + 7 );
         printf ( "     %s         %.1f            %.1f            %d" ,
                   Alu_no [ i ].nome , Notas_Idades [ i ].Idade ,
                   Notas_Idades [ i ].Notas , Notas_Idades [ i ].Chamada );
     }
     Sleep ( 1800 );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 30 , 23 );
     printf ( "PRESSIONE QUALQUER TECLA" );
     getche ( );
     system ( "cls" );
     got_color ( 2 , 25 , 3 , 79 , 2 , 15 );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 30 , 3 );
     printf ( "PROGRAMA STRUCT ANINHADA" );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 5 );
     printf ( "Nome do Professor    ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 5 );
     printf ( "%s" , Professor.Nome_Do_Professor );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 7 );
     printf ( "Nome do Diretor      ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 7 );
     printf ( "%s " , Professor.Nome_Do_Diretor );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 9 );
     printf ( "A idade do Professor ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 9 );
     printf ( "%.1f " , Professor.Profe_ssor.Idade_Do_Professor );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 11 );
     printf ( "A idade do Diretor   ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 11 );
     printf ( "%.1f " , Professor.Profe_ssor.Idade_Do_Diretor );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 13 );
     printf ( "Endereco da Escola   ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 13 );
     printf ( "Rua %s " , End_Da_Escola.Nome_da_rua );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 15 );
     printf ( "NÚmero               ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 15 );
     printf ( "%d " , End_Da_Escola.Atual.Numero );
     textcolor ( AZULCLARO );
     gotoxy ( 10 , 17 );
     printf ( "Total de Alunos       ==> " );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 40 , 17 );
     printf ( "%d " , End_Da_Escola.Atual.Total_de_Alunos );
     Sleep ( 1800 );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 26 , 19 );
     printf ( "Por: " );
     textcolor ( AZULCLARO );
     printf ( "Samuel Lima" );
     textcolor ( PRETO );
     gotoxy ( 26 , 20 );
     printf ( "sa_sp10@hotmail.com" );
     Sleep ( 1800 );
     textcolor ( VERMELHOCLARO );
     gotoxy ( 37 , 23 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
     exit ( 0 );
}