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

  1. 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
  2. Marcar com prof. Fabbri pra ele apresentar a parte 3, que nao esta online
  3. Progressao de exercicios para aprender (fazer leitura sob demanda)
    1. Aquecimento: Para acostumar com a IDE de sua preferencia, escreva um programa que imprime "hello, world!" 10 vezes na tela.
    2. 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).
    3. 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.
    4. Ordenacao por lookup table. Ordene um vetor de inteiros, cada um de 0 a um valor maximo 16000.
    5. 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.
    6. 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.
    7. Ordenacao - operacao merge: dados dois vetores de inteiros ordenados, escreva uma funcao que junte os dois em um unico vetor ordenado.
    8. Ordenacao: implemente o insertion sort. Otimize o codigo para ter o minimo numero de comparacoes. Compare sua solucao com o livro programmin Pearls)
      1. Como estapa inicial, implemente o algoritmo "Insere Ordenado" que insere um elemento novo e insere num vetor ordenado.
    9. Milestone 1: Faca o exercicio de histograma vertical - K&R 1-13, segunda parte (p. 25 do PDF). Primeiro facao o horizontal.
    10. Bitwise: escreva um programa para determinar se um inteiro nao-negativo x eh potencia de 2, e, caso afirmativo, retorne o expoente.
    11. Bitwise: escreva a funcao getbits do K&R logo antes do Exercicio 2-6 (pagina 47 do PDF), e um programa para testa-la.
    12. Bitwise: escreva a funcao setbits do K&R Exercicio 2-6 (pagina 47 do PDF), e um programa para testa-la.
    13. Milestone 2: Labirinto - ver TC [3]
    14. Opcional: implementar busca binaria de um vetor ordenado de floats
    15. 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:

  1. Progressao de exercicios para praticar para a prova
    1. 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.
    2. Escreva um programa que multiplica duas matrizes A 3x6 e B 6x3 de inteiros.
    3. 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.
    4. Escreva um programa usando uma funcao para calcular o minimo multiplo comum entre dois inteiros positivos
    5. 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.
  • 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:

Ver Tambem