Laboratório 04
PARTE I - Manipulação de vectores/tabelas
Nota prévia: Quando trabalhamos com vectores em C, é comum fazer erros que levam a Segmentation Faults. Se obtiver tal erro nos exercícios abaixo provavelmente terá uma gralha nos limites dos seus ciclos, ou seja, deverá estar a tentar aceder a um elemento de um vector que não existe.
Podem usar o programa valgrind
para tentar identificar o problema.
Exercício 01
(Gráfico horizontal) Escreva um programa que peça ao utilizador um número inteiro positivo n < VECMAX
, onde VECMAX=100
. Depois, leia n
números inteiros positivos. No final o programa deverá escrever uma representação gráfica dos valores lidos como o que se segue. O gráfico apresentado é o exemplo para n = 3
e valores 1 3 4
.
Input
3
1 3 4
Output
*
***
****
Exercício 02
(Gráfico vertical suspenso) Escreva um programa que peça ao utilizador um número inteiro positivo n < VECMAX
, onde VECMAX=100
. Depois, leia n
números inteiros positivos. No final o programa deverá escrever uma representação gráfica dos valores lidos como o que se segue. O gráfico apresentado é o exemplo para n = 3
e valores 1 3 4
.
Input
3
1 3 4
Output
***
**
**
*
Exercício 03
(Gráfico vertical crescente) Escreva um programa que peça ao utilizador um número inteiro positivo n < VECMAX
, onde VECMAX=100
. Depois, leia n
números inteiros positivos. No final o programa deverá escrever uma representação gráfica dos valores lidos como o que se segue. O gráfico apresentado é o exemplo para n = 3
e valores 1 3 4
.
Input
3
1 3 4
Output
*
**
**
***
PARTE II - Manipulação de strings
Considere que nos exercícios seguintes, todas as strings têm no máximo `MAX = 80` caracteres (incluindo o carácter de fim de string).
Exercício 04
(Manipulação de Strings: Palíndromo) Escreva um programa que leia uma palavra do terminal e verifica se a palavra é um palíndromo ou não. Uma palavra é um palíndromo se se escrever da mesma maneira da esquerda para a direita e vice-versa (por exemplo, "AMA" é um palíndromo). Se a palavra é um palíndromo, o programa deverá imprimir o valor yes
, e no
, se não é.
Dica: Podem usar scanf("%s", s)
para ler uma palavra. Reparem que a string s
não pede &
no scanf
.
Input
AMA
Output
yes
Input
xpto
Output
no
Exercício 05
(Manipulação de Strings: Leitura e Escrita de Linhas de Texto) Escreva uma programa que leia caracteres do teclado, carácter a carácter, até encontrar o carácter \n
ou EOF e escreve a linha lida no terminal. Implemente a função int leLinha(char s[])
que lê a linha para a string s
e devolve o número de caracteres lidos.
Dica: Depois de resolver este exercício, experimente utilizar o comando fgets
.
Input
ola adeus
Output
ola adeus
Exercício 06
(Manipulação de Strings: Maiúsculas) Escreva um programa que leia uma linha do terminal (use a função do exercício anterior) e que escreve no terminal o mesmo texto, mas com as letras minúsculas substituídas pelas respectivas letras maiúsculas. Implemente a função void maiusculas(char s[])
.
Nota: Recorde que a string s
é alterada pela função maiusculas
.
Input
oLA aDEUS
Output
OLA ADEUS
Exercício 07
(Manipulação de Strings: Apaga Carácter) Escreva um programa que leia uma linha e um carácter e escreve no terminal a mesma linha onde todas as ocorrências do carácter foram removidas. Implemente a função void apagaCaracter(char s[], char c)
que apague o carácter c
da string s
.
Input
ola adeus
a
Output
ol deus
Exercício 08
(Maior) Escreva um programa que leia dois números inteiros em representação decimal e imprime o maior desses dois números. Podem assumir que os dois números têm o mesmo número de algarismos e no máximo 100 carácteres.
Nota: Os números podem ser demasiado grandes para ser guardados numa variável do tipo long long
, por exemplo 9988888888888888888887
e 9988888888888888888888
.
Input
5 2
Output
5
Input
9988888888888888888887 9988888888888888888888
Output
9988888888888888888888