MAC 115 - Introdução à Computação - IAG

Primeiro Semestre de 2001

Prof. Francisco Reverbel

. Informações gerais
. Ementa da disciplina
. Linguagem de programação e compilador
. Exercícios-programa
        
. Bibliografia
. Lista de discussão da disciplina
. Assuntos tratados em aula
. Notas


As médias estão aqui. A última coluna indica quem ficou de recuperação em provas ("Rec(P)"), em EPs ("Rec(E)"), ou em ambos ("Rec(P,E)").
Se você não ficou de recuperação, boas férias!
Se você ficou de recuperação em EPs, leia esta mensagem.
As notas da recuperação estão aqui.

At work icon Esta página estará em permanente construção até o final do semestre...

Informações Gerais

. Local: IAG-USP, auditório 1
. Horário: terças e quintas, das 10:00 às 11:40
. Monitora: Luciane Fernandes Schiavon (luciane.schiavon@poli.usp.br)
. Plantão de monitoria: segundas e quartas, das 12:00 às 13:00, na sala pró-aluno do IAG
. Avaliação: duas provas e quatro exercícios-programa
     . Média de provas: MP = (2 * P1 + 3 * P2)/5
     . Prova substitutiva: Está prevista uma terceira prova P3, para alunos que comprovadamente não puderam comparecer à uma das duas provas, P1 ou P2. Quem fizer essa prova terá sua média de provas dada por
MP = max {(2 * P1 + 3 * P3)/5, (P2 + P3)/2}
     . Média de exercícios-programa: ME = (2 * EP1 + 2 * EP2 + 3 * EP3) / 7
     . Média final: se MP >=5 e ME >= 5
então MF = (2 * MP + ME)/3
senão MF = min {MP, ME}
     . Datas das provas: 24 de abril, 26 de junho e 03 de julho (substitutiva)
. Recuperação: Os alunos que ficarem com média final maior ou igual a 3 e menor que 5 terão direito de fazer recuperação desta disciplina.
     . Se sua média de provas MP foi menor que 5, então você deverá fazer a prova de recuperação no dia 18 de julho, às 10:00.
     . Se sua média de exercícios-programa ME foi menor que 5, então você deverá entregar o exercício-programa de recuperação até o dia 18 de julho, às 10:00.
     . Média de recuperação: se você só precisou fazer a prova, MR = nota da prova
se você só precisou fazer o exercício, MR = nota do exercício
se você precisou fazer ambos:
         se prova >= 5 e exercício >= 5
                 então MR = (2 * prova + exercício)/3
                 senão MR = min {prova, exercício}
     . Nota final: (MF + 2 MR)/3, onde MF é a média final do semestre e MR é a média da recuperação

Linguagem de Programação e Compilador

. Usaremos a linguagem de programação C e o compilador C lccwin32, que pode ser copiado e distribuído livremente. Os exercícios-programa deverão ser entregues em versão compatível com esse compilador.
. Compilador lccwin32: é para Windows 95/98/NT. O tamanho do arquivo de instalação, chamado lccwin32.exe, é de 2,9Mb, ou seja, cabe em 3 disquetes. Se você puder, instale-o em seu computador. O lccwin32 está disponível nesta página, que contém também respostas para os problemas mais comuns encontrados na sua instalação ou uso, e uma aula dirigida sobre a utilização desse compilador.

Exercícios-Programa

. Primeiro exercício-programa (formato ps, formato pdf). Prazo: 26 de abril de 2001. (Era 19 de abril, foi adiado por causa dos problemas com o lccwin32 na sala pró-aluno.)
. Segundo exercício-programa (formato ps, formato pdf). Prazo: 31 de maio de 2001.
. Terceiro exercício-programa (formato ps, formato pdf). Prazo: 3 de julho de 2001.

Bibliografia

. Material didático disponível na Internet, em http://www.ime.usp.br/~macmulti/, produzido pelo Departamento de Ciência da Computação do IME-USP.
. Caderno de Exercícios de Introdução à Ciência da Computação (Edição revisada: C), Departamento de Ciência da Computação do IME-USP.
Este caderno de exercícios pode ser adquirido na secretaria do Departamento de Ciência da Computação (sala 256 do bloco A do IME-USP). Além disso, o conteúdo do caderno está disponível na Internet, em http://www.ime.usp.br/~macmulti/exercicios/.
. B. W. Kernighan e D. M. Ritchie, C - A Linguagem de Programação, Campus.
. B. S. Gottfried, Programando em C, Makron.
. Eric S. Roberts, The Art and Science of C: An Introduction to Computer Science, Addison-Wesley, 1995.

Lista de discusão da disciplina

