Soluções da aula prática 8
float power(float x, int n)
/* solucao com ciclo */
{
int i;
float result;
result = 1;
for (i=1; i<=n; i++)
result = result * x;
return(result);
}
float power(float x, int n)
/* solucao recursiva */
{
if (n==1)
return(x)
else
return(x * power(x, n-1));
}
#include <stdio.h>
void main()
{
char frase[128];
int p;
int numpalavras;
printf("Escreve uma frase:\n");
gets(frase);
p = 0;
numpalavras = 1;
while (frase[p] != '\0')
{
if (frase[p]=='
')
numpalavras++;
p++;
}
printf("Foram escritos %d palavras\n",
numpalavras);
}
ou (para adeptos de C com apontadores):
void main()
{
char frase[128];
char *p;
int numpalavras;
printf("Escreve uma frase:\n");
gets(frase);
p = frase;
numpalavras = 1;
while (*p != '\0')
{
if (*p=='
')
numpalavras++;
p++;
}
printf("Foram escritos %d palavras\n",
numpalavras);
}
void main()
{
char frase[128];
char vogais[20] = "aAeEiIoOuU";
int p;
char c[2];
int numvogais;
printf("Escreve uma frase:\n");
gets(frase);
p = 0;
numvogais = 1;
while (frase[p] != '\0')
{
c[0]=frase[p];
/* o
caracter c esta dentro do string vogais?: */
if (strstr(vogais,
c))
numvogais++;
p++;
}
printf("Foram escritos %d vogais\n",
numvogais);
}
Existe na bilbioteca tambem a função strchr que procura a posição de uma caracter dentro do string. Usanda esta função a solução seria
void main()
{
char frase[128];
char vogais[20] = "aAeEiIoOuU";
int p;
char c;
int numvogais;
printf("Escreve uma frase:\n");
gets(frase);
p = 0;
numvogais = 1;
while (frase[p] != '\0')
{
c=frase[p];
/* o
caracter c esta dentro do string vogais?: */
if (strchr(vogais,
c))
numvogais++;
p++;
}
printf("Foram escritos %d vogais\n",
numvogais);
}
Exemplo:
Qual o primeiro nome (nome próprio)
? Pedro
Qual o último nome (apelido)
? Abrunhosa
Pedro Abrunhosa
#include <strdio.h>
#include <string.h>
void main()
{
char prop[128], nome[128];
printf("Qual o primeiro nome (nome
proprio) ? ");
gets(prop);
printf("Qual o ultimo nome (apelido)
? ");
gets(nome);
strcat(prop, " ");
strcat(prop, nome);
printf("%s", prop);
}
Exemplo:
Escreva um nome completo: Passos
Dias de Aguiar e Mota
PASSOS DIAS AGUIAR MOTA
(23 caracteres)
#include <stdio.h>
#include <string.h>
void eliminate_characters(char *p, int n)
/************************************\
* eliminates n chars do string
p *
\************************************/
{
do
{
p[0] = p[n];
p++;
}
while (*p != '\0');
}
void main()
{
char nome[128];
int i, mudanca;
char *p;
printf("Escreva um nome completo :");
gets(nome);
/* convert to upperscript:
*/
for (i=1; i<strlen(nome); i++)
if ((nome[i]<='z')
&& (nome[i]>='a'))
nome[i] =
nome[i]-32;
/* eliminate de, etc.: */
mudanca=1; /* houve mundancas
na ultima passagem? */
while (mudanca!=0)
{
mudanca=0;
p = strstr(nome,
" DE ");
if (p!=0)
{
p++; /* agora aponta "DE " dentro nome */
eliminate_characters(p, 3);
mudanca=1;
}
p = strstr(nome,
" DA ");
if (p!=0)
{
p++; /* agora aponta "DA " dentro nome */
eliminate_characters(p, 3);
mudanca=1;
}
}
printf("%s\n", nome);
printf("(%d caracteres)\n", strlen(nome));
}
Escreva um nome completo: olinda
barba De jesus
Olinda Barba de Jesus
#include <stdio.h>
void convert_to_uppercase(char *p)
/************************************\
* converts char *p to uppercase
*
\************************************/
{
/* exemplo, A=65, a=97, B=66,
b=98 .... */
*p = *p-32;
}
void convert_to_lowercase(char *p)
/************************************\
* converts char *p to lowercase
*
\************************************/
{
*p = *p+32;
}
void eliminate_character(char *p)
/************************************\
* eliminates 1 char do string
p *
\************************************/
{
do
{
p[0] = p[1];
p++;
}
while (*p != '\0');
}
void main()
{
char nome[128];
char *n;
int inicio; /* estamos no inicio de
uma palavra? 1=verdade */
printf("Escreva um nome completo: ");
gets(nome);
n = nome;
printf("nome: %s\n", n);
inicio = 1;
while (*n != '\0')
{
if (inicio==1)
{
inicio=0;
if ((*n>='a') && (*n<='z'))
convert_to_uppercase(n);
else
if (*n==' ')
{
eliminate_character(n);
n--;
inicio=1;
}
}
else /* inicio==0
*/
{
if (*n == ' ')
inicio=1;
if ((*n>='A') && (*n<='Z'))
convert_to_lowercase(n);
}
n++;
}
printf("corrected: %s", nome);
}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
/*----------------------var globais ----------------------*/
const int COL = 10;
const int LIN = 10;
char a[LIN][COL] = {"laranja", "uva", "pessego", "ameixa", "pera",
"cereja",
"banana", "limao", "tanjerina", "meloa"};
void ordena_array(void)
{
int k, i; int resultado;
char *s1, *s2;
for (k=0; k<LIN; k++)
/*controla ciclo de todas as passadas */
{
for (i=0; i<(LIN-k-1); i++)
{
s1 = a[i]; s2 = a[i+1];
resultado = strcmp(s1, s2);
if (resultado > 0)
/*termina nos elementos já ordenados*/
trocar(a[i], a[i+1]);
}
}
}
void trocar(char *primeiro, char *segundo)
/*troca primeiro pelo segundo*/
{
char temp[COL];
strcpy(temp, segundo);
strcpy(segundo, primeiro);
strcpy(primeiro, temp);
}
void imprime_array(char vez)
{
if (vez == '1')
printf("\n\n conteúdo do array ANTES
de ser ordenado: \n");
else
printf("\n\n conteúdo do array DEPOIS
de ser ordenado: \n");
for (int j=0; j < LIN; j++)
{
if (!(j % 4)) printf("\n");
printf("%s ", a[j]);
}
}
void main()
{
clrscr();
imprime_array('1');
ordena_array();
imprime_array('2');
getch();
}