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"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(6 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 31: Linha 34:
 
printf("A palavra original é: %s\n", palavra);
 
printf("A palavra original é: %s\n", palavra);
  
// Apresenta a palavra modificada:
+
// Apresenta, abaixo, a palavra modificada:
 
printf("A palavra sem a penúltima letra é: ");
 
printf("A palavra sem a penúltima letra é: ");
 
//
 
//
// Se a palavra possui menos de 2 letras, mostra direto a primeira/última:
+
// Se a palavra possui menos de 2 letras, mostra direto a primeira/última letra:
 
if(tamanho < 2)
 
if(tamanho < 2)
 
{
 
{
Linha 41: Linha 44:
 
else
 
else
 
{
 
{
// Caso contrário, deve-se apresentar todas as primeiras letras
+
// Caso contrário, deve-se apresentar todas as primeiras
// até chegar à penúltima letra (sem mencioná-las)
+
// letras até chegar à penúltima (sem mencioná-la)
 
for(indice = 0; indice < tamanho-2; indice++)
 
for(indice = 0; indice < tamanho-2; indice++)
 
{
 
{
 
printf("%c", palavra[indice]);
 
printf("%c", palavra[indice]);
 
}
 
}
// Nesse ponto, a variável indice está indicando a
+
// Nesse ponto, a variável indice está indicando a posição da
//posição da penúltima letra.
+
// penúltima letra. Falta apenas mostrar, na tela, a última letra,
// Falta apenas mostrar, na tela, a última letra,
 
 
// que está à direita (+1):
 
// que está à direita (+1):
 
printf("%c\n", palavra[indice+1]);
 
printf("%c\n", palavra[indice+1]);
Linha 56: Linha 58:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
* Faça o mesmo que o programa anterior, desta vez para uma frase completa: omitirá a última palavra
+
* 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:

  1. O usuário executa o programa e digita, ao lado, a palavra, passando-a como argumento.
  2. 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.



Voltar para diário da disciplina