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

Me perdoem mais ninguém usa mais C não desmerecendo o trabalho do professor mais precisam atualizar essa grade ai .
Obrigado pela aula, ja notaram como o professor parece com o Sheldon do The Big Bang Theory?
e p->x é a mesma coisa q p.x ?
esse float* x é a mesma coisa q float *x. continua sendo ponteiro os 2 ? ou tem diferença ?
Caramba, eu preciso aprender o que antes de assistir essa playlist? To perdido que só a gota
"só consigo declarar ponteiros agora" meu deus. foi essa frase no final q fez TUDO, TUDO FAZER SENTIDO
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.
assisti muitas aulas de c inclusive com este professor, mas parece que estou longe de ser capaz de aprender isto.
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
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);
==============================================
No DevC++ não se esqueçam de incluir os três arquivos dentro de um mesmo projeto antes de compilar!
Na função pto_cria, por que "Ponto* p" e não "Ponto *p"
e
"return *p" ao invés de "return p" ?
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.
A aula poderia ter sido com algo mt mais simples
Calculadora básica ja passaria a ideia
Eu gosto das aulas, mas essa aula aí eu achei bem confusa
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.
Eu ñ entendi nada msm
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).
o que e ponto*
Olhando no final, por que ia dar erro se escrevesse q->x = 2;???
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!
Show ! Parabéns ! Muito Obrigado !
Pessoal o site do professor não está mais funcionando a aulas desse professor são fantasticas?
||=== 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 ?
Cara, não entendo nada de programação, mas essa trilha do circuito Big Blue no F-Zero ficou massa demais!
Eh, o meu não deu, utilizei o code e o dev, mas ele nao reconhece #include "Ponto.h"
O professor é ótimo, a matéria que é do satanás mesmo.
9:54 ficou bom mesmo!
Se eu quisesse atribuir uma variavel x1 ao "x" de um ponto usando a função "acessa" Como devo proceder?
Sensacional… Aprendendo mais por aqui do que na faculdade kkk
essa musica da abertura é do Super Nintendo?
A definição de u, uma struct, bem como a definição de sua typedef, devem ser feitas no Arquivo.H?
parabens, aulas maravilhosas !
E as funções pto_atribui e pto_acessa?
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á !!
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
Professor o sr. é o melhor, muito obrigado!!!!
Não é recomendado o casting do malloc. Tipos void são automaticamente convertidos para o tipo certo.
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.
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