Esta página estará em permanente construção até o final do semestre... |
Informações Gerais |
Local: IAG, auditório G |
Horário: terças das 8:00 às 10:40, quintas das 10:00 às 11:40 |
Monitor: Gilberto Guerra (gilberto ponto guerra arroba usp ponto br) |
Horário e local de monitoria: quartas e quintas das 12:00 às 13:00, na sala pró-aluno do IAG |
Avaliação: três provas e quatro exercícios-programa |
Média de provas: | MP = (P1 + 2 P2 + 2 P3)/5 |
Prova substitutiva: | Está prevista uma quarta prova P4, para alunos que comprovadamente não puderam comparecer à uma das três provas anteriores. A nota dessa prova substitui a nota da prova que não foi feita, ou, no caso de quem perdeu mais do que uma prova, substitui uma das provas não feitas, de forma a maximizar a média de provas. |
Média de exercícios-programa: ME = (EP1 + EP2 + 2 EP3 + 3 EP4)/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:
12 de abril (P1), 17 de maio (P2), |
Horário e local da prova substitutiva: 10:00, na sala B-6 do bloco B do IME-USP. |
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. |
Quem tiver menos que 5 na média de provas MP deverá fazer a prova de recuperação (PRec) e terá sua média de provas recalculada como Nova_MP = (MP + 2 PRec)/3 |
A prova de recuperação será no dia 2 de agosto, às 16:00, na sala 9 do bloco B do IME-USP. |
Quem tiver menos que 5 na média de exercícios-programa ME deverá entregar o exercício-programa de recuperação (EPRec) até 27 de julho e terá sua média de exercícios-programa recalculada como Nova_ME = (ME + 2 EPRec)/3 |
A média final de recuperação será calculada como a do semestre, usando-se, conforme o caso, a nova média de provas e/ou a nova média de exercícios-programa. |
Assuntos Tratados em Aula |
06/03: | Apresentação da disciplina. Organização e funcionamento de um computador. | |
08/03: | Problema (solução numa pseudo-linguagem de
programação): Dada uma seqüência de números inteiros diferentes
de zero, terminada por zero, calcular a sua soma. Esqueleto de um programa em C. Programa "hello world" em C. Declaração de variáveis, comando de atribuição ( = ), comando de
repetição (while ) e funções de
entrada/saída (scanf e printf ).Solução em C do problema visto no início da aula. | |
13/03: | Exercício 4 da lista
de exercícios com inteiros. Exercício 8 da lista de exercícios com inteiros. | |
15/03: | Comando de execução
condicional (if -else ).Problema: Dados um número inteiro não negativo n e uma seqüência com n números inteiros, determinar a soma dos inteiros positivos da seqüência. Problema: Dados um número inteiro não negativo n e uma seqüência com n números inteiros, determinar a soma dos inteiros positivos e a soma dos inteiros negativos da seqüência. Exercício 10 da lista de exercícios com inteiros. | |
20/03: | Operadores / e % .Comando for .Problema: Dados um número inteiro não negativo n e uma seqüência com n números inteiros, determinar quantos números da seqüência são pares e quantos são ímpares. Problema: Dados um número inteiro não negativo n e uma seqüência com n números inteiros, determinar o maior inteiro da seqüência. | |
22/03: | Problema: Dados um número inteiro não negativo n e
um dígito d, com
0 <= d <= 9,
determinar quantas vezes d ocorre em
n. Operadores lógicos "e" ( && ) e
"ou" (|| ).Indicador de passagem. Problema: Dados um número inteiro não negativo n e as notas de n alunos, determinar quantos ficaram de recuperação. Um aluno está de recuperação se sua nota for maior ou igual a 30 e menor que 50. (A nota máxima é 100.) Problema: Dados um número inteiro não negativo n e uma seqüência com n números inteiros, verificar se a seqüência está em ordem crescente. Problema: Dados um número inteiro não negativo n, verificar se este número contém dois dígitos adjacentes iguais. Fazer em casa: exercícios 1, 2, 3, 5, 6, 7, 16, 17, 21 e 22 da lista de exercícios com inteiros. | |
27/03: | Constantes simbólicas (diretiva #define ).Abreviaturas ( i++ , i-- ,
a += b , etc).Precedência e associatividade dos operadores. Atribuição múltipla ( i = j = 0; ).Valor e efeito colateral de uma expressão. Exercício 9 da lista de exercícios com inteiros. | |
29/03: | Exercício 11 da lista
de exercícios com inteiros. Exercício 12 da lista de exercícios com inteiros. Repetições encaixadas. Exercício 6 da lista de exercícios com repetições encaixadas. Fazer em casa: Dados um número inteiro n, com n > 0, e uma seqüência com n números inteiros maiores que zero, determinar o fatorial de cada número da seqüência. Fazer em casa: exercício 7 da lista de exercícios com repetições encaixadas. | |
10/04: | Resolução dos dois exercícios passados como tarefa de casa na
aula anterior. Problema: Dados um número inteiro n, com n > 0, e uma seqüência com n números inteiros, verificar se a seqüência é uma progressão aritmética. | |
12/04: | Primeira prova. | |
17/04: | O tipo float : representação interna, constantes e
variáveis float , aritmética envolvendo números do
tipo float , leitura de números do tipo
float ("%f" ), impressão de expressões do
tipo float ("%f" ), conversão de tipos
(casting).Problema: Dado um inteiro n > 0 e uma seqüência de n notas de provas de MAC0115, calcular a média aritmética dessas notas. Exercícios 2, 3 e 10 da lista de exercícios com reais. Fazer em casa: exercício 5 da lista de exercícios com reais. | |
19/04: | Problema: Dados números reais x > 0 e
epsilon > 0, calcular uma aproximação da raiz
quadrada de x através da seqüência de números reais
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. Problema: Dados números reais x e epsilon > 0, calcular uma aproximação de ex através da série ex = 1 + x + x2/2 + x3/3! + ... + xk/k! + ..., incluindo na aproximação todos os termos da série até o primeiro de valor absoluto (módulo) menor que epsilon. Exercício 6 da lista de exercícios com reais. Fazer em casa: Dado um número real x tal que 0 <= x <= 1, calcular uma aproximação do arco tangente de x (em radianos) através da série infinita arctan(x) = 1 - x3/3 + x5/5 - x7/7 + ..., incluindo todos os termos da série até encontrar um termo com valor absoluto menor que 0,0001. | |
24/04: | Funções em C: definições de funções, chamadas de funções, passagem
de parâmetros, protótipos de funções. Problema 1 (sem usar funções): Dados dois números reais x e y e dois números inteiros positivos a e b, calcule o valor da expressão xa + yb + (x - y)a - b. Problema 1': Resolva novamente o Problema 1, mas desta vez usando uma função int potencia(int base, int expoente) { ... } .Problema 2: (a) Escreva uma função que recebe n e calcula n!. (b) Escreva uma função que recebe dois números inteiros m e n e, usando a função do item anterior, calcula m! / (n! (m - n)!). (c) Escreva um programa que lê um numero inteiro n > 0 e imprime os coeficientes da expansão de (a + b)n. | |
26/04: | Problema:
(a) Usando a função sqrt(x) da biblioteca
matemática da linguagem C (#include <math.h> ),
escreva uma função que recebe dois pontos no plano através
de suas coordenadas cartesianas e devolve a distância entre
os pontos.
(b) Escreva um programa que lê um ponto origem
(x0, y0) e uma
seqüência de n pontos e determina o ponto mais
próximo do ponto origem.Exercícios 1 e 2 da primeira lista de exercícios com funções. | |
03/05: | Ponteiros ou apontadores em C: declaração de variáveis
apontadoras (int *p; ), uso do operador
"endereço de" para inicializar ponteiros
(p = &i; ),
uso do operador "dereferência" (*p ) para obter o
valor apontado.Passagem de endereços (ponteiros) como parâmetros para funções. Exemplo: função void troca(int *p1, int *p2) ,
que recebe os endereços de duas variáveis inteiras e troca os
valores dessas variáveis.Problema: Dizemos que um número natural n é palíndromo se vemos a mesma seqüência de dígitos quando lemos o número da direita para a esquerda e quando o lemos da esquerda para a direita. Exemplos: 567765 e 32423 são palíndromos; 567675 não é palíndromo. (a) Escreva uma função que recebe um inteiro n > 0 e devolve o seu primeiro dígito, seu último dígito e altera o valor de n removendo seu primeiro e último dígitos. (b) Escreva um programa que lê um inteiro positivo n e verifica se n é palíndromo. Suponha que n não contém o dígito 0. | |
08/05: | Problema:
(a) Escreva uma função com protótipo
int divide(int *m, int *n, int d); ,
que recebe três inteiros positivos como parâmetros e
retorna 1 se pelo menos um entre *m e
*n for divisível por d , e 0 caso
contrário. Além isso, se *m for divisível por
d , a função efetua a divisão e atualiza
*m com o quociente. Ela faz o mesmo para
*n , caso *m seja divisível por
d .
(b) Escreva um programa que lê dois inteiros positivos
m e n e, usando a função acima, calcula o
mínimo múltiplo comum entre m e n.Problema: (a) Escreva uma função com protótipo void somabit(int b1, int b2, int *vaium, int *soma);
que recebe três bits (inteiros 0 ou 1) b1 ,
b2 e *vaium , devolve um bit soma
representando a soma desses três bits e devolve o novo
um bit "vai-um" em *vaium .
(b) Usando a função acima, escreva um programa que lê dois
números em binário e calcula um número em binário que é a
soma dos dois números dados.
| |
10/05: | Problema: Escreva uma função que decompõe um número em sua
parte inteira e sua parte fracionária. A entrada da função é um
número real x e a saída é um número inteiro e um número
real com os valores da parte inteira e e da parte fracionária de
x. Problema: Escreva uma função que transforma um intervalo de tempo, dado em segundos, para dias, horas, minutos e segundos. A entrada da função é um inteiro t com o valor de um intervalo de tempo em segundos. A saída da função são 4 inteiros com os valores de dias, horas, minutos e segundos correspondentes ao valor de t. Por exemplo, para t = 100000, a saída deve ser 1 (dia), 3 (horas), 46 (minutos) e 40 (segundos), pois 1*24*60*60 + 3*60*60 + 46*60 + 40 = 10000. Outros tipos de dados inteiros: char ,
(unsigned ) short ,
unsigned ,
(unsigned ) long .Outros tipos de dados reais: double ,
long double .
| |
15/05: | Simulação de programa com
apontadores. Problema: Escreva uma função que recebe três inteiros representando uma data (dia, mês e ano) e atualiza esses inteiros fazendo-os representar a data do dia seguinte. | |
17/05: | Segunda prova. | |
22/05: | O tipo char : constantes tipo
char ('A' ),
leitura e impressão de char s com "%c" .Letras e dígitos no código ASCII. As funções de <ctype.h> .Problema: Dados n > 0 e uma sequência de n caracteres representando um texto, determinar a frequência relativa de vogais no texto. Por exemplo, no texto "em terra de cego quem tem um olho é caolho", essa frequência é 16/42. Problema: Dada uma seqüência de caracteres terminada por '.', determinar quantas letras minúsculas e quantas letras maiúsculas aparecem na seqüência. | |
24/05: | Problema: Dada uma frase terminada por '.', imprimir o
comprimento da palavra mais longa. Vetores (matrizes unidimensionais) em C. Exercício 1 da lista de exercícios com vetores. Problema: Dados n > 0 e uma sequência de n números reais, imprimir esses números eliminando as repetições. Problema: Dados n > 0 e uma sequência de n valores representando lançamentos de uma roleta (inteiros entre 0 e 36), calcular a freqüência de cada valor. | |
29/05: | Leitura de arquivos e escrita em arquivos (fopen ,
fscanf e fprintf ).Passagem de vetores como parâmetros de funções. Problema: (a) Escreva uma função com protótipo int acha (float v[], int n, float x);
que devolve a posição em que o real x ocorre no
vetor v ou devolve -1 se x não
aparece no vetor. O número de elementos do vetor é
n .
(b) Escreva uma função com protótipo
void adiciona (float v[], int *n, float x);
que adiciona x ao final do vetor
v e altera o valor de *n .
(c) Dada uma seqüência de n números reais,
imprimi-la eliminando as repetições.
| |
05/06: | Cadeias de caracteres (strings). Problema: (a) Escreva uma função que recebe um inteiro positivo k, recebe um vetor com os k+1 coeficientes reais de um polinômio de grau k, e recebe outro real x. A função devolve o valor do polinômio no ponto x. Considere que o coeficiente de xi está guardado na posição i do vetor. (b) Usando a função anterior, escreva um programa que leia dois inteiros k e n, leia os k+1 coeficientes de um polinômio de grau k e leia outros n números reais. A função imprime o valor do polinômio para cada um desses n números. Problema: (a) Escreva uma função que recebe como parâmetro um inteiro não-negativo k e um vetor a com os k+1 coeficientes reais de um polinômio de grau k. A função altera k e a de modo que eles passem a armazenar o grau e os coeficientes da derivada do polinômio de entrada. (b) Escreva um programa que leia um inteiro não-negativo k, leia os k+1 coeficientes de um polinômio real p0 de grau k e leia três reais x0, x1 e x2. O programa deve calcular p0(x0), p1(x1) e p2(x2), onde p1 e p2 são respectivamente a primeira e a segunda derivada do polinômio p0. Use a função do item (a) e a função do item (a) do problema anterior. | |
12/06: | Matrizes bidimensionais em C. Problema: Escreva um programa que leia n, leia os elementos de uma matriz real An x n e verifique se a matriz A tem uma linha, coluna ou diagonal composta apenas por zeros. Problema: Dado n e uma matriz real An x n, verificar se a A é simétrica. Fazer em casa: Escreva um programa que leia três inteiros positivos m, n e p, leia duas matrizes reais Am x n e Bn x p e imprima a matriz Cm x p que é o produto de A por B. | |
14/06: | Resolução da tarefa de casa da aula anterior. Passagem de matrizes como parâmetros de funções. Exercício 5 da lista de exercícios com funções - parte 3. | |
19/06: | Conversa sobre o EP4. Exercício 13 da lista de exercícios com funções - parte 3. | |
21/06: | Questões sobre o EP4. Busca binária. Ordenação. Algoritmo de ordenação por seleção. Algoritmo de ordenação por inserção. Revisão da segunda prova. | |
26/06: | Questões sobre o EP4. Exercício 24 da lista de exercícios com funções - parte 3. | |
28/06: | Terceira prova. | |
03/07: | Prova substitutiva. (Atenção para o horário e local: 10:00, na sala B-6 do bloco B do IME-USP.) |
Exercícios-Programa |
Primeiro exercício-programa (prazo: 16 de abril). | |
Segundo exercício-programa (prazo: 15 de maio). | |
Terceiro exercício-programa (prazo: 12 de junho). | |
Quarto exercício-programa (prazo:
|
Bibliografia |
Material didático produzido pelo Departamento de Ciência da Computação do IME-USP e disponível na Internet. | |
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 tesouraria do IME-USP (sala 120 do bloco A). Todo o conteúdo do caderno está disponível na Internet, juntamente com as soluções de muitos dos exercícios. | |
Brian W. Kernighan e Dennis M. Ritchie, The C Programming Language, Second Edition (ANSI C), Prentice-Hall, 1988. ISBN: 0-13-110362-8. | |
Há uma edição em Português (B. W. Kernighan e D. M. Ritchie, C, a Linguagem de Programação: padrão ANSI, Editora Campus, 1990; ISBN 85-7001-586-0) mas infelizmente a tradução e a tipografia deixam muito a desejar. Prefira o original. | |
Eric Roberts, The Art and Science of C: A Library-Based Introduction to Computer Science, Addison-Wesley, 1995. ISBN: 02-0154-322-2. | |
Harvey M. Deitel e Paul J. Deitel, Como Programar em C, Segunda Edição, LTC Editora, 1999. ISBN: 85-2161-191-9. |
Recursos Adicionais na Internet |
Material didático produzido pelos professores da disciplina de Introdução à Computação oferecida para a Poli. | |
Guia de referência da linguagem C. | |
Notas de aula de MAC2166, pelo Prof. José Augusto: página inicial e índice de tópicos. | |
Páginas criadas pelo Prof. Paulo Feofiloff sobre a precedência entre operadores em C, os arquivos-interface de algumas bibliotecas padrão, e a tabela de caracteres ISO 8859-1. | |
Página de download do Dev-C++. | |
Página de download da distribuição Ubuntu do sistema operacional Linux. |