sábado, 27 de setembro de 2014

Fseek - Posicionando um Ponteiro para Arquivo II

 Na tela inicial, o programa mostra poucas informações sobre o autor do projeto, que sou eu mesmo, indica ainda duas opções, que são sair e continuar, escolhendo 1 ou 2 respectivamente.
Continuando, o programa já mostra a leitura de um arquivo que foi criado com a cópia dos nomes contidos na matriz de string char linha [ ] [ ];
pressionando qualquer tecla, vem a próxima tela do programa pedindo para que se escolha o número de uma linha contido no arquivo, sendo números entre 1 e 9, ou escolhendo -1 para encerramento da execução.
Tá claro que o programa não aceitará números inferior ou maior que os parâmetros estabelecidos, caracteres também não são aceitos.
Escolhendo uma linha válida o programa mostra o conteúdo da linha e o total de posições do nome contido.
Após pressionar enter, o programa já pede de onde, isto é de qual posição pretende se fazer a leitura, também à restrições aqui, o programa é inteligente, sabe calcular o tamanho da string da linha, e não aceita posições acima do seu tamanho e nem menor que "0".
Feito tudo corretamente, o programa mostra a leitura da linha conforme foi solicitado nas aplicações dos parâmetros escolhidos e se encerra agradecendo a utilização.

Veja algumas imagens do programa em execução:






 Veja abaixo o código do programa:


