Departamento de Ciência da Computação - IME - USP

MAC0110 Introdução à Computação

"Your life as it has been is over.
We will add your biological and technological distinctiveness to our own.
For this time forward you will serve us.
You will be assimilated.
Resistence is futile."

Fonte: Discurso de recepção aos calouros
ou "The Borg -- Star Trek, The Next Generation".

Bem-vindas e bem-vindos à MAC0110 Introdução à Computação. A disciplina MAC0110 é de responsabilidade do Departamento de Ciência da Computação (DCC) do Instituto de Matemática e Estatística (IME) da Universidade de São Paulo (USP) e é oferecida no primeiro semestre de cada ano a centenas de alunas e alunos ingressantes em vários cursos da USP. Esta edição de MAC0110 é de responsabilidade de

Shuri T'Challa Diana Hitoshi Coelho
Candy Felipe Noronha João Gabriel Hitoshi Coelho

A seguir está uma descrição de alguns dos ingredientes principais de MAC0110.

Objetivos

O objetivo principal de MAC0110 é desenvolver um raciocínio aplicado na formulação e resolução de problemas computacionais, ensinar como abordar e resolver problemas computacionais.

Em MAC0110 você aprenderá a escrever programas de computador. O ato de programar é uma ferramenta útil para trabalhar o raciocínio mencionado acima, bem como tornar mais concretos outros conceitos comuns em ciência da computação.

Ao longo dos anos, MAC0110 utilizou diversas linguagens de programação: Fortran, Pascal, C e Python. Nesse semestre vamos utilizar a linguagem Python. O ensino de uma linguagem de programação é uma ferramenta didática, e um bônus concreto de aprendizagem, subordinado ao objetivo principal.

Em geral, uma vez adquirida familiaridade com uma linguagem de programação, não é difícil utilizar outra. Muitas vezes, basta apenas ler o manual. Desta forma, gostaríamos que no futuro você não se lembrasse de MAC0110 como um "Curso de Python" triste. Em MAC0110, de fato, você aprenderá um pouco da linguagem (Python) e será cobrado pela aplicação apropriada dos conceitos vistos nas aulas (assim como seus colegas de anos anteriores aprenderam um pouco de Fortran, Pascal, C ou Python). No entanto, o verdadeiro aprendizado será a familiaridade com os conceitos e princípios envolvidos na resolução de problemas computacionais.

Ferramentas tais como funções nativas e módulos existentes no Python evitam que reinventemos soluções disponíveis e façamos tarefas presumidamente desnecessárias. O domínio dessas ferramentas é fundamental para um programador efetivo. Apesar disso, esta disciplina utiliza um subconjunto bem limitado dos recursos de Python. Não por essas ferramentas não serem importantes, mas simplesmente porque elas não são o foco dessa disciplina, cujo objetivo, novamente, é desenvolver um raciocínio aplicado na formulação e resolução de problemas computacionais.

A estratégia que usaremos para desenvolver esse raciocínio será através da resolução de problemas. Cada problema introduz novos desafios que, para serem transpostos, nos levam a novas ideias, conceitos e práticas de programação. Esses problemas devem ser resolvidos utilizando-se apenas os recursos elementares que são apresentados.

Dessa forma, ao final de MAC0110, você terá aprendido a resolver problemas computacionais utilizando recursos simples, disponíveis na maioria das linguagens de programação, como Python, C, C++, Java, etc. Com essa bagagem formada por sólidos conceitos de programação, aprender outras linguagens será uma tarefa mais simples e você terá mais ferramentas para explorar soluções antes de implementá-las em alguma linguagem.

Mas por que em Python? Por ser uma linguagem interpretada, Python possui um console interativo, o chamado Python Shell. Esse ambiente é extremamente conveniente e útil para o aprendizado de programação. Nele é possível executar trechos pequenos de código para testarmos ideias e sanarmos dúvidas sobre o comportamento de algum comando ou de alguma ideai. Python tem uma sintaxe simples e força a escrita de programas edentados de forma a facilitar a visualização da estrutura da solução, identificação de problemas e sua depuração. Como outras linguagens, Python é ser portável e fácil de instalar.

Pré-requisitos

MAC0110 não possui pré-requisito algum. Não é esperado que você tenha qualquer experiência prévia em programação.

Principais tópicos

No que diz respeito à programação em Python, veremos, entre outros possíveis tópicos:

  • funções de entrada e saída: input() e print();
  • tipos nativos de variáveis: int, float, str, e bool;
  • funções de conversão de tipos: int() e float();
  • operadores aritméticos: +, -, *, /, //, %,...;
  • operadores relacionais: <, >, <=, >=, == e !=;
  • operadores lógicos ou booleanos: and, or e not;
  • expressões aritméticas, relacionais e lógicas;
  • execução condicional, alternativa e em cadeia: if, if-else, if-elif-else;
  • comando de repetição: while;
  • indicadores de passagem (flags);
  • funções;
  • listas;
  • strings; e
  • noções de algoritmos, para aqueles que quiserem se aprofundar em seus estudos.

A bibliografia básica desta disciplina são as notas de aula, além do livro Como Pensar como um Cientista da Computação - Aprendendo com Python: Edição interativa que é uma tradução do livro How to Think Like a Computer Scientist - Learning with Python: Interactive Edition.

Python no seu computador

