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.
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.
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!
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
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 ?
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!😊
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!
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!)
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.
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 RU-vid. Muito obrigado e um salve daqui do "meio do mato" ( WACK, William) 😅, Belém do Pará!