Ir ao conteúdo

Posts recomendados

Postado

Escreva um programa em C/C++, utilizando função, que permita a leitura dos nomes de 'n' pessoas. Após isto, o programa deve permitir saber quantos sobrenomes tem essa pessoa.

A função deve retornar ao programa essa quantidade.

 

Eu não entendi.

Postado

Seu programa lê n nomes. Para cada nome chama uma função que recebe o nome e retorna o número de sobrenomes. Nada mais imagino.

 

Algo como

 

    int    n_sbn( const char* Nome);

 

que retorna 0 para "Jerry", 1 para "Jerry Lee" e 2 para "Jerry Lee Lewis"...

  • Moderador
Postado

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

 

Postado
Em 03/12/2021 às 19:43, arfneto disse:

Seu programa lê n nomes. Para cada nome chama uma função que recebe o nome e retorna o número de sobrenomes. Nada mais imagino.

 

Algo como

 

    int    n_sbn( const char* Nome);

 

que retorna 0 para "Jerry", 1 para "Jerry Lee" e 2 para "Jerry Lee Lewis"...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
char frase[50];
int i, flag=0, total=0, sobrenome;

printf("Digite seu nome completo: ");
fgets(frase,51,stdin);

for(i=0;frase[i]!='\0';i++) {
	if(!flag && frase[i]!=' ') {
		flag=1;
		total++;
	}
	else if(flag && frase[i]==' ')
		flag=0;
}
{
sobrenome = total - 1;
}
printf("Total de sobrenomes: %d\n",sobrenome);

return 0;
}

certo?

Postado
4 minutos atrás, Rebeka disse:

certo?

 

Não, nem tem a função cujo protótipo te mostrei há dias e é o objetivo do programa.

 

5 minutos atrás, Rebeka disse:
for(i=0;frase[i]!='\0';i++)

 

declare as variáveis de controle no próprio loop. Nunca escreva assim deixando uma variável com o ingenuo nome de i global na função toda. Isso é um pesadelo porque pode acabar reusando... Escreva o simples:

 

    for( int i=0;frase[i]!=0;i++)

 

Entenda que '\0' é a mesma coisa que 0. Para que usar 4 letras e ainda ficar procurando as tais apóstrofes pelo teclado?

 

8 minutos atrás, Rebeka disse:
{
sobrenome = total - 1;
}
printf("Total de sobrenomes: %d\n",sobrenome);

 

Pra que essas chaves aí? E a variável só existe para isso? Não é mais simples escrever apenas 

 

    printf("Total de sobrenomes: %d\n",total - 1);

 

já que está encerrando o programa e não vai mais usar esse valor?

 

 

Parece estar no caminho certo da função.

 

Mas evite misturar aritmética e lógica nesses comandos. É muito ruim de ler e só leva a confusão. Prefira o simples:

 

10 minutos atrás, Rebeka disse:
if( (flag == 0) && frase[i]!=' ') {
		flag = 1;
        // ...

 

 

Ou se prefere usar lógica
 

if( !flag && frase[i]!=' ') {
		flag = !flag;
        // ...

 

mas não misture as duas coisas

 

Postado

@arfneto Entendi agora.

 

Fiz isso, o cod tá meio certo, porque precisa ser "N" pessoas e me retornar os sobrenomes, acho q é isso.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
char frase[50];
int flag=0, total=0;

printf("Digite seu nome completo: ");
fgets(frase,51,stdin);

 for( int i=0;frase[i]!=0;i++) {
	if( (flag == 0) && frase[i]!=' ') {
		flag = 1;
		total++;
	}
	else if(flag && frase[i]==' ')
		flag=0;
}

printf("Total de sobrenomes: %d\n",total - 1);

return 0;
}

 

Postado
Em 03/12/2021 às 19:43, arfneto disse:

Algo como

 

    int    n_sbn( const char* Nome);

 

que retorna 0 para "Jerry", 1 para "Jerry Lee" e 2 para "Jerry Lee Lewis"...

 

Porque não escreve logo a função como te falei dias atrás? É esse seu objetivo afinal...

 

 

 

 

Postado

@arfneto Não consegui fazer assim.

 

Fiz assim:

#include<iostream>
using namespace std;
#include <stdlib.h>
#include <string.h>

int main (void)
{
char frase[50];
int flag=0, total=0;
int cont=0, pessoas;

cout<<"Quantas pessoas desejam verificar: \n";
cin>>pessoas;
	for(cont=0;cont<pessoas;cont++){
	

cout<<"Digite seu nome completo: ";
fgets(frase,51,stdin);
}

 for( int i=0;frase[i]!=0;i++) {
	if( (flag == 0) && frase[i]!=' ') {
		flag = 1;
		total++;
	}
	else if(flag && frase[i]==' ')
		flag=0;
}

printf("Total de sobrenomes: %d\n",total - 1);

return 0;
}

 

Postado
18 minutos atrás, Rebeka disse:

Não consegui fazer assim.

 

Esse é o objetivo de seu programa. Escreva a função e termine isso. O que está faltando? Porque acha que não conseguiu?

Postado

Provavelmente o mais simples:

 

  • Escreva a função como pedido.
  • Para cada uma das n pessoas
    • chame a função passando o nome
    • e recebendo o número de sobrenomes
    • e mostre na tela.

O enunciado como descreveu é vago.

 

45 minutos atrás, Rebeka disse:

Tem alguns erros ainda

Poste o código. 

Postado

.

11 horas atrás, arfneto disse:

Provavelmente o mais simples:

 

  • Escreva a função como pedido.
  • Para cada uma das n pessoas
    • chame a função passando o nome
    • e recebendo o número de sobrenomes
    • e mostre na tela.

O enunciado como descreveu é vago.

 

Poste o código. 

#include<iostream>
using namespace std;
#include <stdlib.h>
#include <string.h>

int main (void)
{
char frase[50];
int flag=0, total=0;
int cont=0, pessoas;

cout<<"Quantas pessoas desejam verificar: \n";
cin>>pessoas;
	for(cont=0;cont<pessoas;cont++){
	

cout<<"Digite seu nome completo: ";
fgets(frase,51,stdin);
}

 for( int i=0;frase[i]!=0;i++) {
	if( (flag == 0) && frase[i]!=' ') {
		flag = 1;
		total++;
	}
	else if(flag && frase[i]==' ')
		flag=0;
}

printf("Total de sobrenomes: %d\n",total - 1);

return 0;
}

 

Postado

O programa pula o primeiro elemento porque está faltando um

cin.ignore();

depois de pegar a quantidade de pessoas. Isso é problema de buffer de teclado.

 

Seu código só verifica o sobrenome do último elemento porque o trecho de verificação está fora do for.

Postado
11 horas atrás, AdrianoSiqueira disse:

O programa pula o primeiro elemento porque está faltando um

cin.ignore();

depois de pegar a quantidade de pessoas. Isso é problema de buffer de teclado.

 

Seu código só verifica o sobrenome do último elemento porque o trecho de verificação está fora do for.

como faço pra arrumar a parte do trecho de verificação?

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!