Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre recursividade.
O documento apresenta um resumo de uma aula sobre PHP. Aborda tópicos como instalação do EasyPHP, sintaxe básica da linguagem, variáveis, constantes, objetos, operadores, comandos de decisão e formulários. Explica como recuperar dados de um formulário HTML através do PHP para realizar cálculos e exibir resultados.
Los tres programas describen diferentes formas de controlar LEDs usando BASIC. El primer programa identifica la dirección del puerto paralelo. El segundo programa enciende los LEDs secuencialmente en una dirección u otra. El tercer programa enciende los LEDs saltando uno para crear un patrón diferente.
Este documento fornece uma introdução à análise assintótica de algoritmos, definindo conceitos como tipos de dados, algoritmos, complexidade e ordens de crescimento. Ele explica como analisar algoritmos para determinar seus melhores, piores e casos médios, além de apresentar exemplos para ilustrar esses conceitos.
Dicas para aumentar a performance de um software PHPAlmir Neto
Evitar utilizar funções em laços de repetição, utilizar aspas simples quando a string não precisa ser interpretada, utilizar um bom sistema de cache... Essas e outras várias atitudes podem significar um grande ganho de performance em softwares desenvolvidos em PHP e colaborar para o sucesso de um projeto.
[1] O documento apresenta um curso de introdução à linguagem assembly para arquitetura PC (Intel 80XXX). [2] O curso é prático e apresenta os fundamentos da linguagem de forma não sequencial, com explicações e exemplos práticos em cada seção. [3] A primeira lição prática apresenta instruções assembly básicas para exibir uma mensagem "Hello World" diretamente na memória usando o programa DEBUG do Windows XP.
Este documento presenta un glosario de comandos y funciones del lenguaje de programación QBasic. Explica que QBasic es un entorno de programación que permite convertir la computadora en una máquina de escribir sofisticada para construir programas. Incluye definiciones de comandos como CLS para limpiar la pantalla, PRINT para imprimir texto, INPUT para entrada de datos, y COLORES para especificar colores del 0 al 15 en la pantalla.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre funções em C.
O documento apresenta um resumo de uma aula sobre PHP. Aborda tópicos como instalação do EasyPHP, sintaxe básica da linguagem, variáveis, constantes, objetos, operadores, comandos de decisão e formulários. Explica como recuperar dados de um formulário HTML através do PHP para realizar cálculos e exibir resultados.
Los tres programas describen diferentes formas de controlar LEDs usando BASIC. El primer programa identifica la dirección del puerto paralelo. El segundo programa enciende los LEDs secuencialmente en una dirección u otra. El tercer programa enciende los LEDs saltando uno para crear un patrón diferente.
Este documento fornece uma introdução à análise assintótica de algoritmos, definindo conceitos como tipos de dados, algoritmos, complexidade e ordens de crescimento. Ele explica como analisar algoritmos para determinar seus melhores, piores e casos médios, além de apresentar exemplos para ilustrar esses conceitos.
Dicas para aumentar a performance de um software PHPAlmir Neto
Evitar utilizar funções em laços de repetição, utilizar aspas simples quando a string não precisa ser interpretada, utilizar um bom sistema de cache... Essas e outras várias atitudes podem significar um grande ganho de performance em softwares desenvolvidos em PHP e colaborar para o sucesso de um projeto.
[1] O documento apresenta um curso de introdução à linguagem assembly para arquitetura PC (Intel 80XXX). [2] O curso é prático e apresenta os fundamentos da linguagem de forma não sequencial, com explicações e exemplos práticos em cada seção. [3] A primeira lição prática apresenta instruções assembly básicas para exibir uma mensagem "Hello World" diretamente na memória usando o programa DEBUG do Windows XP.
Este documento presenta un glosario de comandos y funciones del lenguaje de programación QBasic. Explica que QBasic es un entorno de programación que permite convertir la computadora en una máquina de escribir sofisticada para construir programas. Incluye definiciones de comandos como CLS para limpiar la pantalla, PRINT para imprimir texto, INPUT para entrada de datos, y COLORES para especificar colores del 0 al 15 en la pantalla.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre funções em C.
O documento apresenta conceitos básicos de programação como tipos de dados, variáveis, vetores, estruturas de dados, funções, alocação de memória e algoritmos. Também discute análise da complexidade de algoritmos, comparando diferentes métodos de busca como busca linear, binária e outros algoritmos de busca.
Este documento resume uma apresentação sobre o plugin CakePtbr para o framework PHP CakePHP. O plugin adiciona recursos em português brasileiro ao CakePHP, como tradução de mensagens, geração de arquivos em português com o comando "bake", ajuste de formato de datas e números, integração com estados e cidades brasileiras e cálculo de frete com os Correios. Futuras melhorias incluem geração de boletos, integração com PagSeguro e NFe.
O documento descreve a linguagem de programação COBOL, incluindo suas divisões, regras básicas e estruturas. COBOL é uma linguagem orientada para negócios criada em 1959 que utiliza palavras em inglês em vez de códigos. Os programas COBOL consistem em 4 divisões obrigatórias (IDENTIFICATION, ENVIRONMENT, DATA e PROCEDURE) que descrevem respectivamente a identificação, ambiente, dados e procedimentos do programa.
Este documento fornece uma introdução ao framework PHP CakePHP. Resume as seguintes informações essenciais:
1) O CakePHP é um framework popular e flexível para desenvolvimento web com PHP usando o padrão MVC.
2) Ele fornece muitos recursos prontos como scaffolding, helpers, componentes e internacionalização.
3) O CakePHP usa uma estrutura de pastas padronizada e segue convenções claras para desenvolvimento rápido.
Uniões permitem compartilhar espaço de memória entre variáveis de tipos de dados diferentes. Uma união armazena apenas um membro de cada vez, usando espaço suficiente para o maior tipo de dado membro. Isso economiza memória em situações onde variáveis diferentes não são necessárias ao mesmo tempo. O programador deve garantir que os dados na união sejam acessados usando o tipo correto.
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
O documento discute o framework PHP CakePHP e fornece uma introdução sobre como ele implementa o padrão MVC. O documento explica que o CakePHP separa a lógica da aplicação em três partes - modelo, visão e controle - para melhorar a produtividade, consistência e manutenção. O CakePHP também fornece ferramentas e classes que servem de base funcional para toda a aplicação.
O documento descreve o framework PHP CakePHP. Ele fornece um resumo sobre o que é CakePHP, quem o está usando e por que estão usando, além de abordar tópicos como MVC, ORM, validação, internacionalização e rotas.
O documento descreve conceitos e definições relacionados a estruturas em C, incluindo:
1) Estruturas agrupam variáveis de diferentes tipos sob um único nome e são usadas para armazenar registros em arquivos;
2) A declaração de estruturas define os membros mas não aloca memória, enquanto variáveis de estrutura alocam memória;
3) Os membros de uma estrutura podem ser acessados usando o operador ponto ou seta.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre relações de recorrência em relação com a análise e complexidade de algoritmos.
O documento discute técnicas para otimizar o desempenho de websites desenvolvidos em PHP. Ele aborda ajustes que podem ser feitos no servidor web e no banco de dados para melhorar a performance, como utilização de módulos do Apache, configuração do MySQL e uso de cache. Além disso, apresenta técnicas de profiling em PHP para identificar gargalos e otimizações como compactação de arquivos e static assets.
O documento discute as características das linguagens de programação COBOL e BASIC, incluindo suas estruturas básicas, sintaxes e definições. O COBOL segue regras estritas de formatação de código e suporte variáveis locais limitado, enquanto o BASIC tem muitas variações e foi projetado para ser fácil de usar e interativo.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre análise da complexidade de algoritmos.
Este programa implementa uma pilha dinâmica em Pascal utilizando ponteiros. Ele define um tipo de dado para os nós da pilha e inclui procedimentos para criar a pilha, empilhar, desempilhar, verificar o topo e imprimir a pilha. O programa principal contém um menu com essas opções para testar a implementação da pilha.
O documento apresenta conceitos sobre arrays em C, incluindo: 1) arrays são estruturas de dados que armazenam itens do mesmo tipo; 2) arrays possuem tamanho fixo e elementos são acessados via índice; 3) arrays podem ser inicializados de forma explícita ou implícita. Exemplos demonstram operações comuns com arrays como inicialização, impressão e cálculos.
Este documento apresenta os fundamentos de lógica e algoritmos. Discute o que é um algoritmo e como ele pode ser usado para resolver problemas através de uma sequência de instruções claras. Também aborda conceitos como variáveis, entrada e saída de dados, e operadores lógicos e aritméticos que são essenciais para desenvolvimento de algoritmos.
O documento apresenta 20 algoritmos em C que resolvem problemas matemáticos como cálculo de áreas, perímetros, médias, maior e menor entre números. Os algoritmos variam desde operações simples como soma até resolução de equações de 2o grau.
Desenvolvimento web: PHP orientado a objetosLucas Vegi
Este documento apresenta um curso de PHP orientado a objetos. O curso tem como objetivo ensinar conceitos básicos de PHP para iniciar projetos de programação orientada a objetos nesta linguagem. O conteúdo programático inclui módulos sobre introdução ao PHP, a linguagem PHP, programação orientada a objetos com PHP e sessões.
O documento apresenta uma introdução sobre ponteiros em C, definindo-os como variáveis que armazenam endereços de memória e explicando como eles permitem a manipulação dinâmica de estruturas de dados. Os principais pontos apresentados são: (1) ponteiros permitem simular passagem por referência e criar estruturas dinâmicas; (2) ponteiros armazenam endereços de memória ao invés de valores; (3) os operadores & e * são usados para obter endereços e valores apontados.
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
O documento apresenta diversas formas de se usar a linha de comando no PHP, incluindo: 1) Exemplos básicos de "Hello World"; 2) Entrada e saída de dados através de streams; 3) Captura de parâmetros da linha de comando. O documento também discute técnicas avançadas como controle do terminal, processamento assíncrono e daemons.
O documento descreve um programa em C que cria uma struct para representar um carro, preenche os dados de um carro específico e exibe esses dados através de uma função. O programa define a struct "CARRO", cria uma variável do tipo CARRO chamada "fusca" e preenche seus campos, e implementa uma função "Exibe" que recebe um CARRO e imprime seus campos.
Este documento apresenta um curso introdutório à linguagem C. O curso é composto por módulos em PDF e vídeos que ensinam conceitos básicos como variáveis, constantes, vetores unidimensionais e bidimensionais, e uso de vetores como parâmetros de funções. O objetivo é que os alunos adquiram noções fundamentais de C para depois aprenderem Java de forma autônoma.
O documento discute algoritmos, definindo-os como um conjunto de regras para solução de problemas. Apresenta etapas para construção de algoritmos, como definir entrada, processamento e saída de dados. Descreve diferentes tipos de algoritmos como descrição narrativa, pseudocódigo e fluxograma. Por fim, fornece exemplos e exercícios para fixação dos conceitos.
O documento apresenta conceitos básicos de programação como tipos de dados, variáveis, vetores, estruturas de dados, funções, alocação de memória e algoritmos. Também discute análise da complexidade de algoritmos, comparando diferentes métodos de busca como busca linear, binária e outros algoritmos de busca.
Este documento resume uma apresentação sobre o plugin CakePtbr para o framework PHP CakePHP. O plugin adiciona recursos em português brasileiro ao CakePHP, como tradução de mensagens, geração de arquivos em português com o comando "bake", ajuste de formato de datas e números, integração com estados e cidades brasileiras e cálculo de frete com os Correios. Futuras melhorias incluem geração de boletos, integração com PagSeguro e NFe.
O documento descreve a linguagem de programação COBOL, incluindo suas divisões, regras básicas e estruturas. COBOL é uma linguagem orientada para negócios criada em 1959 que utiliza palavras em inglês em vez de códigos. Os programas COBOL consistem em 4 divisões obrigatórias (IDENTIFICATION, ENVIRONMENT, DATA e PROCEDURE) que descrevem respectivamente a identificação, ambiente, dados e procedimentos do programa.
Este documento fornece uma introdução ao framework PHP CakePHP. Resume as seguintes informações essenciais:
1) O CakePHP é um framework popular e flexível para desenvolvimento web com PHP usando o padrão MVC.
2) Ele fornece muitos recursos prontos como scaffolding, helpers, componentes e internacionalização.
3) O CakePHP usa uma estrutura de pastas padronizada e segue convenções claras para desenvolvimento rápido.
Uniões permitem compartilhar espaço de memória entre variáveis de tipos de dados diferentes. Uma união armazena apenas um membro de cada vez, usando espaço suficiente para o maior tipo de dado membro. Isso economiza memória em situações onde variáveis diferentes não são necessárias ao mesmo tempo. O programador deve garantir que os dados na união sejam acessados usando o tipo correto.
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
O documento discute o framework PHP CakePHP e fornece uma introdução sobre como ele implementa o padrão MVC. O documento explica que o CakePHP separa a lógica da aplicação em três partes - modelo, visão e controle - para melhorar a produtividade, consistência e manutenção. O CakePHP também fornece ferramentas e classes que servem de base funcional para toda a aplicação.
O documento descreve o framework PHP CakePHP. Ele fornece um resumo sobre o que é CakePHP, quem o está usando e por que estão usando, além de abordar tópicos como MVC, ORM, validação, internacionalização e rotas.
O documento descreve conceitos e definições relacionados a estruturas em C, incluindo:
1) Estruturas agrupam variáveis de diferentes tipos sob um único nome e são usadas para armazenar registros em arquivos;
2) A declaração de estruturas define os membros mas não aloca memória, enquanto variáveis de estrutura alocam memória;
3) Os membros de uma estrutura podem ser acessados usando o operador ponto ou seta.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre relações de recorrência em relação com a análise e complexidade de algoritmos.
O documento discute técnicas para otimizar o desempenho de websites desenvolvidos em PHP. Ele aborda ajustes que podem ser feitos no servidor web e no banco de dados para melhorar a performance, como utilização de módulos do Apache, configuração do MySQL e uso de cache. Além disso, apresenta técnicas de profiling em PHP para identificar gargalos e otimizações como compactação de arquivos e static assets.
O documento discute as características das linguagens de programação COBOL e BASIC, incluindo suas estruturas básicas, sintaxes e definições. O COBOL segue regras estritas de formatação de código e suporte variáveis locais limitado, enquanto o BASIC tem muitas variações e foi projetado para ser fácil de usar e interativo.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre análise da complexidade de algoritmos.
Este programa implementa uma pilha dinâmica em Pascal utilizando ponteiros. Ele define um tipo de dado para os nós da pilha e inclui procedimentos para criar a pilha, empilhar, desempilhar, verificar o topo e imprimir a pilha. O programa principal contém um menu com essas opções para testar a implementação da pilha.
O documento apresenta conceitos sobre arrays em C, incluindo: 1) arrays são estruturas de dados que armazenam itens do mesmo tipo; 2) arrays possuem tamanho fixo e elementos são acessados via índice; 3) arrays podem ser inicializados de forma explícita ou implícita. Exemplos demonstram operações comuns com arrays como inicialização, impressão e cálculos.
Este documento apresenta os fundamentos de lógica e algoritmos. Discute o que é um algoritmo e como ele pode ser usado para resolver problemas através de uma sequência de instruções claras. Também aborda conceitos como variáveis, entrada e saída de dados, e operadores lógicos e aritméticos que são essenciais para desenvolvimento de algoritmos.
O documento apresenta 20 algoritmos em C que resolvem problemas matemáticos como cálculo de áreas, perímetros, médias, maior e menor entre números. Os algoritmos variam desde operações simples como soma até resolução de equações de 2o grau.
Desenvolvimento web: PHP orientado a objetosLucas Vegi
Este documento apresenta um curso de PHP orientado a objetos. O curso tem como objetivo ensinar conceitos básicos de PHP para iniciar projetos de programação orientada a objetos nesta linguagem. O conteúdo programático inclui módulos sobre introdução ao PHP, a linguagem PHP, programação orientada a objetos com PHP e sessões.
O documento apresenta uma introdução sobre ponteiros em C, definindo-os como variáveis que armazenam endereços de memória e explicando como eles permitem a manipulação dinâmica de estruturas de dados. Os principais pontos apresentados são: (1) ponteiros permitem simular passagem por referência e criar estruturas dinâmicas; (2) ponteiros armazenam endereços de memória ao invés de valores; (3) os operadores & e * são usados para obter endereços e valores apontados.
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
O documento apresenta diversas formas de se usar a linha de comando no PHP, incluindo: 1) Exemplos básicos de "Hello World"; 2) Entrada e saída de dados através de streams; 3) Captura de parâmetros da linha de comando. O documento também discute técnicas avançadas como controle do terminal, processamento assíncrono e daemons.
O documento descreve um programa em C que cria uma struct para representar um carro, preenche os dados de um carro específico e exibe esses dados através de uma função. O programa define a struct "CARRO", cria uma variável do tipo CARRO chamada "fusca" e preenche seus campos, e implementa uma função "Exibe" que recebe um CARRO e imprime seus campos.
Este documento apresenta um curso introdutório à linguagem C. O curso é composto por módulos em PDF e vídeos que ensinam conceitos básicos como variáveis, constantes, vetores unidimensionais e bidimensionais, e uso de vetores como parâmetros de funções. O objetivo é que os alunos adquiram noções fundamentais de C para depois aprenderem Java de forma autônoma.
O documento discute algoritmos, definindo-os como um conjunto de regras para solução de problemas. Apresenta etapas para construção de algoritmos, como definir entrada, processamento e saída de dados. Descreve diferentes tipos de algoritmos como descrição narrativa, pseudocódigo e fluxograma. Por fim, fornece exemplos e exercícios para fixação dos conceitos.
O documento discute algoritmos, definindo-os como um conjunto de regras para solução de problemas. Apresenta etapas para construção de algoritmos, como definir entrada, processamento e saída de dados. Descreve diferentes tipos de algoritmos como descrição narrativa, pseudocódigo e fluxograma. Por fim, fornece exemplos e exercícios para fixação dos conceitos.
Javascript Recuperando Dados De Formulariosguestd9e271
O documento descreve como recuperar dados de um formulário HTML usando JavaScript. Ele começa explicando como escrever um formulário básico com campos de texto e senha e depois mostra como usar JavaScript para obter os valores digitados nos campos e exibi-los em uma mensagem de alerta.
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
O documento fornece 3 dicas principais para escrever códigos JavaScript melhores:
1) Aprenda bem a linguagem JavaScript e seus conceitos-chave.
2) Aplique padrões como o Module Pattern para organizar e encapsular o código.
3) Use arquiteturas como MVC para separar as preocupações da aplicação.
Além disso, fornece dicas gerais como documentar o código, criar arquivos separados, injetar dependências e realizar testes. O objetivo é ajudar a escrever códigos mais
O documento apresenta um resumo de 5 aulas sobre a linguagem de programação C. A primeira aula introduz conceitos básicos como variáveis, constantes, operadores e expressões. A segunda aula aborda estruturas de controle de fluxo e arrays. A terceira aula trata de ponteiros e funções. A quarta aula discute diretivas de compilação e entrada/saída padronizada. A quinta e última aula apresenta tópicos avançados como tipos de dados definidos pelo usuário.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
O documento descreve diferentes estruturas de repetição em Java, incluindo loops for, while e o uso de vetores e matrizes. Explica como usar variáveis de controle e condições para repetir comandos um número determinado de vezes ou enquanto uma condição for verdadeira. Também mostra como declarar e acessar elementos de vetores e matrizes usando índices.
O documento lista 15 exercícios de programação em linguagem C que envolvem operações com vetores e strings, laços de repetição, condicionais e funções. Os exercícios vão desde ler e imprimir elementos de vetores até cálculos com números inteiros e reais.
O documento apresenta 16 exercícios sobre funções e procedimentos em programação. Os exercícios 1-8 envolvem converter programas que usam funções para usar procedimentos e vice-versa. Os exercícios 9-16 envolvem criar programas que chamam funções ou procedimentos para realizar cálculos e mostrar os resultados, como cálculo de médias, áreas, potências e velocidade média.
O documento discute funções em programação estruturada em C++. Explica que funções são blocos de código reutilizáveis que executam tarefas específicas e podem receber e retornar dados. Detalha a sintaxe básica de funções, incluindo o tipo de retorno, nome, parâmetros e corpo. Fornece um exemplo simples de função para soma de dois números.
Este documento discute funções em programação e como elas podem ser usadas para dividir códigos complexos em partes menores e reutilizáveis. O documento apresenta exemplos de como definir e usar funções em C para realizar tarefas como somar números e desenhar casas usando caracteres ASCII. Também discute conceitos como abstração, prototipagem e como funções podem facilitar a manutenção de softwares grandes e complexos dividindo-os em módulos independentes.
O documento explica a propriedade distributiva da multiplicação em relação à adição. Em particular, ele mostra que para qualquer números a, b e c, (a + b) * c = a * c + b * c.
Este documento descreve uma atividade prática supervisionada sobre matemática aplicada realizada por uma escola de ensino à distância. A atividade analisa a situação financeira de uma escola de reforço escolar que precisou contratar novos professores e equipamentos. É apresentado o levantamento dos gastos da escola com capacitação e equipamentos, assim como o número de alunos e receitas por turno. Funções matemáticas como de primeiro e segundo grau, exponencial e variação média e imediata são identificadas para modelar a situação.
1. O documento apresenta exemplos de códigos em C utilizando estruturas de repetição como for, while, do-while e switch para realizar operações matemáticas e lógicas como cálculo de fatorial, média, maior/menor valor entre outros.
2. São mostrados casos de uso do switch para classificar idades, aumentos salariais e meses do ano.
3. Há exemplos com vetores demonstrando operações como leitura e impressão de valores, comparação com gabarito e cálculo de acertos.
1. O programa recebe como entrada as coordenadas de três pontos que formam um triângulo e calcula o perímetro do triângulo.
2. O perímetro é calculado somando as distâncias entre os pares de pontos, utilizando a fórmula da distância euclidiana para cada par de pontos.
3. Os resultados são mostrados na tela dentro de uma moldura.
O documento discute o padrão de projeto Strategy para melhorar o design de código. Strategy encapsula comportamentos em classes separadas para que um algoritmo possa ser trocado facilmente. Isso é ilustrado com um exemplo de cálculo de impostos, onde diferentes estratégias de cálculo (classes ICMS e ISS) podem ser usadas por um calculador polimórfico.
O documento apresenta exemplos de algoritmos em linguagem Octave/Matlab para cálculo de soma, área de círculo e outros. Inclui explicações sobre o que é um algoritmo, como expressá-lo graficamente em diagramas de atividades e em linguagem de programação. Também fornece dicas e exercícios para que os alunos desenvolvam seus próprios algoritmos.
Como criar uma calculadora no Game Maker 8.0 (GML Console)Rodrigo Cavalcante
Tutorial simples e fácil de como criar uma simples calculadora no Game Maker, em sua linguagem GML.
Neste tutoriais utiliza-se das funções: var, if, else, operadores, show_message e get_string.
Visite o blog: proggmk.blogspot.com para obter mais tutoriais.
O documento discute os princípios e práticas da agilidade, times ágeis e desenvolvimento de produtos. Aborda conceitos como agilidade, times, discovery, delivery, kanban e histórias de usuário.
1) O documento discute times de produto de alta performance e como criar uma cultura que os apoie.
2) Times de alta performance se comprometem a resolver desafios, são apaixonados pelos problemas, gastam tempo necessário pesquisando e testando, se responsabilizam pelos resultados e enxergam o produto como parte de uma jornada maior.
3) A cultura deve empoderar times, permitir experimentação, ter objetivos claros e estratégia definida.
O documento discute times de produto de alta performance. Ele explica que esses times têm membros altamente competentes e comprometidos que se alinham por resultados, definem metas e papéis, e lidam bem com pressão e conflitos. Esses times também desenvolvem forte coesão, trabalham de forma colaborativa, e sustentam alto desempenho se adaptando à mudança.
Transformação Digital: Criando uma empresa financeiramente estratégica para o...Pablo Silva
No cenário atual de transformação digital, onde diversas áreas evoluem cada vez mais e mais rápido, é preciso definir algumas estratégias - não só para acompanhar essas inovações, como também para planejar o futuro do negócio.
Financeiramente, é preciso fazer muito mais do que apenas tentar adequar-se às novas tendências. E quem melhor para ajudar nesse quesito do que a startup que vem revolucionando como o maior meio de pagamento independente do país?
Nessa talk Pablo Silva (Head de Produto na Vindi), te mostrará como criar estratégias financeiramente inteligentes para o futuro. Afinal, criar soluções e inovações em pagamentos é o que a Vindi faz e o que ajuda as empresas de hoje a também serem "empresas do amanhã".
OKR is the new black: porque esse framework está tão na moda?Pablo Silva
O documento discute como os objetivos e resultados-chave (OKRs) se tornaram populares como um framework para definir metas e alinhar equipes. OKRs ajudam a eliminar gaps entre objetivos, planos e resultados, além de promover transparência, foco, alinhamento e engajamento. O documento também destaca a importância de ter uma estratégia clara e as pessoas certas para que OKRs funcionem de forma efetiva.
Transformando times de desenvolvimento mercenários em times de produto missio...Pablo Silva
[1] O documento discute a diferença entre times de desenvolvimento "mercenários" e "missionários" e como transformar times mercenários em times missionários.
[2] Times mercenários desenvolvem o que lhes é mandado, enquanto times missionários acreditam no propósito da empresa e estão comprometidos a resolver problemas dos clientes.
[3] O documento fornece cinco características principais de times missionários, incluindo entenderem que todos precisam se comprometer a resolver desafios e se sentirem donos do negócio e responsáveis pel
O documento lista as próximas ondas tecnológicas incluindo inteligência artificial, machine learning, internet das coisas usando JavaScript, blockchain, realidade virtual e aumentada. Também discute as tendências de popularidade de linguagens de programação e oportunidades de mercado para cientistas de dados, machine learning e engenheiros de big data.
Carreira Dev: dicas pra você que vai chegar na semana que vemPablo Silva
Nesta talk mostro o patamar 2018 para quem quer seguir carreira de desenvolvedor e tech. Mostro também as tendências da tecnologia para os próximos meses e anos.
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio Pablo Silva
Organizações que não possuem times realmente multidisciplinares sofrem, muitas vezes, com a baixa integração entre negócio, experiência do usuário e tecnologia. Como resultado, muitas vezes meses de trabalho podem ser jogados foram por falta de comunicação e de colaboração. Nessa talk, vou mostrar como utilizamos o Dual Track Agile para fazer com que times que tinham baixa integração passassem a trabalhar juntos, se tornando realmente ágeis, colaborativos, gerando muito menos desperdício e com foco e melhoria contínua.
O documento discute sobre objetivos e resultados-chave (OKRs) como uma estrutura para definir metas e acompanhar o progresso de equipes. Ele explica que OKRs devem ser definidos anualmente pela liderança e trimestralmente pelas equipes, com objetivos globais e locais específicos, mensuráveis e alcançáveis. O documento também discute cerimônias de OKRs, erros comuns e cinco passos para definir bons OKRs.
2 anos usando OKRs: adeus achismo-drivenPablo Silva
O documento discute as limitações de se tomar decisões baseadas em suposições ("achismo") em vez de dados e validação. Também apresenta o sistema OKR de definição de objetivos e resultados-chave como uma alternativa melhor para direcionar o trabalho de forma transparente, focada e alinhada. Por fim, enfatiza a importância de errar rápido e constantemente gerar valor para os usuários em mercados em constante mudança.
Ágil nao é mais tendência, é sobrevivência!Pablo Silva
O documento discute como a era digital está forçando as empresas a adotarem modelos ágeis para sobreviverem, já que as necessidades dos clientes mudam rapidamente e a tecnologia avança a passos largos. Defende que ser ágil de verdade requer mudar a cultura, processos e estrutura organizacional para entregar valor contínuo aos clientes em intervalos curtos, ao invés de seguir planos rígidos. Também desmistifica conceitos sobre agilidade, afirmando que se trata de reduzir incertezas, não de entregar mais
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...Pablo Silva
O documento discute a implementação do método "Dual Track Agile" para melhorar a integração entre as equipes de UX, PO, Marketing e Desenvolvedores no processo de desenvolvimento de produtos, definindo objetivos comuns e focando na experiência do usuário.
Nem só de codigo vive homem (Management version)Pablo Silva
O documento discute a necessidade de desenvolver novas habilidades para além do código, como habilidades socioemocionais, pensamento crítico e criatividade. Também enfatiza a importância de prover ambientes seguros e enxergar valor nas pessoas para que elas possam ser produtivas e felizes no trabalho.
Nem só de código vive o homem (Versão para desenvolvedores)Pablo Silva
O documento discute como as habilidades técnicas de programação já não são suficientes no futuro do trabalho e enfatiza a importância do desenvolvimento de habilidades socioemocionais. Também destaca que 49% das profissões nos EUA correm alto risco de automação e que é necessário buscar autoconhecimento e novas experiências para acompanhar as transformações digitais.
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoPablo Silva
Este documento discute a abordagem "Dual-Track Agile" para incluir profissionais de UX e PO no time de desenvolvimento de software. A abordagem sugere dois trilhos paralelos: um para descoberta e prototipagem e outro para entrega. Isso melhora a comunicação, evita desperdícios e organiza o que vem a seguir no processo de desenvolvimento.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é uma revisão sobre ponteiros na linguagem de programação C.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é uma revisão sobre structs na linguagem de programação C.
LIVRO MPARADIDATICO SOBRE BULLYING PARA TRABALHAR COM ALUNOS EM SALA DE AULA OU LEITURA EXTRA CLASSE, COM FOCO NUM PROBLEMA CRUCIAL E QUE ESTÁ TÃO PRESENTE NAS ESCOLAS BRASILEIRAS. OS ALUNOS PODEM LER EM SALA DE AULA. MATERIAL EXCELENTE PARA SER ADOTADO NAS ESCOLAS
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24, Pr Henrique, EBD NA TV, Revista ano 11, nº 1, Revista Estudo Bíblico Jovens E Adultos, Central Gospel, 2º Trimestre de 2024, Professor, Tema, Os Grandes Temas Do Fim, Comentarista, Pr. Joá Caitano, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
proposta curricular para educação de jovens e adultos- Língua portuguesa- anos finais do ensino fundamental (6º ao 9º ano). Planejamento de unidades letivas para professores da EJA da disciplina língua portuguesa- pode ser trabalhado nos dois segmentos - proposta para trabalhar com alunos da EJA com a disciplina língua portuguesa.Sugestão de proposta curricular da disciplina português para turmas de educação de jovens e adultos - ensino fundamental. A proposta curricular da EJa lingua portuguesa traz sugestões para professores dos anos finais (6º ao 9º ano), sabendo que essa modalidade deve ser trabalhada com metodologias diversificadas para que o aluno não desista de estudar.
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
2. Recursividade
Muitos algoritmos têm a seguinte propriedade:
cada instância do problema contém uma instância
menor do mesmo problema. Dizemos que esses
problemas têm estrutura recursiva, porque é
possível resolver o problema chamando à si mesmo
com uma instância menor do problema.
4. Funções que chamam outras funções
Esse conceito tem que ficar bem claro: Uma função
pode chamar uma outra ou mais funções. Vamos ver
um exemplo.
5. Calcular a mesada
Suponha que queremos um programa para calcular a mesada de nossos filhos, baseado
em suas idades e notas. Seja então a seguinte função calcMesada. Não se preocupem
com a main, ela logo aparecerá. Não precisamos criar a main primeiro sempre, mas ela
terá que ser criada em algum momento!
O que esta função faz é receber um
parâmetro que será a idade do nosso
filho e retorna um valor maior da
mesada para filhos maiores de idade.
6. Calcular a mesada
Digamos agora que, a mesada de nossos filhos menores de idade, tem que ser recompensada (ou não!)
por suas notas. Então criamos a seguinte função que dá um bônus ou um desconto (bd) para nosso filho
menor de idade.
Essa função recebe três
parâmetros: a idade, a nota e o
valor da mesada já calculada
pela função anterior. Por isso é
muito importante chamar as
funções na ordem em que
queremos os resultados. Se não
calcularmos a mesada antes com
a outra função, como vamos
passa-la como parâmetro aqui!?Se a idade do nosso filho for menor que 18, vamos variar a mesada de
acordo com a nota dele, senão, vamos somente retornar o mesmo valor
da mesada que passamos para a função.
7. Calcular a mesada
Na main, vamos receber o
valor da idade e a nota
através da função scanf
(permite que o usuário
digite valores e armazena
nas variáveis passada como
parâmetro).
Após isso, chamamos a
função calcMesada para
calcular a mesada e
atribuímos este valor a
variável mesada.
Agora vamos chamar a
nossa segunda função e
passando como parâmetro
a própria mesada obtida
anteriormente.
8. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
9. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 1: variável mesada é criada
sem valor algum por enquanto.
mesada
&43jjuiop
10. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 2: variável idade é criada sem
valor algum por enquanto.
mesada
&43jjuiop
idade
&4399uiop
11. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 3: variável nota é criada sem
valor algum por enquanto.
mesada
&43jjuiop
idade
&4399uiop
nota
&43666iop
12. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 4: mensagem exibida na tela:
Entre com a idade do seu filho:
13. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 5: o usuário digita um valor para idade
e esse valor vai para a variável idade.
Entre com a idade do seu filho: 10
10
idade
&4399uiop
14. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 6: mensagem é exibida na tela
Entre com a idade do seu filho: 10
Entre com a nota geral do seu filho:
15. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Passo 7: o usuário entra com o valor da nota
e esse valor vai direto para a variável nota.
Entre com a idade do seu filho: 10
Entre com a nota geral do seu filho: 1
1
nota
&43666iop
16. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
8
?
?
?
Vamos para a função!
A seta está para cima porque
uma função que é chamada por
outra função sempre deve ser
declarada acima da função que à
está chamando. Do contrário, a
função não conseguirá chama-
la!
10
Estamos passando o valor
da idade e não uma
referência. Por isso nossa
caixinha só tem um valor
e nada de referências para
a variável idade.
(Recebemos este valor
anteriormente!)
17. Vamos executar este programa
int calcMesada(int idade){
if(idade < 18)
return idade*20;
else {
return idade*50;
}
}
Passo 9: Uma nova caixinha (varíavel)
chamada idade é criada e o valor que
“jogamos” (passamos como parâmetro na
chamada da função) para a função é
colocado lá dentro.
10
9
10
11
12
13
14
10
idade
&9999uiop
Muito importante entender aqui
que essa caixinha tem o mesmo
nome que a caixinha da idade que
está na main. Mas como pode ser
visto os endereços são diferentes.
ELAS NÃO SÃO A MESMA VARIÁVEL,
SOMENTE TEM O MESMO NOME.
Já sabemos que não podemos ter
duas variáveis com o mesmo nome,
mas esta regra é válida para
mesmas funções. Funções
diferentes podem ter variáveis com
mesmo nome, que é o nosso caso!
Lembre-se, uma função não consegue ver
nada que está dentro de outra função. O
escopo de uma função é digamos
“secreto” para todas as outras!
18. Vamos executar este programa
int calcMesada(int idade){
if(idade < 18)
return idade*20;
else {
return idade*50;
}
}
Passo 10: Verificamos se a idade é menor
que 18. Para este nosso caso ela é, então o
passo 11 será executado!
9
10
11
12
13
14
10
idade
&9999uiop
Lembre-se, uma função não consegue ver
nada que está dentro de outra função. O
escopo de uma função é digamos
“secreto” para todas as outras!
19. Vamos executar este programa
int calcMesada(int idade){
if(idade < 18)
return idade*20;
else {
return idade*50;
}
}
Passo 11: Encontramos a palavra return.
Portanto neste momento vamos retornar o
valor da multiplicação de idade por 20 para o
local onde esta função foi chamada. Neste
caso é a na main.9
10
11
12
13
10
idade
&9999uiop
Importante: os passos 12, 13 nunca serão
executados, pois uma vez que em uma
função, é encontrado a palavra de retorno, ela
imediatamente interrompe sua execução e
retorna o valor passado para o return.
200
Só podemos retornar valores que já temos. Por
isso, o retorno para a main só vai acontecer
quando o computador processar a operação
idade*20 e substituir o valor desta multiplicação
na expressão. Se o computador demorasse 10
anos para computar esta multiplicação, então
demoraríamos 10 anos para voltar para a main!
20. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
812
?
?
Passo 12: a caixinha de
mesada recebe o valor de
retorno da função.
13
200
mesada
&43jjuiop
200
21. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
812
?
?
Passo 13: vamos novamente para outra
função. Chamamos bdMesada enviando os
valores dos nossos três parâmetros!
(Passagem por valor!)
13
200
mesada
&43jjuiop
10
idade
&4399uiop
1
nota
&43666iop
10
1
200
22. Vamos executar este programa
int bdMesada(int idade, int notas, int mesada){
if(idade < 18)
return mesada*notas;
return mesada;
}
Passo 14: São criadas novas caixinhas para os
nossos parâmetros que vão receber os
valores enviados na chamada da função, na
mesma ordem enviada.
14
15
16
17
Lembre-se, uma função não consegue ver
nada que está dentro de outra função. O
escopo de uma função é digamos
“secreto” para todas as outras!
200
mesada
&99yjuiop
10
idade
&4oouiop
1
nota
&4wertiop
MESMOS NOMES, MAS
ENDEREÇOS DIFERENTES!
10 1 200
23. Vamos executar este programa
int bdMesada(int idade, int notas, int mesada){
if(idade < 18)
return mesada*notas;
return mesada;
}
Passo 15: Vamos ver se a idade é menor que
18. Para o nosso caso é, então vamos
executar o passo 16.
14
15
16
17
Lembre-se, uma função não consegue ver
nada que está dentro de outra função. O
escopo de uma função é digamos
“secreto” para todas as outras!
200
mesada
&99yjuiop
10
idade
&4oouiop
1
nota
&4wertiop
MESMOS NOMES, MAS
ENDEREÇOS DIFERENTES!
24. Vamos executar este programa
int bdMesada(int idade, int notas, int mesada){
if(idade < 18)
return mesada*notas;
return mesada;
}
Passo 16: Encontramos a palavra return e
então vamos retornar para o local que esta
função foi chamada, retornando o valor de
mesada*notas que para nosso caso é 200*1
= 200. O passo 17 então não será executado,
pois interrompemos a execução no
momento do retorno.
14
15
16
17
Lembre-se, uma função não consegue ver
nada que está dentro de outra função. O
escopo de uma função é digamos
“secreto” para todas as outras!
200
mesada
&99yjuiop
10
idade
&4oouiop
1
nota
&4wertiop
200
Novamente, retornamos
valores e nunca expressões!
Para que a função retorne para
onde foi chamada, o
computador primeiro tem que
fazer a multiplicação e devolver
um valor para o retorno!
25. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
812
15
16
Passo 14: a caixinha da mesada, vai receber
o valor de retorno da função. Como já
tínhamos um valor lá, ele será substituído
pelo novo. Coincidentemente, este valor é o
mesmo, porque nossa multiplicação na
função foi por 1. De qualquer maneira o
valor será substituído, mesmo que seja pelo
mesmo valor!
13
10
idade
&4399ui
1
nota
&43666iop
14
200
200
mesada
&43jjuiop
200
26. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
812
15
16
Passo 15: É exibida uma mensagem na tela com o valor
da variável mesada, que é a saída final do nosso
programa e o objetivo que queríamos atingir.
1314
200
Entre com a idade do seu filho: 10
Entre com a nota geral do seu filho: 1
O valor da mesada para seu filho e: 200.
27. Vamos executar este programa
int main(){
int mesada;
int idade;
int nota;
printf("Entre com a idade do seu filho:");
scanf("%d", &idade);
printf("Entre com a nota geral do seu filho:");
scanf("%d", ¬a);
mesada = calcMesada(idade);
mesada = bdMesada(idade,nota,mesada);
printf("nnO valor da mesada para seu filho e: %d", mesada);
return 0;
}
1
2
3
4
5
6
7
812
15
16
Passo 16: Programa termina. É exibida na tela uma
mensagem padrão da linguagem.
1314
200 Entre com a idade do seu filho: 10
Entre com a nota geral do seu filho: 1
O valor da mesada para seu filho e: 200.
Program returned with execution of
0.2222s
28. Recursividade
Como já vimos que uma função pode chamar uma
ou mais funções, então não há porque duvidar que
uma função pode chamar à ela mesma! Vamos ver
como funciona então uma função recursiva.
29. Vamos ver um exemplo
int main(){
exemplo(‘c’);
return 0;
}
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
Digamos que temos a função exemplo e chamamos ela na main passando o caracter ‘c’. Vamos ver como
será a execução.
1
2
3
4
5 ?
30. Vamos ver um exemplo
int main(){
exemplo(‘c’);
return 0;
}
1
2
?
Passo 1: o programa se inicia.
31. Vamos ver um exemplo
int main(){
exemplo(‘c’);
return 0;
}
1
2
?
Passo 2: vamos para a função e estamos
passando o caracter ‘c’ utilizando passagem
por valor. Dessa vez nem mesmo temos
variáveis na main. Só estamos querendo
chamar a função para ver o qual é seu
comportamento recursivo.
c
32. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 3: Uma variável (caixinha) do tipo
char é criada e o valor passado na
chamada da função é atribuído à ela.
c
c
a
&3399uiop
33. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 4: Imprimimos o caracter que está
na variável a na tela.
c
a
&3399uiop
c
34. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 5: O passo cinco é chamado passo
recursivo, que é quando chamamos a
mesma função dentro dela. Veja, estamos
passando a variável a por valor. Logo,
vamos jogar novamente a letra c para a
função.
c
a
&3399uiop
c
Muito importante lembrar que,
quando uma função termina o seu
escopo, tudo que está dentro dela
é destruído. Portanto a caixinha a
será destruída e recriada,
possivelmente em um novo
endereço.
35. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 3: Uma nova caixinha (variável) de
nome a será criada e armazenará o valor
que passamos na chamada da função.
c
a
&3633uiop
c
Provavelmente esta nova
caixinha terá um novo
endereço. A memória é
bastante aleatória.
36. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 4: Imprimimos novamente a letra c
na tela.
cc
37. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 5: Chamamos novamente a nossa
função. Outro passo recursivo. E tudo
recomeça outra vez.
c
a
&3633uiop
c
38. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 3: Uma nova caixinha (variável) de
nome a será criada e armazenará o valor
que passamos na chamada da função.
c
a
&456guiop
c
Provavelmente esta nova
caixinha terá um novo
endereço. A memória é
bastante aleatória.
39. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 4: Imprimimos novamente a letra c
na tela.
ccc
40. Vamos ver um exemplo
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
3
4
5
Passo 5: Chamamos novamente a nossa
função. Outro passo recursivo. E tudo
recomeça outra vez.
c
a
&3633uiop
c
41. Recursividade
CHEGAAAAAA! UFF! Como fazer a recursão parar?
Pois é, esta é outra característica de uma função
recursiva. Ela precisa sempre ter um Caso Base, que
vai determinar quando ela vai parar de se chamar.
42. Caso base
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
Para esta função, nem conseguiríamos criar um
caso base sem que tivéssemos mais um
parâmetro, que frequentemente é o contador dos
passos recursivos. Esse contador sempre é
diminuído por um fator qualquer (depende do
nosso problema) até que ele encontre um caso
base.
Esta característica torna a recursão, uma
resolução de problemas por instâncias menores
do mesmo problema.
A cada passo recursivo, o nosso problema
diminui, até que cheguemos no caso base, que
será a menor instância do nosso problema.
43. Caso base
void exemplo(char a){
printf(“%c”, a);
exemplo(a);
}
É muito importante
modelar a função recursiva
de maneira correta, pois
senão, como vimos, nosso
programa pode entrar em
loop e nunca parar!
44. Funções recursivas
Vamos ver um exemplo prático agora. Seja o fatorial matemático
definido por n!:
1! = 1
2! = 2*1 = 2*1!
3! = 3*2*1 = 3*2!
4! = 4*3*2*1 = 4*3!
5! = 5*4*3*2*1 = 5*4!
.....................................
n! = n*(n-1)*(n-2)*...*(1) = n*(n-1)!
Para criar uma função recursiva que
resolva este problema, precisamos
encontrar dois elementos essenciais
para a recursão:
1) Caso base
2) Passo recursivo
45. Funções recursivas
Vamos ver um exemplo prático agora. Seja o fatorial matemático
definido por n!:
1! = 1
2! = 2*1 = 2*1!
3! = 3*2*1 = 3*2!
4! = 4*3*2*1 = 4*3!
5! = 5*4*3*2*1 = 5*4!
.....................................
n! = n*(n-1)*(n-2)*...*(1) = n*(n-1)!
O caso base é muito simples, e
logicamente que é 1. Se olharmos para
todas as linhas, elas sempre terminam
no 1 e por isso ele é o nosso caso base.
Pense no caso base, como o elemento
que sempre vai ser atingindo em algum
momento e ele deve ser, pois do
contrário como vamos parar a recursão?
46. Funções recursivas
Vamos ver um exemplo prático agora. Seja o fatorial matemático
definido por n!:
1! = 1
2! = 2*1 = 2*1!
3! = 3*2*1 = 3*2!
4! = 4*3*2*1 = 4*3!
5! = 5*4*3*2*1 = 5*4!
.....................................
n! = n*(n-1)*(n-2)*...*(1) = n*(n-1)!
O passo recursivo é aquele em que
diminuímos a instância do nosso
problema por algum fator. Para o nosso
caso ele é dado pela nossa fórmula geral:
n*(n-1)!
Vamos entender o por que.
47. Funções recursivas
Vamos ver um exemplo prático agora. Seja o fatorial matemático
definido por n!:
1! = 1
2! = 2*1 = 2*1!
3! = 3*2*1 = 3*2!
4! = 4*3*2*1 = 4*3!
5! = 5*4*3*2*1 = 5*4!
.....................................
n! = n*(n-1)*(n-2)*...*(1) = n*(n-1)!
n*(n-1)! nos diz o seguinte:
Multiplique a instância do meu problema de
valor n por uma nova instância de valor n-1.
Para encontrarmos o valor da instância n-1
vamos ter que realizar novamente o fatorial.
Percebe que utilizamos o fatorial novamente
para calcular (n-1)!. Com certeza este é o nosso
passo recursivo, pois a cada chamada, vamos
diminuir a instância do nosso problema por um
fator de 1.
48. Funções recursivas
Nossa função então ficaria da seguinte maneira:
int fatorial(int n){
}
A função tem que
retornar um inteiro, pois é
o valor do fatorial que
queremos encontrar!
49. Funções recursivas
Nossa função então ficaria da seguinte maneira:
int fatorial(int n){
if( n == 1 )
return 1;
}
Sempre numa função recursiva,
a primeira coisa a fazer é
colocar o caso base. Sabemos
que o fatorial de 1 é 1 e então
este será o nosso valor de
retorno.
50. Funções recursivas
Nossa função então ficaria da seguinte maneira:
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
Agora então definimos nosso
passo recursivo, dado pela
fórmula geral. O passo recursivo
é exatamente a nossa fórmula
geral, porém escrito na
linguagem de programação e
não numa fórmula matemática.
E nossa função recursiva está
pronta! Vamos testá-la.
51. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
3
1
2
3
4
Passo 1: uma caixinha para n é
criada e o valor 3 colocado lá
dentro.
3
n
&3633uiop
52. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
1
2
3
4
Passo 2: verificamos se atingimos
nosso caso base. Como n não é
igual a 1, ainda não o atingimos.
Pulamos então para o passo 4.
3
n
&3633uiop
53. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
1
2
3
4
Passo 4: Passo recursivo. Vamos
chamar nossa função novamente
passando um novo valor de n.
3
n
&3633uiop
2
54. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
5
6
7
8
Passo 5: Uma nova caixinha para n
é criada e o valor de chamada é
atribuído à ela.
2
n
&2223uiop
2
55. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
5
6
7
8
Passo 6: Verificamos novamente o
nosso caso base. Ainda não o
atingimos, e então o passo 7 será
pulado.
2
n
&2223uiop
56. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
5
6
7
8
Passo 8: Uma nova chamada
recursiva é realizada com uma
instância ainda menor do
problema.
2
n
&2223uiop
1
57. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
9
10
11
12
Passo 9: Novamente uma nova
caixinha para n é criada, e o valor
passado na chamada é atribuído
para ela.
1
n
&9923uiop
1
58. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
9
10
11
12
Passo 10: Verificamos o nosso caso
base e percebemos que acabamos
de atingí-lo! Então o passo 12 não
será executado.
1
n
&9923uiop
1
59. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
9
10
11
12
Passo 11: Mas e agora,
encontramos a palavra
return, para onde temos
que retornar? Para a
main?
1
n
&9923uiop
60. Recursividade
Entender para onde voltar quando atingimos o caso
base é essencial para conseguirmos entender o que
é recursividade. Vamos ver uma mapa desta
execução.
63. Recursividade
Na terceira chamada:
1) return 3 * fatorial(3-1)
2) return 2 * fatorial(2-1)
3) return 1
A terceira chamada foi onde encontramos o nosso
caso base. Dessa maneira, o valor de retorno da
chamada em que o caso base é encontrado deve ser
retornado para exatamente a última chamada
efetuada antes do caso base.
Perceba que todas as chamadas são também
retornos e mais uma vez, um retorno só pode conter
valores já definidos. O que acontece nas chamadas 2
e 3, é que elas estão esperando valores de retorno
para poderem realizar a multiplicação. Já na chamada
3 não, 1 já é um valor definido e não tem que realizar
nenhuma operação.
65. Recursividade
Logo:
1) return 3 * fatorial(3-1)
2) return 2 *
3) return 1
1
Agora a chamada 2 pode realizar a
multiplicação e retornar seu valor
para a chamada 1.
67. Recursividade
Logo:
1) return 3 *
2) return 2
3) return 1
2
Por fim, a chamada 3 pode realizar
também a multiplicação e retornar
para onde foi chamada. Como vimos
no começo, assumimos que chamamos
a função fatorial na main e então é pra
lá que o retorno da primeira chamada
irá voltar, devolvendo enfim o valor do
fatorial de 3 que é 6!
69. Finalizando a execução
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
9
10
11
12
1
70. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
5
6
7
8
2
71. Funções recursivas
Vamos assumir que chamamos esta função na main e passamos o valor 3 na chamada.
int fatorial(int n){
if( n == 1 )
return 1;
return n * fatorial(n-1);
}
1
2
3
4
2
6
Voltando pra main com 6!
72. Funções recursivas
Escreva uma função recursiva que retorne o valor de um número elevado por n.
Exemplo:
exp(4,2) -> significa que queremos elevar 4 ao quadrado.
Quem fizer este exercício e me explicar na sala, poderá errar um exercício no
mini-teste.