Estrutura de Dados em C | Aula 02 – Modularização e TAD



Curso de programação e estrutura de dados em linguagem C.
Nesta aula vemos como funciona a modularização e a criação de um tipo abstrato de dado em linguagem C.

🔗 Links
▸ Códigos fontes:
▸ Livro de Linguagem C:
▸ Livro de Estrutura de Dados em Linguagem C:
▸ Livro de MATLAB:

📌 Redes Sociais
▸ Página pessoal:
▸ Researchgate:
▸ LinkedIn:

#clanguage
#linguagemc
#estruturadedados

source

39 Comments

  1. Uma semana vendo e revendo as aulas do meu professor da faculdade sem entender nada, venho aqui e em 10 minutos tiro todas as dúvidas… obrigado prof.

  2. Para as pessoas que usam gcc:
    Compilar biblioteca
    gcc -c biblioteca.c -o biblioteca
    Compilar programa
    gcc programa.c -o programa -L -l biblioteca
    Executar programa
    Windows: programa
    Linux: ./programa

  3. Para gerar executável no Windows :

    Na pasta consta os seguintes arquivos;

    – Ponto.c

    – Ponto.h

    – TipoAbstratoDeDado

    1º Abra o cmd na pasta dos arquivos:

    digite no terminal:

    gcc -c -I -w Ponto.c

    gcc -c -I -w TipoAbstratoDeDado.c

    Criamos os arquivos objetos "Ponto.o" e "TipoAbstratoDeDado.o"

    2º Basta linkar os arquivos objetos e criar o executável,

    digite no terminal:

    gcc -o bin TipoAbstratoDeDado.o Ponto.o

    Isso ira criar um executável chamando "bin.exe"

    ==============================================
    //Arquivo TipoAbstratoDeDados.c

    #include <stdio.h>

    #include <stdlib.h>

    #include "Ponto.h"

    int main(void){

    float d;

    Ponto *p,*q;

    //Ponto r; //ERRO

    p = pto_cria(10,21);

    q = pto_cria(7,25);

    // q->x = 2; //ERRO

    d = pto_distancia(p,q);

    printf("Distancia entre pontos: %f n",d);

    pto_libera(q);

    pto_libera(p);

    system("pause");

    return 0;

    }
    ==============================================
    //Arquivo Ponto.cabs

    #include <stdlib.h>

    #include <math.h>

    #include "Ponto.h" //inclui os Protótipos

    //Definição do tipo de dados

    struct ponto{

    float x;

    float y;

    };

    /* Implementando as funções */

    //Arquivo Ponto.c

    //Aloca e retorna um ponto com coordenadas "x" e "y"

    Ponto* pto_cria(float x, float y){

    Ponto* p = (Ponto*) malloc(sizeof(Ponto));

    if(p != NULL){

    p->x = x;

    p->y = y;

    }

    return p;

    }

    //Libera a memória alocada para um ponto

    void pto_libera(Ponto* p){

    free(p);

    }

    //Recupera, por referência, o valor de um ponto

    void pto_acessa(Ponto* p, float* x, float* y){

    *x = p->x;

    *y = p->y;

    }

    //Atribui a um ponto as coordenadas "x" e "y"

    void pto_atribui(Ponto* p, float x, float y){

    p->x = x;

    p->y = y;

    }

    //Calcula a distância entre dois pontos

    float pto_distancia(Ponto* p1, Ponto* p2){

    float dx = p1->x – p2->x;

    float dy = p1->y – p2->y;

    return sqrt(dx * dx + dy * dy);

    }

    ==============================================
    //Arquivo Ponto.h

    typedef struct ponto Ponto;

    //Cria um novo ponto

    Ponto* pto_cria(float x, float y);

    //Libera um ponto

    void pto_libera(Ponto* p);

    //Acessa os valores "x" e "y" de um ponto

    void pto_acessa(Ponto* p, float* x, float* y);

    //Atribui os valores "x" e "y" a um ponto

    void pto_atribui(Ponto* p,float x, float y);

    //Calcula a distância entre dois pontos

    float pto_distancia(Ponto* p1, Ponto* p2);
    ==============================================

  4. Professor parabéns pelo vídeo, ótimo!
    Só uma perguntinha, o senhor está gravando dentro de um estacionamento público? muito barulho de alarme de carros entre outros barulhos.
    Brincadeiras a parte. Obrigado pelo vídeo, já deixei o like e comecei a seguir o canal.

  5. As melhores aulas de C no Youtube são com você, professor. O que eu mais gosto nelas (sem mencionar as intros, é claro) são a maneira como o senhor explica e, no geral, a didática usada.

  6. gcc nomedoarquivoc.c nomedoarquivomain.c -o nomedoexecutável (Esse é o código para compilar um programa com esses todos arquivos no mac,para quem usa o terminal.Acho que isso tbm devia ser explicado, fiquei muito tempo no stackoverflow a procura disso).

  7. Não entendi algumas coisas:

    1 – Qual a necessidade de alocação de memória se as variáveis dentro da struct não são arrays ou matriz?

    2 – Por que a função ( Ponto* pto_cria ) é do tipo ponteiro? Se você cria a struct dentro do arquivo.h não bastaria acessá-la no arquivo.c da seguinte maneira
    Ponto pto; ???
    Então, com isso, poderia chamar a função " pto_cria (Ponto *pto, float x, float y) "

    Agradeço desde já quem puder me auxiliar nessa dúvida, grande abraço!

  8. ||=== Build file: "no target" in "no project" (compiler: unknown) ===|
    C:UserspacheDesktopProjPontomain.o:main.c|| undefined reference to `pto_cria'|
    C:UserspacheDesktopProjPontomain.o:main.c|| undefined reference to `pto_cria'|
    C:UserspacheDesktopProjPontomain.o:main.c|| undefined reference to `pto_distancia'|
    C:UserspacheDesktopProjPontomain.o:main.c|| undefined reference to `pto_libera'|
    C:UserspacheDesktopProjPontomain.o:main.c|| undefined reference to `pto_libera'|
    ||error: ld returned 1 exit status|
    ||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 6 second(s)) ===|

    alguém sabe o que possa ser ?

  9. Glr alguém pode me responder minha dúvida !!

    Ele usou um typedef na struct ponto ae quando ele usar a biblioteca no programa principal !! Pq ele não pode declarar variáveis mas só ponteiro da struct ponto !!! Agradeço desde já !!

  10. Gente, eu ainda sou meio noob entao vou perguntar
    Basicamente terminei o curso basico de C, eu partiria para outra linguagem de programação eu estudo ED primeiro
    Desde já abraços para todos

  11. Pessoal, a questão é a seguinte:

    Arquivos de cabeçalho das bibliotecas padrão ansi, são, em geral, linkeditados automaticamente pela maioria dos compiladores c. Por isso stdio.h, por exemplo, pode ser incluído sem a necessidade de linkedicao explícita do .c referente.

    Neste caso, foi criado um arquivo .c e um .h que não fazem parte da biblioteca padrão, por isso o arquivo .c deverá ser linkeditado explicitamente de acordo com a sintaxe do compilador que estiver sendo usado.

    Com relação ao uso de <> ou "" isso varia de acordo com a implementação. Em geral, Chaves angulares dizem ao compilador para ele pesquisar o arquivo .h em algum diretório reservado para arquivos da biblioteca padrão c. Para aspas, via de regra o compilador vai buscar o arquivo no diretório de trabalho atual.

    Abs.

  12. Então, Everton, Sandro Moreira e Daniel… o que aconteceu não tem nada a ver com programa compilar com erro pq da erro no xcode, ou algo parecido… o detalhe é que o professor  colocou a biblioteca errada no ultimo arquivo, ao invés de ele ter colocado  #include "Ponto.h" era para ele ter colocado #include "Ponto.c", o restante tá certinho, pois acho que ele não prestou a atenção e deixou passar desapercebido.
    Ficaria assim:
    no 1º arquivo – os protótipos;
    no 2º arquivo – as implementações + biblioteca: #include "Ponto.h"
    no 3º arquivo – a chamada da função + biblioteca #include "Ponto.c"

    Não estou desabonando nada do que o professor disse, só estou tentando ajudar, até mesmo pq não sabia nada sobre "TAD", aprendi nessa aula, poré tive o mesmo problema que vcs e achei onde estava ocorrendo o erro. abs        
     

Leave a Reply

Your email address will not be published. Required fields are marked *

You might like

© 2026 Cantinho do Vídeo - WordPress Video Theme by WPEnjoy