Mudanças entre as edições de "Sistemas Operacionais e Introdução a Programação (diário 2009-2) - Atividades para revisão dos conceitos de C - Respostas"
Ir para navegação
Ir para pesquisar
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 2: | Linha 2: | ||
* Leia uma palavra e a repita, omitindo a penúltima letra. | * Leia uma palavra e a repita, omitindo a penúltima letra. | ||
+ | No programa abaixo, há duas formas de se ler a palavra do usuário: | ||
+ | # O usuário executa o programa e digita, ao lado, a palavra, passando-a como argumento. | ||
+ | # Se o usuário executou o programa sem argumentos, o programa "decidirá" por pedir-lhe a palavra: | ||
<syntaxhighlight lang=c n> | <syntaxhighlight lang=c n> | ||
#include <stdio.h> | #include <stdio.h> | ||
Linha 30: | Linha 33: | ||
// Apresenta a palavra original: | // Apresenta a palavra original: | ||
printf("A palavra original é: %s\n", palavra); | printf("A palavra original é: %s\n", palavra); | ||
+ | |||
+ | // Apresenta, abaixo, a palavra modificada: | ||
+ | printf("A palavra sem a penúltima letra é: "); | ||
// | // | ||
− | // | + | // Se a palavra possui menos de 2 letras, mostra direto a primeira/última letra: |
− | printf(" | + | if(tamanho < 2) |
− | + | { | |
− | + | printf("%c\n", palavra[0]); | |
+ | } | ||
+ | else | ||
{ | { | ||
− | printf("%c", palavra[indice]); | + | // Caso contrário, deve-se apresentar todas as primeiras |
+ | // letras até chegar à penúltima (sem mencioná-la) | ||
+ | for(indice = 0; indice < tamanho-2; indice++) | ||
+ | { | ||
+ | printf("%c", palavra[indice]); | ||
+ | } | ||
+ | // Nesse ponto, a variável indice está indicando a posição da | ||
+ | // penúltima letra. Falta apenas mostrar, na tela, a última letra, | ||
+ | // que está à direita (+1): | ||
+ | printf("%c\n", palavra[indice+1]); | ||
} | } | ||
− | + | } | |
− | // | + | </syntaxhighlight> |
− | printf("% | + | |
− | + | * Faça o mesmo que o programa anterior, desta vez para uma frase completa: omitirá a última palavra. | |
+ | <syntaxhighlight lang=c n> | ||
+ | #include <stdio.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | void lerLinha(char* linha) | ||
+ | { | ||
+ | scanf(" %[^\n]", linha); | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | char frase[500]; | ||
+ | char * auxiliar; | ||
+ | int tamanho; | ||
+ | int indice; | ||
+ | |||
+ | // Mais uma vez, a função auxiliar lerLinha é utilizada. | ||
+ | printf("Digite uma frase: "); | ||
+ | lerLinha(frase); | ||
+ | |||
+ | // Apresenta a frase original. | ||
+ | printf("A frase original é: %s\n", frase); | ||
− | + | // Procura pelo último espaço digitado. Na prática, localiza a última palavra. | |
+ | auxiliar = strrchr(frase, ' '); | ||
+ | |||
+ | // Se auxiliar é nulo, é porque não há mais de uma palavra. | ||
+ | if(auxiliar != NULL) | ||
+ | { | ||
+ | printf("Esta frase sem a última palavra: "); | ||
+ | // | ||
+ | // Conta quantos caracteres do início até a última palavra. | ||
+ | tamanho = strlen(frase) - strlen(auxiliar); | ||
+ | for(indice = 0; indice < tamanho; indice++) | ||
+ | { | ||
+ | printf("%c", frase[indice]); | ||
+ | } | ||
+ | // Mostra o sinal final de pontuação. | ||
+ | if(frase[strlen(frase)-1] == '.' || frase[strlen(frase)-1] == '!' || | ||
+ | frase[strlen(frase)-1] == '?') | ||
+ | { | ||
+ | printf("%c", frase[strlen(frase)-1]); | ||
+ | } | ||
+ | printf("\n"); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | // Alguém quis aplicar uma pegadinha? | ||
+ | printf("Há apenas uma palavra na frase ;-)\n"); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
===Interpretação da Entrada de Dados=== | ===Interpretação da Entrada de Dados=== |
Edição atual tal como às 16h18min de 1 de dezembro de 2009
Manipulação de String
- Leia uma palavra e a repita, omitindo a penúltima letra.
No programa abaixo, há duas formas de se ler a palavra do usuário:
- O usuário executa o programa e digita, ao lado, a palavra, passando-a como argumento.
- Se o usuário executou o programa sem argumentos, o programa "decidirá" por pedir-lhe a palavra:
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[])
{
char palavra[100];
int tamanho;
int indice;
// Verifica se o usuário digitou pelo menos um argumento.
// Se sim, aproveita e copia essa informação para a variável "palavra":
if(argc > 1)
{
strcpy(palavra, argv[1]);
}
else
{
// Se não digitou, pede ao usuário uma palavra nova:
printf("Digite uma palavra: ");
scanf("%s", palavra);
}
// Conta quantas letras possui a palavra - para saber qual é a penúltima :-)
tamanho = strlen(palavra);
// Apresenta a palavra original:
printf("A palavra original é: %s\n", palavra);
// Apresenta, abaixo, a palavra modificada:
printf("A palavra sem a penúltima letra é: ");
//
// Se a palavra possui menos de 2 letras, mostra direto a primeira/última letra:
if(tamanho < 2)
{
printf("%c\n", palavra[0]);
}
else
{
// Caso contrário, deve-se apresentar todas as primeiras
// letras até chegar à penúltima (sem mencioná-la)
for(indice = 0; indice < tamanho-2; indice++)
{
printf("%c", palavra[indice]);
}
// Nesse ponto, a variável indice está indicando a posição da
// penúltima letra. Falta apenas mostrar, na tela, a última letra,
// que está à direita (+1):
printf("%c\n", palavra[indice+1]);
}
}
- Faça o mesmo que o programa anterior, desta vez para uma frase completa: omitirá a última palavra.
#include <stdio.h>
#include <string.h>
void lerLinha(char* linha)
{
scanf(" %[^\n]", linha);
}
int main()
{
char frase[500];
char * auxiliar;
int tamanho;
int indice;
// Mais uma vez, a função auxiliar lerLinha é utilizada.
printf("Digite uma frase: ");
lerLinha(frase);
// Apresenta a frase original.
printf("A frase original é: %s\n", frase);
// Procura pelo último espaço digitado. Na prática, localiza a última palavra.
auxiliar = strrchr(frase, ' ');
// Se auxiliar é nulo, é porque não há mais de uma palavra.
if(auxiliar != NULL)
{
printf("Esta frase sem a última palavra: ");
//
// Conta quantos caracteres do início até a última palavra.
tamanho = strlen(frase) - strlen(auxiliar);
for(indice = 0; indice < tamanho; indice++)
{
printf("%c", frase[indice]);
}
// Mostra o sinal final de pontuação.
if(frase[strlen(frase)-1] == '.' || frase[strlen(frase)-1] == '!' ||
frase[strlen(frase)-1] == '?')
{
printf("%c", frase[strlen(frase)-1]);
}
printf("\n");
}
else
{
// Alguém quis aplicar uma pegadinha?
printf("Há apenas uma palavra na frase ;-)\n");
}
}
Interpretação da Entrada de Dados
- Leia um número como parâmetro do programa e escreva-o na forma extensa.
Aplicação de Funções
- Resolva o problema, mas desta vez utilize uma função em separado para cada dezena:
- Uma função para converter número de 0 a 9.
- Uma função para converter número de 10 a 19.
- Uma função para converter número de 20 a 29.