. Temos uma lista eletrônica para a discussão do andamento da disciplina. Todos os alunos são incentivados a participar dessa lista, enviando comentários que poderão ser lidos por todos os interessados.
. Para se inscrever na lista, mande uma mensagem vazia para reverbel-mac115-IAG-subscribe@ime.usp.br. Você receberá como resposta uma mensagem pedindo a confirmação de sua inscrição. Para confirmar sua inscrição basta mandar uma mensagem vazia como resposta ao pedido de confirmação. Uma vez inscrito, você passará a receber todas as mensagens que forem mandadas para a lista.
. Para mandar uma mensagem para a lista, use o endereço reverbel-mac115-IAG@ime.usp.br. Mensagens enviadas para esse endereço serão entregues a todos os assinantes da lista.
. As mensagens enviadas para a lista ficarão também disponíveis nesta página.

Assuntos Tratados em Aula

. 20/02:
Apresentação. O que é um computador: seus componentes e seu funcionamento básico.
. 01/03:
Primeiros programas em linguagem informal: declarações de variáveis, comandos de entrada e de saída, comandos de atribuição. Exercício: calcular a soma (diferença, produto, quociente) de dois números dados.
Comando condicional ("se ... então ..."). Exercício: dados dois números, imprimir o maior deles.
Comando de repetição ("enquanto"). Exercício: dada uma seqüência de numeros inteiros diferentes de zero, terminada por zero, imprimir a sua soma.
. 06/03:
Exercícios:
     Dada uma seqüência de numeros inteiros diferentes de zero, terminada por zero, imprimir o seu produto.
Dada uma seqüência de numeros inteiros diferentes de zero, terminada por zero, imprimir o maior número da seqüência.
Dados três números inteiros, imprimi-los em ordem crescente.
Uso de variáveis contadoras e de comandos de atribuição como n <- n+1 e n <- n-1. Exercício: dado n e uma seqüência de n números inteiros, calcular sua soma.
. 08/03:
Introdução à linguagem C: declarações de variáveis, comandos de entrada e de saída, comandos de atribuição, comandos "if ... else" e "while".
Exercícios:
     Dados x inteiro e n natural, calcular x elevado à n.
Dada uma seqüência de numeros inteiros diferentes de zero, terminada por zero, contar quantos números positivos e quantos números negativos aparecem na seqüência.
Fazer em casa: 1.6, 1.7 e 1.9 do caderno de exercícios.
. 13/03:
Resolução dos exercícios 1.6, 1.7 e 1.9 do caderno de exercícios.
Uso de "se ... senão" dentro de um "senão". Seqüências de comandos da forma "se ... senão se ... senão se ... senão ...". Exercício: dadas as notas de n alunos, calcular quantos foram aprovados (nota maior ou igual a 50), quantos ficaram de recuperação (nota menor que 50 e maior ou igual a 30) e quantos foram reprovados (nota menor que 30).
. 15/03:
Condições compostas e os conectivos lógicos "e" (&&, em C) e "ou" (||, em C). O operador lógico de comparação para verificação de igualdade (==, em C).
Exercícios:
     Dadas as notas de n alunos, calcular quantos ficaram de recuperação (nota menor que 50 e maior ou igual a 30).
Dadas as notas de n alunos, calcular quantos não ficaram de recuperação (nota maior ou igual que 50 ou nota menor que 30).
Dados a uma nota x e as as notas de n alunos, calcular quantos tiraram nota igual a x.
Dado um inteiro n, verificar se n é primo.
. 20/03:
Exercícios:
     Dados três inteiros positivos representando uma data (dia, mês e ano), calcular a data do dia seguinte.
Dada uma seqüência com n números inteiros, verificar se ela está em ordem crescente.
Uso de "#define" para definir constantes simbólicas.
. 22/03:
O comando "for".
Exercício: dada uma sequência com n >= 2 números inteiros, verificar se a seqüência é uma progressão aritmética.
Fazer em casa: dado um inteiro n >= 10, verificar se este número contém dois dígitos iguais consecutivos.
. 27/03:
Solução do exercício para casa (dado um inteiro n >= 10, verificar se este número contém dois dígitos iguais consecutivos).
Outros tipos de dados: "short", "long", "float" e "double". Leitura e impressão de números reais. Conversão de tipos: automática (implícita) e forçada ("cast").
. 29/03:
Exercícios:
     Dado um inteiro positivo k, calcule o valor da soma Sk = 1/k + 2/(k-1) + 3/(k-2) + ... + k/1 (exercício 2.11 do caderno).