#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
void Janela5(){
    int lin, col;
    for ( lin = 0; lin <= 36; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textbackground(LIGHTRED);printf( " ");}
            if ( col == 1 ){textbackground(LIGHTRED);printf(" ");}
            if ( lin == 36 ){textbackground(LIGHTRED);}
            if ( col == 80 ){textbackground(LIGHTRED);printf(" ");}
        }
    }textbackground(BLACK);
}
void inicio( ){    system ("title FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
int i;do{Janela5();
textcolor(LIGHTRED);gotoxy(20,7);printf("FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
textcolor(YELLOW);gotoxy(25,10);printf("Programa desenvolvido por:");
textcolor(LIGHTCYAN);gotoxy(52,10);printf("Samuel Lima");
textcolor(LIGHTGREEN);gotoxy(34,12);printf("sa_sp10@hotmail.com");
textcolor(LIGHTBLUE);gotoxy(24,14);printf("DIGITE    PARA SAIR OU   PARA CONTINUAR  ");
textcolor(LIGHTRED);gotoxy(32,14);printf("1");textcolor(LIGHTRED);gotoxy(47,14);printf("2");
gotoxy(41,16);
scanf("%d",&i);fflush(stdin);
if( i == 1 ){textcolor(LIGHTRED);gotoxy(35,20);printf ("MUITO OBRIGADO");Sleep(1800);exit(0);}
if( i == 2 ){system("cls"); return;}
else {textcolor(LIGHTRED);gotoxy(37,20);printf ("\aOPÇÃO ERRADA");Sleep(1800);system("cls");}
}
while(i);
}
int Imp_Matr ( char *num ){
    unsigned int i;
    for( i = 0; i < strlen ( num ); i++ ){
        if ( num [ i ] < '0' || num [ i ] > '9' )
            return 0;
    }
    return 1;
}
int main(){
    inicio( );int ini, fim, i = 0, n;    int  result;
    FILE *arq, *f;char num [ 3 ];
    char  linha [ 11 ] [ 17 ] = { {"João Henrique"},
            {"Amanda Santos"},
            {"Patrícia Gomes"},
            {"Ricardo Souza"},
            {"Cláudia Ferraz"},
            {"Rafaela Pimentel"},
            {"Samuel Júnior"},
            {"Sandro Rúbens"},
            {"Lúcia Paola"},
            {"Luíz Manolo"},
            {"Estér Guimarães"}};
    char lin_ha [ 20 ];char li_n_ha [ 20 ];
    if ( ( arq = fopen ("Arquivo.bin", "w+b" ) ) == NULL ){
        printf("Houve um erro na criação do arquivo");
        getche();exit(1);
    }
    if ( fwrite ( &linha, sizeof ( linha ), 1, arq ) != 1 ){
        printf("Houve um erro na gravação do arquivo");
        getche();exit(1);
    }
    fclose(arq);
    if ( ( arq = fopen("Arquivo.bin", "r+b" ) ) == NULL ){
        printf("Houve um erro na abertura do arquivo");
        getche();exit(1);
    }
    if ( fread ( &linha , sizeof ( linha ), 1, arq ) != 1 ){
        printf("Houve um erro na leitura do arquivo");
        getche();exit(1);
    }
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(19,3);printf("FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
    textcolor(LIGHTBLUE);gotoxy(26,5);printf( "Abaixo a leitura do arquivo aberto" );
    textcolor(YELLOW);
    for( i = 0; i <= 10; i++ ){
        gotoxy(35,i + 7);
        printf("%s", linha [ i ] );
    }
    Sleep(1000);textcolor(LIGHTGREEN);
    gotoxy(32,22);printf("PRESSIONE QUALQUER TECLA");getche();
    do{system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(23,3);printf("POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
    textcolor(LIGHTBLUE);gotoxy(15,5);printf("Escolha um número entre [ 1 e 9 ] ou [ -1 Para Sair ]  " );
    textcolor(YELLOW);gets ( num );fflush(stdin);
    n =  atoi (num);
    if ( n < -1 || n > 9 ){
        textcolor(LIGHTRED);gotoxy(25,10);
        printf("\aNúmero Acima de 0 e menor que 10" );
        getche();continue;
    }
    if( n == -1 ){
        textcolor(LIGHTRED);gotoxy(35,21);printf("MUITO OBRIGADO");
        Sleep(1800);exit(0);
    }
    if ( Imp_Matr ( num ) == 0 || n == 0){
        textcolor(LIGHTGREEN);gotoxy(25,7);printf("\aVoce digitou: %s", num );
        Sleep(1800);textcolor(LIGHTGREEN);gotoxy(25,9); printf("\a%s Nao e Valido !", num );
        Sleep(1800);continue;//system("cls");
    }
    while ( feof ( arq ) == 0 ){
        fgets ( linha [ i ], 80, arq );
        strcpy ( lin_ha, linha [ n ] );
        ++i;
    }fclose(arq);
    textcolor(LIGHTBLUE);gotoxy(15,7);printf("Veja abaixo o que tá escrito na linha %d do arquivo", n );
    textcolor(YELLOW);gotoxy(20,9);
    printf(" %s ", linha [ n ] );
    textcolor(LIGHTBLUE);printf("Num total de : ");
    textcolor(LIGHTRED);printf(" %d ", strlen ( linha [ n ] ) );
    textcolor(LIGHTBLUE);printf("Posições ");
    getche();
    if ( ( f = fopen ("Arquivo.bin", "w+b" ) ) == NULL ){
        printf("Houve um erro na criação do arquivo");
        getche();exit(1);
    }
    if ( fwrite ( &lin_ha, sizeof ( lin_ha ), 1, f ) != 1 ){
        printf("Houve um erro na gravação do arquivo");
        getche();exit(1);
    }
    fclose(f);
    if ( ( f = fopen("Arquivo.bin", "r+b" ) ) == NULL ){
        printf("Houve um erro na abertura do arquivo");
        getche();exit(1);
    }printf("\n" );
    if ( fread ( &li_n_ha , sizeof ( lin_ha ), 1, f ) != 1 ){
        printf("Houve um erro na leitura do arquivo");
        getche();exit(1);
    }
    do{gotoxy(37,13);printf("   ");
    textcolor(LIGHTBLUE);gotoxy(15,11);printf("Digite abaixo de onde pretende visualizar :");
    textcolor(LIGHTBLUE);gotoxy(15,13);printf( "Começando na posição : " );
    textcolor(LIGHTRED);gotoxy(38,13);scanf("%d", &ini);fflush(stdin);
    if ( ini < -1 || ini >= strlen ( linha [ n ] ) ){
        textcolor(LIGHTRED);gotoxy(20,16);
        printf("\aNúmero Acima da posição 0 e menor que %d ", strlen ( linha [ n ] ) );
        getche();gotoxy(20,16);
        printf("                                          ");
        continue;
    }
    do{gotoxy(30,14);printf("   ");
    textcolor(LIGHTBLUE);gotoxy(15,14);printf( "Até a posição : " );
    gotoxy(31,14);textcolor(LIGHTRED);scanf("%d", &fim);fflush(stdin);
    if ( fim < -1 || fim > strlen ( linha [ n ] ) ){
        textcolor(LIGHTRED);gotoxy(20,16);
        printf("\aNúmero Acima da posição 0 e menor que %d ", strlen ( linha [ n ] ) );
        getche();gotoxy(20,16);
        printf("                                          ");
        continue;
    }
    result = fseek ( f, ini, SEEK_SET );
    if( result )
        perror( "\aArquivo.bin" );
    else{
        textcolor(LIGHTBLUE);gotoxy(15,16);printf( "O Ponteiro de arquivo foi movido com sucesso" );
        textcolor(LIGHTBLUE);gotoxy(15,17);printf( "Para o início na posição ");
        textcolor(LIGHTRED);printf( " %d", ini);
        textcolor(LIGHTBLUE);printf( " num total de ");
        textcolor(LIGHTBLUE);printf( "   posições" );
        textcolor(LIGHTGREEN);gotoxy(15,19);printf( "Veja o resultado ==> " );
        fgets( li_n_ha, fim + 1, f );textcolor(YELLOW);gotoxy(40,19);
        printf( " %s", li_n_ha  );
        textcolor(LIGHTRED);gotoxy(55,17);printf( " %d", strlen ( li_n_ha ) );
    }
    fclose( f );Sleep(1800);
    textcolor(LIGHTRED);gotoxy(36,23);printf ("MUITO OBRIGADO");
    getche();exit(0);
    }while( 1 );
    }while( 1 );
    }while( 1 );
}





quinta-feira, 25 de setembro de 2014

Pilha - Invertendo uma Matriz de Inteiros

Em linguagem C temos várias estruturas de dados, e pilha é uma estrutura
de fácil uso, e que permite remover e inserir elementos.
A regra básica da pilha, nos diz que o primeiro elemento inserido será o último
a ser removido.
Neste código a pilha opera de uma maneira especial, más não fugindo as regras,
Uma Matriz de inteiro foi declarada, e seus elementos são inseridos, ou melhor empilhados pela
função void Empi_lha ();, más é estática, apenas a estrutura da pilha foi alocado.
Na função void Desem_pilha  (); são desempilhados, suas posições são todas trocadas
num arranjo em posições sequênciais.

Veja abaixo algumas imagens do programa em execução:

 

Veja abaixo o código do programa:

#include <stdio.h>
#include <conio.h>
#define tam 10
void Janela5(){
    int lin, col;
    for ( lin = 0; lin <= 36; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textbackground(LIGHTRED);printf( " ");}
            if ( col == 1 ){textbackground(LIGHTRED);printf(" ");}
            if ( lin == 36 ){textbackground(LIGHTRED);}
            if ( col == 80 ){textbackground(LIGHTRED);printf(" ");}
        }
    }textbackground(BLACK);
}
void inicio( ){    system ("title PILHA - INVERTENDO UMA MATRIZ DE INTEIROS");
int i;do{Janela5();
textcolor(LIGHTRED);gotoxy(23,7);printf("PILHA - INVERTENDO UMA MATRIZR DE INTEIROS");
textcolor(YELLOW);gotoxy(25,10);printf("Programa desenvolvido por:");
textcolor(LIGHTCYAN);gotoxy(52,10);printf("Samuel Lima");
textcolor(LIGHTGREEN);gotoxy(34,12);printf("sa_sp10@hotmail.com");
textcolor(LIGHTBLUE);gotoxy(24,14);printf("DIGITE    PARA SAIR OU   PARA CONTINUAR  ");
textcolor(LIGHTRED);gotoxy(32,14);printf("1");textcolor(LIGHTRED);gotoxy(47,14);printf("2");
gotoxy(41,16);
scanf("%d",&i);fflush(stdin);
if( i == 1 ){textcolor(LIGHTRED);gotoxy(35,20);printf ("MUITO OBRIGADO");Sleep(1800);exit(0);}
if( i == 2 ){system("cls"); return;}
else {textcolor(LIGHTRED);gotoxy(37,20);printf ("\aOPÇÃO ERRADA");Sleep(1800);system("cls");}
}
while ( i );
}
typedef struct Pilha {
    int vol;
    struct Pilha *prox;
} Pil_ha;
void Empi_lha ( int c, Pil_ha *to_po ) {
    Pilha *item = ( Pilha * )  malloc ( sizeof ( Pilha ) );
    item -> vol = c;
    item -> prox = to_po -> prox;
    to_po -> prox = item;
}
int Desem_pilha ( Pil_ha *to_po ) {
    int c;
    Pil_ha *pt;
    pt = to_po -> prox;
    c = pt -> vol;
    to_po -> prox = pt -> prox;
    free ( pt );
    return c;
}
int main(){
    int Mat [ tam ] [ tam ] = {
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,
            11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ,
            21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ,
            31, 32, 33, 34, 35, 36, 37, 38, 39, 40 ,
            41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ,
            51, 52, 53, 54, 55, 56, 57, 58, 59, 60 ,
            61, 62, 63, 64, 65, 66, 67, 68, 69, 70 ,
            71, 72, 73, 74, 75, 76, 77, 78, 79, 80 ,
            81, 82, 83, 84, 85, 86, 87, 88, 89, 90 ,
            91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
    int i, j;
    Pil_ha cab;
    Pil_ha *top;
    top = &cab;
    top -> prox = NULL;
    inicio( );Janela5();
    textcolor(LIGHTRED);gotoxy(23,3);printf("PILHA - INVERTENDO UMA MATRIZ DE INTEIROS");
    textcolor(LIGHTBLUE);gotoxy(23,5);printf("Veja abaixo a impressão normal da Matriz ");
    textcolor(LIGHTGRAY);gotoxy(2,7);
    for( i = 0; i < tam; i++ ){
        gotoxy ( 18, i + 8 );
        for( j = 0; j < tam; j++ ){
            printf(" %3d ",  Mat [ i ] [ j ] );
        }
    }Sleep(1800);
    textcolor(LIGHTBLUE);gotoxy(28,20);printf("A MATRIZ FOI EMPILHADA COM SUCESSO");
        textcolor(LIGHTRED);gotoxy(32,22);printf("PRESSIONE QUALQUER TECLA");getche();
    textcolor(LIGHTGRAY);gotoxy(2,7);
    for( i = 0; i < tam; i++ ){
        for( j = 0; j < tam; j++ ){
            Empi_lha ( Mat  [ i ] [ j ], top );
        }
    }system("cls");
    textcolor(LIGHTRED);gotoxy(23,3);printf("PILHA - INVERTENDO UMA MATRIZ DE INTEIROS");
    textcolor(LIGHTBLUE);gotoxy(23,5);printf("Veja abaixo a Matriz totalmente invertida ");
    textcolor(LIGHTGRAY);gotoxy ( 1,9 );
    while ( top -> prox != NULL)
        printf(" %d ", Desem_pilha ( top ) );
    Sleep(1800);
    textcolor(LIGHTRED);gotoxy(36,23);printf ("MUITO OBRIGADO");
    getche();exit(0);
}

quarta-feira, 24 de setembro de 2014

Pilha - Invertendo um Vetor de Inteiros

Em linguagem C temos várias estruturas de dados, e pilha é uma estrutura
de fácil uso, e que permite remover e inserir elementos.
A regra básica da pilha, nos diz que o primeiro elemento inserido será o último
a ser removido.
Neste código a pilha opera de uma maneira especial, más não fugindo as regras,
Um vetor de inteiro foi declarado, e são inseridos, ou melhor empilhados pela
função void Empi_lha ();, más é estático, apenas a estrutura da pilha foi alocado.
Na função void Desem_pilha  (); são desempilhados, suas posições são todas trocadas
num arranjo em posições sequênciais.

Veja abaixo duas imagens do programa em execução:



Veja abaixo o código do programa:


#include <stdio.h>
#include <conio.h>
void Janela5 ( ) {
     int lin, col;
     for ( lin = 0; lin <= 36 ; lin++ ) {
         for ( col = 0; col <= 80 ; col++ ) {
              gotoxy ( col , lin );
              if ( lin == 2 ) {
                   textbackground ( LIGHTRED );
                   printf ( " " );
              }
              if ( col == 1 ) {
                   textbackground ( LIGHTRED );
                   printf ( " " );
              }
              if ( lin == 36 ) {
                   textbackground ( LIGHTRED );
              }
              if ( col == 80 ) {
                   textbackground ( LIGHTRED );
                   printf ( " " );
              }
         }
     }
     textbackground ( BLACK );
}
void inicio ( ) {
     system ( "title PILHA - INVERTENDO UM VETOR DE INTEIROS" );
     int i;
     do {
         Janela5 ( );
         textcolor ( LIGHTRED );
         gotoxy ( 25 , 7 );
         printf ( "PILHA - INVERTENDO UM VETOR DE INTEIROS" );
         textcolor ( YELLOW );
         gotoxy ( 25 , 10 );
         printf ( "Programa desenvolvido por:" );
         textcolor ( LIGHTCYAN );
         gotoxy ( 52 , 10 );
         printf ( "Samuel Lima" );
         textcolor ( LIGHTGREEN );
         gotoxy ( 34 , 12 );
         printf ( "sa_sp10@hotmail.com" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 24 , 14 );
         printf ( "DIGITE    PARA SAIR OU   PARA CONTINUAR  " );
         textcolor ( LIGHTRED );
         gotoxy ( 32 , 14 );
         printf ( "1" );
         textcolor ( LIGHTRED );
         gotoxy ( 47 , 14 );
         printf ( "2" );
         gotoxy ( 41 , 16 );
         scanf ( "%d" , &i );
         fflush ( stdin );
         if ( i == 1 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 35 , 20 );
              printf ( "MUITO OBRIGADO" );
              Sleep ( 1800 );
              exit ( 0 );
         }
         if ( i == 2 ) {
              system ( "cls" );
              return;
         } else {
              textcolor ( LIGHTRED );
              gotoxy ( 37 , 20 );
              printf ( "\aOPÇÃO ERRADA" );
              Sleep ( 1800 );
              system ( "cls" );
         }
     } while ( i );
}
typedef struct Pilha {
     int vol;
     struct Pilha *prox;
} Pil_ha;
void Empi_lha ( int c , Pil_ha *to_po ) {
     Pilha *item = ( Pilha * ) malloc ( sizeof(Pilha) );
     item->vol = c;
     item->prox = to_po->prox;
     to_po->prox = item;
}
int Desem_pilha ( Pil_ha *to_po ) {
     int c;
     Pil_ha *pt;
     pt = to_po->prox;
     c = pt->vol;
     to_po->prox = pt->prox;
     free ( pt );
     return c;
}
int main ( ) {
 
int vet [ 100 ] = {
                  1,  2,  3,  4,  5,  6,  7,  8,  9, 10 ,
                 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ,
                 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ,
                 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 ,
                 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ,
                 51, 52, 53, 54, 55, 56, 57, 58, 59, 60 ,
                 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 ,
                 71, 72, 73, 74, 75, 76, 77, 78, 79, 80 ,
                 81, 82, 83, 84, 85, 86, 87, 88, 89, 90 ,
                 91, 92, 93, 94, 95, 96, 97, 98, 99,100};

     int i;
     Pil_ha cab;
     Pil_ha *top;
     top = &cab;
     top->prox = NULL;
     inicio ( );
     textcolor ( LIGHTRED );
     gotoxy ( 25 , 3 );
     printf ( "PILHA - INVERTENDO UM VETOR DE INTEIROS" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 25 , 5 );
     printf ( "Veja abaixo a impressão normal do vetor " );
     textcolor ( LIGHTGRAY );
     gotoxy ( 2 , 7 );
     for ( i = 0; i < 100 ; i++ )
         printf ( " %d " , vet [ i ] );
     getche ( );
     for ( i = 0; i < 100 ; i++ )
         Empi_lha ( vet [ i ] , top );
     textcolor ( LIGHTBLUE );
     gotoxy ( 25 , 13 );
     printf ( "Veja abaixo o vetor totalmente invertido " );
     textcolor ( LIGHTGRAY );
     gotoxy ( 3 , 15 );
     while ( top->prox != NULL )
         printf ( " %d " , Desem_pilha ( top ) );
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 36 , 23 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
     exit ( 0 );
}