Programação
-
O texto a seguir é uma cópia da usada pelo Prof. Yoshiharu Kohayakawa.
Política de colaboração: https://www.ime.usp.br/~yoshi/2021ii/ccm0118/html/colaboracao.html
As provas, listas de exercícios e EPs de MAC2166 devem ser feitos individualmente. Você tem responsabilidade sobre cópias feitas de questões de suas provas e de trechos de seus EPs. Quando autores e copiadores combinam, estão ludibriando o sistema de avaliação. Provas e EPs considerados plagiados, tanto o original como a cópia, receberão nota zero e os nomes dos alunos envolvidos serão encaminhados à coordenação.
O trabalho em grupo e a cooperação entre colegas é em geral benéfico e útil ao aprendizado. Para ajudar um colega você pode lhe explicar como resolveu um ou outro problema. Por exemplo, pode explicar que para fazer um determinado trecho de programa é possível usar dois "loops" ou que para representar os dados basta usar algumas variáveis etc… O que você não deve fazer é mostrar seu programa! Você pode achar que a amizade é mais importante do que as considerações éticas acima, mas mostrar seu programa pode prejudicar o aprendizado do seu colega:
- depois de seu colega ter visto seu programa, será muito mais difícil para ele imaginar uma solução original;
- seu colega não entenderá realmente o problema: a compreensão passa pela feitura dos programas e não pela imitação/cópia;
- vocês passarão por outras avaliações, na forma de provas; as provas escritas por alunos que fizeram os EPs e pelos que não fizeram são marcadamente diferentes, e as notas baixas desses últimos são inevitáveis.
- Além disso, seu colega pode eventualmente divulgar sua solução para outros colegas, colocando-o em uma situação complicada. Esses problemas ocorrem em muitos lugares, e as políticas e recomendações não variam muito. Algumas recomendações da Universidade de Lisboa valem também aqui e foram reproduzidas acima.
-
Ao longo curso teremos sete Exercícios Programas (EPs). Os enunciados serão divulgados a cada duas semanas. O prazo de conclusão de cada EP é de duas semanas.
A nota final é dada pela média ponderada dos EPs da seguinte forma:
nota_semestre = (1xEP1 + 1xEP2 + 1xEP3 + 2xEP4 + 2xEP5 + 3xEP6 + 4xEP7)/14
se nota_semestre >= 5.0
então nota_final := nota_semestre
senão
se ((2xEP_REC + nota_semestre) / 3) >= 5.0
nota_final := 5.0
senão
nota_final := nota_semestre
A presença na disciplina será proporcional ao número de EPs entregues. Ou seja, para ter uma presença mínima de 70%, você deve entregar pelo menos cinco EPs.
-
Nessa semana iniciamos as atividades de programação, para isso é necessário que estudem o texto sobre estrutura de código (em C [1] ou em Python [2]). Também é necessário entender o funcionamento de variáveis, para isso estudem esse texto para C [5] ou esse texto para Python [6] (ambos tem 5 seções, estude tudo e se tiver tempo, também os trechos para "saber mais").
Estudem entradas/saídas e expressões aritméticas inteiras usando o seguinte material disponível em "Material de apoio didático":- Introdução às variáveis e como fazer entradas de dados em Python 3 (grupo Python) [3]
- Introdução às variáveis e expressões aritméticas" (grupo C) [4]
O enunciado do EP1 está no ar!
-
Material de estudo para essa semana:
- um pouco mais sobre o conceito de variáveis inteira e sua representação [1].
- para uma introdução aos comandos de seleção para C [2]ou comandos de seleção para Python [3].
Estudar os textos seguintes, na ordem sugerida:
- Apostila Introdução à Resolução de Problemas via Algoritmos (versão de 2020/04/17) [4] - estude esse com afinco;
- Introdução elementar à Lógica [5] (esse texto é complementar, com o básico de lógica necessário para construção de condições);
- Introdução aos laços de repetição do tipo "enquanto" (while); [6]
- Introdução às técnicas básicas de depuração de código (depuração em C) [7] ou (depuração em Python) [8] - faça uma primeira leitura do texto e quando aparecer o primeiro erro em seu EP1, retorne às explicações desse texto. -
Nesta semana:
- Rever o texto Introdução aos números inteiros [1];
- Introdução aos (números representados como) flutuantes [2];
- Rever Introdução elementar à Lógica [3];
- Rever (se C) Introdução ao comando de seleção e às expressões lógicas (para C) [4];
- Rever (se Python) Introdução ao comando de seleção e às expressões lógicas (para Python) [5];
- Lembre-se sempre do texto com dicas para ajudar na depuração de códigos em C ou depuração de códigos em Python [6].
O enunciado do EP2 está no ar!
-
Aproveite para terminar o EP2 e revisar os assuntos tratados até aqui.
-
Nesta semana devemos sistematizar a técnica de indicador de passagem. Também formalizamos o conceito de números do tipo flutuante (float) e o comando de repetição do tipo "for".
Para assimilar os conceitos citados vocês devem estudar os seguintes textos:- Rever o texto Introdução aos números inteiros [1];
- Estudar o texto Introdução aos laços de repetição do tipo "repita N vezes" (for) [2];
- Introdução aos (números representados como) flutuantes [3];
- Estudar com atenção ao texto sobre indicador de passagem [4];
- Se sentir necessidade, estude o texto sobre combinações (permutações) [5]
O enunciado do EP3 está no ar!
-
Nesta semana apresentaremos uma introducão ao conceito de funções: para que serve uma função, como definir uma função e como usá-la.
Estudar os textos abaixo, na sequência indicada:- Introdução ao uso de funções [1];
- Se Python: Introdução ao uso de funções em Python: variáveis locais, globais e aninhamento de funções [2]
Se C: Introdução ao uso de funções em C: variáveis locais, globais e aninhamento de funções [3]; - Se Python: Introdução ao uso de funções em Python: organização do código [4]
Se C: Introdução ao uso de funções em C: [5] organização do código; - Por que evitar entrada/saida de dados em funções? [6].
-
Nesta semana, estude os seguintes itens:
- Introdução ao conceito de eficiência de algoritmos (algoritmo é rápido, lento ou inviável? o resultado faz sentido?) [1];
- Introdução à conversão inteiro/float e divisões (incluindo resto da divisão inteira) [2];
-
Estudar os seguintes tópicos:
- Introdução aos vetores em C e em Python [1];
- Introdução aos vetores (especificidades da linguagem C) [2];
- Introdução aos vetores (especificidades do Python) [3] ;
- Rever: Introdução aos laços de repetição do tipo "repita N vezes" (for) [4];
- Rever: Introdução ao conceito de indicador de passagem (e.g. sequência de pares? de negativos?) [5].
-
Nesta semana iniciamos estudos sobre leitura e gravação de arquivos.
Para fazer os exercícios dessa semana reveja os textos sobre caracteres, estude como imprimir com formatação e depois examine em detalhe os exemplos com códigos para leitura de arquivos (itens 3 a 5).- Introdução aos caracteres [1] e
- Introdução à impressão em mesma linha e formatação de tabelas em C e em Python [2]
- Introdução à leitura/gravação de arquivos em C [7] e em Python; [3]
- Exemplo comentado de como ler ou escrever arquivos em C [4]
- Exemplo comentado de como ler ou escrever arquivos em Python [5]
- Sobre leitura e gravação de arquivos em C [6]
-
Nesta semana iniciamos o estudo de matrizes (vetor de vetores), desse modo, deve-se estudar o texto apresentando o conceitos de matrizes e eventualmente rever alguns sobre vetores:
- Introdução às matrizes: para linguagem C [1]; para linguagem Python [2];
- Exclusivamente para grupo Python [3], rever: cód. 3 na seção 5 de Introdução às variáveis e como fazer entradas de dados em Python 3 [4];
- Rever: Introdução aos vetores em C e em Python [5];
- Para grupo C: rever: Introdução aos vetores (especificidades da linguagem C) [6];
- Para grupo Python: rever: Introdução aos vetores (especificidades do Python) [7];
-
Nesta semana continuamos o estudo de matrizes (além de vetores e caracteres). Desse modo, sugiro que revise alguns dos textos de apoio, ao menos os seguintes:
- Rever Introdução às matrizes (C) [1] ou Introdução às matrizes (Python) [2];
- Rever indicador de passagem. [3];
- Rever introdução aos vetores [4], vetores em C [5], vetores em Python [6];
- Rever textos sobre caracteres (Introdução aos caracteres e Introdução aos caracteres (estendido) [7]).
O enunciado do EP6 está no ar! -
Nessa semana examinaremos o conceito de função recursiva (ou recorrente). A ideia de função recursiva é que a própria função seja utilizada do lado direito de sua definição, como no caso da função fatorial: f(n) = { 1, se n=0; n*f(n-1), se n>0}.Estudar os textos abaixo, principalmente os dois primeiros, e depois fazer os exercícios no VPL (empregando o conceito da recursividade):
- Estude o texto Introdução ao conceito de recursividade (recorrência) [1];
- Introdução ao conceito de recursividade/recorrência: exemplos ilustrativos [2];
- Introdução à recursividade: divisão e conquista; tentativa e erro; busca exaustiva [3].
-
Esta será nossa última semana com aulas efetivas em nosso curso! Nela apresentamos dois importantes tópicos: busca e a ordenação de dados em vetores. Para isso sugerimos o estudo do primeiro texto abaixo (e eventual revisão dos demais):
- Rever indicador de passagem[1];
- Rever introdução aos vetores [2], vetores em C [3], vetores em Python [4];
- Introdução à busca em vetores: grupo Python aqui [5]; grupo C este texto [6].
- Algoritmos de ordenação quadráticos ("bolha", seleção e inserção) [7];
-
Aproveitem esta semana para terminarem o EP7.