Dadas as notas de n provas de MAC-115, calcular a média da turma.
Dado um numero real x >= 0 e um real epsilon > 0, calcular uma aproximacão de raiz quadrada de x através da seqüência dada por r0 = x e rn+1 = (rn + x/rn)/2. A aproximação será o primeiro valor rn+1 tal que | rn+1 - rn | < epsilon.
Terminar em casa: Uma pessoa aplicou x a juros mensais de z durante 1 ano. Determine o montante de cada mês durante este periodo (exercício 2.1 do caderno).
. 03/04:
Solução do exercício para casa (2.11 do caderno).
Laços encaixados (também chamados de laços aninhados ou nested loops).
Exercícios:
     Dados x e epsilon > 0, números reais, calcular uma aproximação de ex através da série ex = 1 + x + (x2)/2 + (x3)/3! + ... + (xk)/k! + ..., isto é, somar os termos da série até aparecer um termo cujo valor seja menor que epsilon.
Dado um inteiro m, imprimir a decomposição de m em fatores primos, com multiplicidade. Exemplo: para m = 120 a saída desejada é 2(3), 3(1), 5(1). (Exercício 3.6 do caderno.)
Fazer em casa: 2.6 e 2.7 do caderno.
. 05/04:
Funções em C: definição e chamada. Passagem de parâmetros para funções. Valor retornado por uma função.
Exercício (motivação para funções): escrever um programa que lê três números e imprime o fatorial de cada um deles. Soluções: (1) sem usar função nenhuma, (2) com uma função inteira que retorna o fatorial de um número passado como parâmetro, (3) com uma função void (não retorna valor) que imprime o fatorial de um número passado como parâmetro.
Exercício com três partes (ficou para terminar em casa): (1) escreva uma função real que recebe como parâmetro um real x e retorna a raiz quadrada de x, (2) escreva uma função real que recebe dois pontos no plano através de suas coordenadas cartesianas e retorna a distância entre esses pontos, e (3) escreva um programa que leia um ponto origem (x0, y0) e uma seqüência de n pontos e determina o mais próximo da origem.
. 17/04:
Resolução das partes (2) e (3) do exercício que ficou para terminar em casa.
Exercício: (1) escreva uma função booleana que recebe im inteiro n e verifica se n é primo, e (2) escreva um programa que leia um inteiro m e verifica se ele pode ser escrito como m = p + q, onde p e q são primos.
. 19/04:
Discussão sobre o primeiro exercício-programa.
Exercícios 1.25, 1.22 e 1.23 do caderno.
. 24/04:
Primeira prova.
. 26/04:
Variáveis tipo ponteiro (ou apontador). Motivação: função que recebe dois parâmetros e troca os valores desses parâmetros.
Declarações de ponteiros. Uso do operador unário * ("dado apontado por") para dereferenciar um ponteiro.
O operador unário & ("endereço de") e seu uso para inicializar variáveis tipo ponteiro.
. 03/05:
Ponteiros: revisão do material da aula anterior.
Exercício: função que incrementa uma data. Essa função recebe ponteiros para três inteiros, representando um dia, um mês e um ano, e modifica esses inteiros para que eles passem a representar a próxima data.
Mais coisas da linguagem C:
     Operadores para incrementar e decrementar variável (++ e --).
Outros operadores de atribuição (+=, -+, *=, /*, %=).
Expressões: o valor e o efeito de uma expressão. Além de ter efeito, as atribuições tem valor e sua associatividade é da direita para a esquerda. Conseqûencia: múltiplas atribuições num só comando (i = j = k = 0;).
Comandos simples e comandos compostos (ou blocos).
. 10/05:
Exercício:
    (1) Escreva uma função com protótipo
int divide(int *pm, int *pn, int d);
que recebe três inteiros positivos como parâmetros (os dois primeiros através de ponteiros) e retorna 1 se d divide pelo menos um de *pm e *pm, ou 0 caso contrário. Caso d divida *pm, a função faz a divisão e põe o quociente em *pm. Caso d divida *pn, a função faz a divisão e põe o quociente em *pn.
    (2) Escreva um programa que lê dois inteiros positivos m e n e usa a função acima para calcular o mínimo múltiplo comum de m e n.
Exercício:
    (1) Escreva uma função com protótipo
void somabit(int b1, int b2, int *vaium, int *soma);
que recebe três bits (inteiros valendo 0 ou 1) b1, b2 e *vaium e retorna um bit *soma representando a soma dos três e o novo bit "vai-um" em *vaium.
    (2) Escreva um programa que lê dois números em binário e utiliza a função acima para calcular um número em binário que é a soma dos dois números dados. (Esta parte ficou para casa.)
Mais um comando da linguagem C: switch, para seleção de alternativas.


Valid CSS! Valid XHTML 1.0! Last modified: Wed Jul 25 18:47:30 BRST 2001
Francisco Reverbel
reverbel at ime.usp.br