Utilizaremos Python 3. Em MAC0110 evitamos o uso de linguagens e sistemas proprietários. Preferimos os sistemas abertos e livres (Free and open source software).

Baixe e instale a distribuição Python 3 da Anaconda. Anaconda é uma plataforma agnóstica, ou seja, pode ser usada no Windows, macOS ou Linux.

Usaremos o Spyder, que vem com a Anaconda, como Ambiente Integrado de Desenvolvimento (IDE = Integrated Development Environment). Spyder (Scientific PYthon Development EnviRonment) é um ambiente interativo de desenvolvimento muito poderoso para a linguagem Python. Spyder proporciona editoração avançada, testes interativos, depuração e um ambiente de computação numérica graças ao suporte de IPython (interactive Python interpreter) e bibliotecas populares de Python como NumPy (álgebra linear), SciPy (processamento de sinais e imagens) or matplotlib (desenhador 2D/3D interativo).

Você pode seguir essas instruções para instalar Python 3 em seu computador.

Nota: as instruções mais atualizadas para instalação da Anaconda podem ser encontradas no sítio oficial da Anaconda.

Plantão de dúvidas

Para auxiliá-lo, MAC0110 conta com o trabalho fundamental de monitores e monitoras. Monitores, monitoras e os profs darão plantão de dúvidas em locais e horários divulgados na página de MAC0110 em Horários dos plantões de dúvidas

Avaliação

"Programadores iniciantes tendem a colocar a culpa dos erros no
compilador, na biblioteca, no mau tempo,
Programadores experientes gostariam de ser iniciantes para ter
a quem culpar, além deles mesmos "

The Practice of Programming
Brian Wilson Kernighan e Robert C. Pike

"Testes mostram a presença de erros,
mas não a ausência."

Edsger W. Dijkstra

A nota final em MAC0110 é devida a vários componentes.

Exercícios-programa

Em MAC0110, os projetos que envolvem programação recebem o nome de exercícios-programa (EPs). Esta edição de MAC0110 terá vários EPs. A data de entrega e o enunciado de cada EP será divulgado ao longo do semestre na seção "Exercícios-programa". O enunciado de cada EP deverá ser rigorosamente observado.

A entrega dos EPs é feita eletronicamente. O depósito (upload) dos seus EPs será feito através da página de MAC0110, conforme descrito em Como submeter um EP para correção. Não são aceitos EPs fora do prazo de entrega. A correção dos EPs e suas notas também serão disponibilizadas na página de MAC0110.

Nesse semestre, a avaliação de parte dos primeiros EPs poderá ser feita automaticamente. A nota desses EPs fica disponível imediatamente após a entrega e, em geral, o sistema fornece também algumas dicas e mensagens de erro para que você possa corrigir o seu EP e ressubmetê-lo. O sistema permite que os EPs sejam ressubmetidos desde que dentro do prazo. Não há limite no número de submissões dentro do prazo. No entanto, com o passar do semestre, o número de submissões pode ser considerado para efeito de avaliação. A nota atribuída a cada EP para fins de avaliação é a nota da última submissão.

Provinhas

Teremos várias provinhas ao longo do semestre durante o horário das aulas. Cada provinha consumirá cerca de 10 minutos da aula e valerá um certo número de pontos. A média Mp dessas provinhas será a aritmética.

Provas

Teremos 3 provas. A média MP das provas será

    MP = max((P1 + P2 + P3)/3, (PSub + P2 + P3)/3, (P1 + PSub + P3)/3, (P1 + P2 + PSub)/3)

onde, P1, P2 e P3 são as notas das três provas e PSub = Mp.

Nota final

A nota final; NF, será calculada pela regra
se min(MP, MEP) >= 5, então

    NF = 0.5*MP +  0.5*MEP, 

senão

    NF = min(MP, MEP). 

Aqueles e aquelas com NF >=5 estarão aprovados.

Recuperação

Aqueles e aquelas que obtiverem nota final NF maior ou igual a 3 e menor que 5 terão direito a fazer a recuperação. A recuperação consistirá de uma prova. Se Prec é a nota na prova de recuperação então a nota da recuperação NR, será calculada pela regra

    NR = (Prec + NF)/2, 

A condição para aprovação é NR >=5.

Experienced Programmer

Experienced Programmer

Fonte: https://br.pinterest.com/pin/486599934709469290/

Conduta ética

As provas e os EPs de MAC0110 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, enganando o sistema e seus colegas. 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 aos órgãos responsáveis.

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 o seu programa! Você pode achar que a amizade é mais importante do que as considerações éticas acima, mas mostrar o seu programa pode prejudicar o aprendizado do seu colega:

  • depois de o seu colega ter visto o seu programa, será muito mais difícil para ele imaginar uma solução original;
  • o 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; é impressionante como são diferentes as provas escritas por alunos que fizeram EPs e pelos que não fizeram, e as notas baixas desses últimos são inevitáveis.

Além disso, o seu colega pode eventualmente divulgar a sua solução para outros colegas, colocando-o numa situação muito 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 no parágrafo anterior.

Matrícula

Verifique seu status no sistema Júpiter depois do período de retificação de matrículas. Seu status deve ser "MATRICULADO". Se for "PENDENTE" ou "INSCRITO", procure imediatamente o Serviço de Alunos de Graduação.

Última atualização: sexta-feira, 1 mar. 2019, 12:42