Académique Documents
Professionnel Documents
Culture Documents
Aprender
Empreender
Ordenação e pesquisa
Ordenação de vectores
Ordenação por selecção
Ordenação por borbulhamento (bubble sort)
Ordenação por fusão
Ordenação por partição e troca
Pesquisa de vectores
Pesquisa linear
Pesquisa binária (num vector ordenado)
1
Ordenação por selecção
indice início passo passo passo passo passo passo passo
1 2 3 4 5 6 7
0 7 7 2 2 2 2 2 2
1 21 21 21 7 7 7 7 7
2 10 10 10 10 10 10 10 10
3 15 15 15 15 15 11 11 11
4 2 2 7 21 21 21 13 13
5 13 13 13 13 13 13 21 15
6 11 11 11 11 11 15 15 21
2
Ordenação por fusão
indice início passo passo passo passo fusão
1 2 3 4
0 7 7 7 7 7 2
1 21 21 21 10 10 7
2 10 10 10 21 15 10
3 15 15 15 15 21 11
4 2 2 2 2 2 13
5 13 13 13 11 11 15
6 11 11 11 13 13 21
Pesquisa linear
#include <stdio.h>
int find(int v[ ], int x, int n, int *p)
/* p contém a posição onde o elemento foi encontrado */
/* Retorna 1 se x foi encontrado; 0 no caso contrário */
{
*p = 0; /* busca começa em 0 */
while (v[*p] != x && *p < n) (*p)++;
if (*p != n)
return 1; /* encontrou */
else
return 0; /* não encontrou */
}
main()
{
int pos, x[5] = {2, 7, -3, 5, 9};
if (find(x, -3, 5, &pos)) printf("%d\n", pos); /* escreve 2 */
if (find(x, 9, 4, &pos)) printf("%d\n", pos); /* nao escreve */
} 6
3
Pesquisa binária
indice início passo 1 passo 2 passo 3 fim
0 2 2 2 2 2
1 7 7 7 7 7
2 10 10 10 10 10
3 11 11 11 11 11
4 13 13 13 13 13
5 15 15 15 15 15
6 21 21 21 21 21
#include <stdio.h>
int find(int v[ ], int x, int n, int *p)
Pesquisa binária
/* p : posicao onde o elemento foi encontrado. */
/* Retorna 1 se x foi encontrado; 0 no caso contrario. */
{
int baixo = 0, alto = n - 1, medio;
while (baixo <= alto) { /* enquanto existe intervalo de busca */
medio = (int) ((baixo + alto)/2.0); /* índice médio */
if (x < v[medio])
alto = medio - 1; /* intervalo inferior */
else
if (x > v[medio])
baixo = medio + 1; /* intervalo superior*/
else {
*p = medio;
return 1; /* encontrado */
}
}
return 0; /* não encontrado */
}
main()
{
int k, p, v[7] = {1, 3, 17, 31, 52, 73, 86}; /* vector ordenado */
printf("Valor inteiro a encontrar: "); scanf("%d", &k);
if (!find(v, k, 7, &p))
printf("Nao encontrado!\n");
else
printf("Encontrado na posicao %d\n", p+1); /* p começa em 0 */
8
}
4
Strings
Strings são sequências de caracteres (também chamadas
cadeias de caracteres) que compõem, por exemplo, qualquer
texto. Várias linguagens de programação definem o tipo string.
Em C não existe o tipo string.
Existem, contudo, ferramentas para operar com strings,
representadas como vectores de caracteres terminados com o
carácter especial '\0' (“null-terminated strings”).
Este carácter terminador, de código 0 (não confundir com o
carácter '0'), é, portanto, usado para marcar o fim da sequência.
Como em C as strings são vectores de caracteres
terminados com '\0', a sua declaração e inicialização pode
ser feita como vector, ou então como string
char msg[7] = {'V', 'i', 'v', 'a', ' ', '!', '\0'};
char msg[7] = "Viva !";
for(i = 0; i < 7; i++) printf("%c", msg[i]);
printf("%s\n", msg); /* mencionando apenas o nome da string */ 9
Now Hiring
10
5
Leitura e escrita de strings
A escrita de strings pode ser feita com printf e campo de
formatação "%s".
A linguagem C também disponibiliza a função puts, de escrita
de uma string s, que se comporta como
printf("%s\n", s);
6
13
Conversões string-número
#include <stdlib.h>
double atof(char *string);
/* converte string em double */
14
7
Vectores multi-dimensionais
tipo nome[dim1][dim2]...[dim n]
int v[3][4] = { {33, 17, 11, 31}, {23, 34, 34, 45}, {-3, 0, -34, 2} };
int a2[5][7];
int i, j;
for(i = 0; i < 5; i++) {
for(j = 0; j < 7; j++)
a2[i][j] = 0;
}
15
Vector de vectores
#include <stdio.h>
main() expressões equivalentes
{ v[i][j]
int v[3][4] = { * (v[i] + j)
{33, 17, 11, 31}, (* (v + i))[j]
{23, 34, 34, 45}, * (* (v + i) + j)
{-3, 0, -34, 2} };
int * pi;
pi = v[0];
printf("%d %d %d\n", * pi, * * v, v[0][0]);
}
16
8
17
18