C
De Pontão Nós Digitais
(Redirecionado de C++)
Ir para navegaçãoIr para pesquisar
<video type="youtube" id="Gru0DnXWr0g" width="552" height="315" allowfullscreen="true" desc="Revisao de Linguagem C de v1z"/>
Revisao de C/C++
A linguagem C/C++ eh a base de todas as outras linguagens. Esta wiki fornece um caminho rapido para aprende-la.
- Leitura sugerida: livro Kernighan and Ritchie The Ansi-C programming Language (K&R)
- Resumo de operacoes bitwise [1]
- Siga este estilo de formatação e identação de código: [2]
Caminho da Iluminacao
- Assistir aos videos de revisao de C (mesmo sem entender tudo): https://www.youtube.com/watch?v=Gru0DnXWr0g, https://www.youtube.com/watch?v=k0KfKildD-U
- Marcar com prof. Fabbri pra ele apresentar a parte 3, que nao esta online
- Progressao de exercicios para aprender (fazer leitura sob demanda)
- Aquecimento: Para acostumar com a IDE de sua preferencia, escreva um programa que imprime "hello, world!" 10 vezes na tela.
- Aquecimento: Fazer exercicio de conversao de Celsius para Farenheit, iniciando de 100 para baixo. Se voce ja sabe programar, tente fazer sozinho antes de olhar a solucao no livro. (exercicio 1-4 do livro K&R, p.16 do PDF, so que de tras pra frente).
- Aquecimento: Escreva um programa que eleva um numero inteiro (base) a um outro numero inteiro (expoente). Utilize uma funcao e realize entrada e saida do teclado. Faca uma solucao sem a funcao pow e outra com.
- Ordenacao por lookup table. Ordene um vetor de inteiros, cada um de 0 a um valor maximo 16000.
- Maximo e minimo de vetor: Escreva um programa que calcula o maior e o menor elemento de um vetor de inteiros. Forneca a uma solucao sem recursao, e a outra usando recursao. Utilize funcoes para calcular o maximo e o minimo.
- Ordenacao por maximo: Escreva um programa que ordena um vetor de inteiros utilizando a funcao maximo implementada no exercicio anterior. A cada passo, insere o valor maximo.
- Ordenacao - operacao merge: dados dois vetores de inteiros ordenados, escreva uma funcao que junte os dois em um unico vetor ordenado.
- Ordenacao: implemente o insertion sort. Otimize o codigo para ter o minimo numero de comparacoes. Compare sua solucao com o livro programmin Pearls)
- Como estapa inicial, implemente o algoritmo "Insere Ordenado" que insere um elemento novo e insere num vetor ordenado.
- Milestone 1: Faca o exercicio de histograma vertical - K&R 1-13, segunda parte (p. 25 do PDF). Primeiro facao o horizontal.
- Bitwise: escreva um programa para determinar se um inteiro nao-negativo x eh potencia de 2, e, caso afirmativo, retorne o expoente.
- Bitwise: escreva a funcao getbits do K&R logo antes do Exercicio 2-6 (pagina 47 do PDF), e um programa para testa-la.
- Bitwise: escreva a funcao setbits do K&R Exercicio 2-6 (pagina 47 do PDF), e um programa para testa-la.
- Milestone 2: Labirinto - ver TC [3]
- Opcional: implementar busca binaria de um vetor ordenado de floats
- Opcional: implementar merge sort e quick sort
Exame de Tecnicas Computacionais do IPRJ e Concursos do IPRJ
Apos seguir o caminho da iluminacao acima, fazer:
- Progressao de exercicios para praticar para a prova
- Escreva um programa para encontrar a sequencia "918" dentre os digitos de um numero inteiro. A entrada deve um numero inteiro, e a saida 1 caso os digitos 918 aparecem em sequencia na representacao decimal nesse numero, 0 caso contrario.
- Escreva um programa que multiplica duas matrizes A 3x6 e B 6x3 de inteiros.
- Escreva um programa cuja entrada eh um numero inteiro, e que imprime 1 caso as somas dos digitos for maior que 10, e 0 caso contrario. Utilize uma funcao que toma um numer inteiro como entrada, e cuja saida eh true ou false, dependendo se a soma dos digitos for maior que 10 ou nao.
- Escreva um programa usando uma funcao para calcular o minimo multiplo comum entre dois inteiros positivos
- Escreva um programa cuja entrada eh uma matriz NxN e imprime na tela a soma das linhas, a soma das colunas, e a soma de todas as diagonais.
Ponteiros e Matrizes
- Exercicio basico para praticar ponteiros e alocacao dinamica:
- Entrada
- Digite o tipo de implementacao de lista: (1) Encadeada (2) Duplamente encadeada (3) Buffer circular
- Para cada opcao: digite (i) para inserir (d) deletar. Para cada dessas opcao: escolher posicao para inserir e posicao para deletar
- As listas sao todas de strings
- Tente nao usar STL, mas eh exercicio util comparar com STL.
- Entrada
- Aprofundamento: Indexar vetor unidimensional como matriz (dois indices)
<syntaxhighlight lang="C">
#include <stdio.h> #define NROWS 2 #define NCOLS 3 int main() { int in[NROWS*NCOLS] = {5, 6, 7, 8, 9, 10}; // printf("%d", m[2][1]); // *** wrong *** // m is a pointer (index/address) // whose stride is 3 ints int (*m)[NCOLS] = (int (*)[NCOLS]) in; printf("%d", m[1][0]); // *** works **** return 0; }
</syntaxhighlight>
- Aprofundamento: funcao que retorna matriz
<syntaxhighlight lang="C">
int (*new_matrix)[NCOLS]() { return malloc(NROWS*NCOLS*sizeof(int)); } int main() { int (*m)[NCOLS]; m = new_matrix(); // acessa como m[i][j] normalmente return 0; }
</syntaxhighlight>
- Aprofundamento: diferenca entre tipo array multidimensional/matriz e ponteiro duplo.
<syntaxhighlight lang="C">
char *data // UNDER CONSTRUCTION
</syntaxhighlight>
- Aprofundamento: realize o exercicio 1 da seguinte prova [4]
Entrevistas em Empresas (em especial Google)
Alem do roteiro acima, estudar os seguintes livros:
- Programming Pearls
- Video: Revisao de Grafos do Fabbri
- Livro de algoritmos de Tardos & Kleinberg
- Livro de algoritmos do Skiena
Ver Tambem
- Curso de Tecnicas Computacionais do prof. Fabbri