- 78
- 51 330
Algoritmos
Приєднався 26 чер 2020
Curso de Algoritmos.
Professor Paulo Augusto Nardi.
UTFPR.
Caso você tenha assistido a uma das playlists por inteiro e ainda tenha alguma dúvida sobre o conteúdo dado, peço para que, por favor, envie sua dúvida para paulonardi@utfpr.edu.br para me ajudar. Descrevendo as suas dúvidas me ajudará a melhorar a didática e poderei criar mais vídeos ou editar algum vídeo para que outras pessoas com a mesma dúvida possam ter as respostas para o que não entenderam.
Professor Paulo Augusto Nardi.
UTFPR.
Caso você tenha assistido a uma das playlists por inteiro e ainda tenha alguma dúvida sobre o conteúdo dado, peço para que, por favor, envie sua dúvida para paulonardi@utfpr.edu.br para me ajudar. Descrevendo as suas dúvidas me ajudará a melhorar a didática e poderei criar mais vídeos ou editar algum vídeo para que outras pessoas com a mesma dúvida possam ter as respostas para o que não entenderam.
Minecraft! Com ray tracing
Fiz um vídeo com a Enterprise A que montei em casa. O vídeo é baseado nesta cena do filme Star Trek II: Wrath of Khan:
ua-cam.com/video/3MARI-tSWTE/v-deo.html
ua-cam.com/video/3MARI-tSWTE/v-deo.html
Переглядів: 209
Відео
Sobrescrita, modificadores final e abstract
Переглядів 85Рік тому
Este vídeo apresenta o que é sobrescrita e o que os modificadores final e abstract significam, quando usados antes da classe, método e atributo.
Exercícios de Separação de Instruções em Classes de Responsabilidades Diferentes
Переглядів 169Рік тому
São dois exercícios importantes de serem feitos para fixarmos os conceitos vistos no vídeo anterior. Baixem a descrição no link a seguir e façam primeiro, antes de verem este vídeo: nuvem.utfpr.edu.br/index.php/s/ib85o7HaOmvhjNW
Separando o Código por Responsabilidades
Переглядів 109Рік тому
Neste vídeo, identificaremos as instruções em Java e as agruparemos de acordo com suas responsabilidades. Aquelas instruções que representam a interface com usuário ficarão em uma classe; as instruções relacionadas a algo que queiramos modelar no sistema (como cliente, produto, vendedor, venda, etc...) agruparemos em uma outra classe; e aquelas instruções que representam o gerenciamento do proj...
Exercícios de Encapsulamento
Переглядів 41Рік тому
O projeto usado como exercício pode ser baixado no link a seguir: nuvem.utfpr.edu.br/index.php/s/1C5M3vUNr3mXqbg
Encapsulamento
Переглядів 79Рік тому
Este vídeo mostra o recurso de encapsulamento, focando nas aplicações práticas. Em resumo, é muito simples: os atributos e métodos que podem ser acessados de fora de uma classe devem ser declarados como públicos e aqueles que devem ser utilizados apenas de dentro da classe devem ser declarados como privados. Há um outro caso (protected) que veremos em vídeo futuro.
Método Construtor
Переглядів 46Рік тому
Este vídeo mostra o que são métodos construtores, por que usá-los e como implementá-los.
Sobrecarga
Переглядів 103Рік тому
Este vídeo apresenta o conceito de sobrecarga, uma aplicação prática e como implementá-la em Java.
Exercícios Básicos: treinando criação de classe
Переглядів 210Рік тому
Neste vídeo, solucionamos uma lista de exercícios com explicações para fixar o agrupamento de código em classes. Link da lista: nuvem.utfpr.edu.br/index.php/s/T2zfSJwGwJ2NZnX
Transição de C/C++ para Java sem Trauma
Переглядів 146Рік тому
Este vídeo introduz a linguagem Java começando por aquilo que conhecemos em C/C a partir de um código conhecido nosso e o adaptando para ser executado em Java.
Instalando o Java e o Netbeans
Переглядів 172Рік тому
Este vídeo mostra como instalar a linguagem Java e a IDE Netbeans. Também explico um pouco como um programa Java é executado.
Organizando melhor o código: agrupando funções dentro de estruturas
Переглядів 232Рік тому
Este vídeo é um exercício para treinarmos o agrupamento de código (tanto os dados quanto as funções sobre estes dados) em uma estrutura. Isso facilitará o entendimento de POO a partir do próximo vídeo. A lista de exercícios encontra-se neste link: nuvem.utfpr.edu.br/index.php/s/0l5dAfPkKOYYIrX
Introdução: por que é legal?
Переглядів 3782 роки тому
Neste vídeo, faremos uma pequena viagem que mostrará a evolução de alguns paradigmas de programação e um pouco do que esta evolução nos ajuda. Organização é tudo! A programação orientada a objetos nos fornece recursos que facilitam reúso, planejamento e desenvolvimento de código, principalmente quando precisamos criar sistemas grandes. O problema é que quando aprendemos programação orientada, g...
Gaming Retro: Dungeons & Dragons no Intellivision
Переглядів 1613 роки тому
Gaming Retro: Dungeons & Dragons no Intellivision
Recursividade e Programação Dinâmica: programação é um jogo!
Переглядів 3044 роки тому
Recursividade e Programação Dinâmica: programação é um jogo!
Recursividade múltipla: simplicidade e eficiência
Переглядів 3774 роки тому
Recursividade múltipla: simplicidade e eficiência
Recursividade Dupla: começando o momento UAU
Переглядів 4594 роки тому
Recursividade Dupla: começando o momento UAU
Recursividade em Cauda e Otimização de Chamada de Cauda
Переглядів 2 тис.4 роки тому
Recursividade em Cauda e Otimização de Chamada de Cauda
Realizando cálculo com função recursiva
Переглядів 9904 роки тому
Realizando cálculo com função recursiva
Primeira lista de exercícios de recursividade
Переглядів 2,9 тис.4 роки тому
Primeira lista de exercícios de recursividade
Familiarizando-se com recursividade (Parte 2)
Переглядів 5934 роки тому
Familiarizando-se com recursividade (Parte 2)
Familiarizando-se com recursividade (Parte 1)
Переглядів 7544 роки тому
Familiarizando-se com recursividade (Parte 1)
professor o senhor pode passar o link para a lista de exercícios?
Professor pq na programação vcs chamam de vetor uma matriz linha ou coluna?, pq pra mim vetor é algo que tem módulo, direção e sentido.
É um nome que foi pego "emprestado" porque quem deu esse nome viu que os vetores da programação têm uma dimensão, têm magnitude (o tamanho do vetor) e direção (porque vai da posição 0 até o tamanho-1). Mas é um nome emprestado por analogia, mesmo. 😅
assisti o curso de recursividade e gostei muito da sua didatica vou maratonar todos agora
Opa! Valeu! 😊
você é muito bom, esse canal é um patrimônio brasileiro de ensino de programação. <3
@@victorvytb valeeeeeu! 😄
Ficou muito bonito! Qual seu setup?
@@joaoegosum2196 tenho uma geforce 3060 ti e um i7 de 11 geração. Aí, dá para usar o pacote de raytracing. Fica bem doido. 😀
A última coisa que eu esperava ver em um vídeo sobre alocação dinâmica é uma foto do apresentador do vídeo com a seta do avatar na cabeça. Bela careca meu amigo
😅
Eu fiz isso em uma sexta-feira para brincar com o meu filho que tinha começado a assistir ao desenho. A canetinha dizia "lavável". Só sei que era domingo e tive que ir ao mercado de Aang porque ainda não tinha saído. Oo
@@paulonardi7839 o que a gente n faz pelos filhos, né? kkkk
@@Francisco-v8o6m 😅
Adorei o vídeo, a explicação e principalmente os brinquedos fofos do Miguel lá atrás kkkk
Valeu!!!
Eu te amo cara
Muito bom!
Quem também está aqui por causa de algoritmos 2? haha, show professor!
😁
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void valores(int i, int *p) { 5 printf("Insira um valor inteiro:"); 6 scanf("%d",p); 7 if (i > 0) { 8 for (; i >= 0; i--) { 9 if (*p > *(p - i)) { 10 int aux = *(p - i); 11 *(p - i) = *p; 12 *p = aux; 13 } 14 } 15 } 16 } 17 18 int main() { 19 int *p = (int *)malloc(10 * sizeof(int)); 20 for (int i = 0; i < 10; i++) { 21 valores(i, p+i); 22 } 23 for (int i = 0; i < 10; i++) { 24 printf("%d ", *(p + i)); 25 } 26 free(p); 27 return 0; 28 }
Achei muito legal dividir o Selection Sort em duas partes e as passagens dos argumentos! Muito Legal!
Aula excelente, didáctica incrível
No exercício 1, não deveria cria os inteiros recebidos como parâmetros? por exemplo: calcularIdade(int ano, &idade) ao meu ver embora ano já tenha sido criado dentro da main, ano é outra variável no escopo da função calcularIdade, logo deveria ser declarada como um novo espaço da memória
Isso mesmo!!! Ou quase. Sinal de que você está entendendo direito!!! E isso é muito legal. Quando fazemos este tipo de passagem com ponteiros, fazemos basicamente duas ações: -Passar o endereço da variável como argumento na hora de chamar a função, por exemplo: int main(){ int a; fazAlgo(&a); // <-aqui estou passando o endereço da variável como argumento } -E receber este endereço passado, lá na função chamada, com um ponteiro como parâmetro. Exemplo: void fazAlgo(int *b){ //<-Aqui o parâmetro b recebe o endereço da variável a *b = 3; } O objetivo do exercício 1 é apenas treinar o envio do endereço da variável. No exercício 2, o objetivo vai ser treinar como receber o endereço com um ponteiro.
Entendo a quantidade de endereços, mas cada endereço por ser uma sequencia de 32 digitos ( 0 ou 1) totaliza um consumo de 4 bytes da memória ou 16 GB no total somente com endereços, isso é verdade?
Com 32 dígitos (que é o mesmo que 4 bytes) de 0 ou 1 eu consigo representar 4.294.967.296 valores. No caso do gerenciamento de memória, estes valores são endereços de memória que o processador consegue representar/gerenciar com 32 bits. Então, quando um processador de 32 bits precisar pegar um valor na memória, ele vai conseguir acessar o valor que estiver desde o endereço 0 até o endereço 4.294.967.295 da memória (ou, em hexadecimal, do 00000000 ao FFFFFFFF). A sua observação seguinte é verdadeira: se um endereço possui 32 dígitos binários, é o mesmo que dizer que um endereço precisa de 4 bytes para ser armazenado. Já, os 16GB necessários, não. Porque o processador não vai acessar todos os endereços ao mesmo tempo. Ele só precisa acessar um endereço por vez (ou requisitar um por vez) e ler o que está la naquele endereço e nos próximos 3 (se for um valor inteiro). Na verdade, mais do que isso, porque o processador tem vários núcleos e threads, conseguindo fazer mais de uma requisicao por vez.
👏👏👏👏
10 vezes melhor que a aula da minha faculdade. OBG!!!!
Vlw!!!
Finalmente alguém para explicar direito esse algoritmo de Fibonacci com função recursiva. Na maioria das aulas que eu assisti, os professores só jogavam o código e explicavam por cima, e eu nunca entendia direito, kk. Mas dessa vez eu consegui. Muito obrigado!
Que explicação maravilhosa! A melhor que eu vi até hoje sobre recursividade (e olha que eu pesquisei muito já sobre isso, viu, rsrs)
Quando está printando na tela a função recursiva já desempilhou internamente ou só quando fecha o programa?
Grande mestre, orgulhoso de você compartilhar todo esse conhecimento conosco.
Professor, queria tirar uma dúvida de PO, em relação a projeto Singleton. Existe uma forma correta de se criar uma classe Singleton que seja Singleton também para processos? Por que mesmo criando a classe como Singleton, quando eu instancio ela de processos diferentes ele cria instâncias diferentes da classe, acho que pelo fato de estarem em áreas de memória diferentes. É em python, eu consigo até contornar isso instanciando a classe dentro do processo pai (antes de criar os filhos), e passando o objeto com um manager para os filhos. Mas daí acho que não dá para chamar de Singleton, porque só funciona enquanto estiverem usando o objeto do processo pai, se um dos processos filhos tentar criar uma nova instância da classe, vai acabar criando uma nova instância. Tem uma forma correta de se fazer isso?
os exemplos são bem medianos, mas para o brasileiro que e um analfabeto em c são razovelmente nao tão ruins. o que eu nao entendo é a burrifce do brasileiro em afirmar que um codigo de programação quer dizer algoritmo, nao são de maneira alguma sinomos pelo amor de deus parem de repetir asneiras. Um dos primeiros algorimos foi criado por aristoteles com a sua fundamental forma e conteudo que obviamente voces nem sabem que existe. Explicando uma brasileiro entender. algoritimo 1 kg de farinha 2 ovos 500mg de trigo levar ao forno durante 30 minutod -> algoritimo = bolo #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main() { pid_t p = fork(); if(p<0){ perror("fork fail"); exit(1); } printf("Hello world!, process_id(pid) = %d ",getpid()); return 0; } isso é uma system call um unix para um fork(se não sabe o que é azar o seu vai ler e aprender porque eu nao baba e por nao tenho tempo e nem quero ensinar voces tem que ir atras, bom o que posso dizer é que com uma chamada dessa usando um pipe com atextic.h pode produzir estragos o que não é nada bom, mais eu sem que desperta a curiosidade de pessoas de pouco conhecimento como os brasileiros que sem duvidas apenas perdem para os portugueses em desconhecimento de programação, obvio so exite um meio de saber programar e este usando unix, bsd, solaris ou alguma distro linux recomendo fedora o resto é apenas o que o merda do windows deixa voce usar entedeu? Botoes nao existem e um program é uma palavra dificil entender para voce, pois entao eu vou complicar voce so usa internet por que consegue abriar um arquivo, sim isso mesmo, agora decifrem procurem pela api sockets do bsd 4.2 lançada em 1984 disponive gratuitamente. Enfim ja perdir muito tempo aqui so quero deixar claro nada contra o canal deixei essa mensagem porque vi que seu canal chama algoritimo e dei muita risada. Enfim c-ya
Muito bem explicado.
Você cria os malloc no main e usa o free no main , mas é se eu usar o free em uma função qualquer? E se eu usar o free em uma função em um arquivo diferente ?
26/10/2023 - Aula muito útil!
Muito bom, cara....
melhor aula de alocação dinâmica que já vi
Obrigado pelo elogio!!!
Eu sou o inscrito 839! Obrigado professor, por dispor seu tempo para o enriquecimento das linguagens de programação, como forma de apredizagem transmitindo todo o seu conhecimento a nós iniciantes neste imenso mundo tecnologia da informação. Gratidão!😊
Eu que agradeço o elogio! :)
Parabéns pela didática e detalhamento técnico do conteúdo. [Agostinho] 25:36
Obrigado!😃
Muito bom!!!
cara, parabéns, você tem o dom de ensinar, te desejo muito sucesso nessa vida
super top , muito top mesmo \o/
Boa! Gostei muito
Tô ansioso pra começarmos essa playlist, professor. Mas antes devemos ter alguns pré-requisitos. Até mais!
😀
Obrigada, professor. O assunto não entrava na minha cabeça, mas o senhor sanou todas as dívidas sobre o assunto😊
Eu que agradeço o feedback!
Professor, estou com um grupo de estudos e usamos as suas playlists para estudarmos. Somos do IFPA em Belém. Ultimamente estamos acompanhando as aulas de recursividades. Valeu!
Opa! Show de bola! Valeu!!! Abraço para o pessoal de Belém!!!😃
Gostei bastante da sua didática !! fiz algumas implementações em java package nassau; /** * * @author Kauã Rodrigo * @since 11/09/2023 */ public class Recursividade { public static void main(String[] args) { System.out.println("Contagem crescente"); contarCrescente(1, 3); System.out.println("Contagem descrente"); contarDecrescente(3); System.out.println("Contagem falando se é par ou impar"); contarCrescenteParImpar(1, 5); System.out.println("Contar de dois em dois"); contarDoisEmDois(0, 9); } // contar de dois em dois public static void contarDoisEmDois(int inicial, int limite){ if(inicial <= limite){ System.out.println(inicial); contarDoisEmDois(inicial + 2, limite); } } // contando e falando se o número da vez é impar ou par public static void contarCrescenteParImpar(int inicial, int limite){ if(inicial <= limite){ if(inicial % 2 == 0){ System.out.println(inicial + " é par"); } else { System.out.println(inicial + " é impar"); } contarCrescenteParImpar(inicial + 1, limite); } } // contar de forma decrescente public static void contarDecrescente(int valor){ if(valor >= 0){ System.out.println(valor); contarDecrescente(valor - 1); } } // contar até o limite usando recursividade (Isso é linear) public static void contarCrescente(int inicial, int limite) { if (inicial <= limite) { System.out.println(inicial); contarCrescente(inicial + 1, limite); } } }
professor, o seu canal foi um achado e tanto! tô estudando exatamente esses assuntos na faculdade e essa playlist tá me ajudando de uma forma inimaginável!!! por favor, poste maissss! (PS: já assisti quase todas as playlists de C e também são perfeitas, o senhor é 1000!)
Obrigado pelo elogio!😀
OLA....ESSE ESPAÇO DE MEMORIA FICA ALOCADO AONDE??..NÃO ENTENDI
a alocação dinâmica reserva espaço na memória principal. Acontece que para cada programa executado (na verdade, cada processo), uma quantidade de endereços de memória é reservada para este processo. Estes endereços são separados em grupos. Um desses grupos é a pilha, onde vão ser alocadas as variáveis locais. Outro desses grupos é a heap. A alocação dinâmica usa endereços deste grupo. Mas é tudo parte da memória principal. Essa separação em grupos é feito pelo compilador/SO. É uma separação "lógica", e não física.
Obrigado irmão
Grande Nardi! Que saudade de vc!
Hoje, de noite, assistirei aos vídeos e exercitarei. Agora estou no intervalo do meu trampo.
Pow, professor! Já subiu mais um!? Bacana! Realmente tô empolgado com essa play! Pois coincide com a disciplina q esou estudando no IFPA.
Aí sim! Hoje mesmo vou exercitar! Obrigado, professor!
Professor, (se possível) volta com o gaming! Recomendo Yakuza 0 ou Shenmue (Remaster do Dreamcast)
eu de hj em diante vou parar com tudo o q faço e ver só coisa de programação e estudar pro enem e fazer faculdade.
Excelente, professor! Muito obrigado! Revelador!
Valeu! 😀
Fala, professor! Bora pra cima! Muito boa a aula! TMJ!
Obrigado Professor estava com saudades de seus vídeos...
Opa! Valeu!
Fala, professor! Vai ter aulas de Java!? 🎉 Estou em transição profissional então teus vídeos ajudaram-me muito neste ano. Foi uma grata descoberta de encontrar-lhe aqui no UA-cam. Muito obrigado e um salve daqui do "meio do mato" ( WACK, William) 😅, Belém do Pará!
Vai, sim! Puxa, que legal que ajudou! Obrigado pelo feedback! Belém do Pará! Muito legal! Boa sorte em sua jornada!
@@algoritmos4470 Obrigado! E aos meus amigos que estudam programação sempre q tenho oportunidade indico este canal. Sucesso!