Ir ao conteúdo
  • Cadastre-se

C++ Preciso resolver esta questão...


Posts recomendados

Boa noite galera!

 

Preciso de ajuda para resolver a questão a seguir:

 

Vamos fazer um programa para manipular um vetor de nomes?

·         Vamos trabalhar com vetores de strings.

·         Faça um vetor com pelo menos 5 elementos para testar seu programa. Vamos chamar seu vetor de V.

A) Faça uma rotina para inserir elementos no vetor V. Você precisa encontrar um jeito de colocar nome e sobrenome na mesma string (ou seja, strings contendo espaços).

B) Faça uma rotina para listar o vetor V, um elemento por linha.

C) Faça uma função para mostrar todos os nomes que não contenham sobrenome.

D) Faça uma função para mostrar o nome mais comprido armazenado no vetor V.

E) Faça uma rotina para contar o número de nomes iniciados com uma letra escolhida pelo usuário dentro do vetor V. Aproveite para mostrar esses nomes.

F) Faça uma rotina para ordenar o vetor V.

G) No main, faça um menu com as opções das questões acima.

  • Obrigado 1
  • Triste 1
Link para o comentário
Compartilhar em outros sites

@Sullivan Clécio Do Canto    muita coisa para fazer , então vá fazendo uma função de cada vez e teste até que esteja funcionando adequadamente ,  só então passe para outra ,   se você  for fazer o código em c++ mesmo , então comece criando o vetor v , e faça o menu dentro da função main , e para fazer a primeira função , inserir no vetor , use uma variável do tipo string e o comando getline(cin, nome_da_variavel) ; para pegar nomes compostos ,  então faça seu código e poste aqui pra que possamo ajudar  .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

42 minutos atrás, vangodp disse:

vetor de nomes por acaso não será uma matriz?

 

 

Vetor de nomes....

adicionado 5 minutos depois
40 minutos atrás, devair1010 disse:

@Sullivan Clécio Do Canto    muita coisa para fazer , então vá fazendo uma função de cada vez e teste até que esteja funcionando adequadamente ,  só então passe para outra ,   se você  for fazer o código em c++ mesmo , então comece criando o vetor v , e faça o menu dentro da função main , e para fazer a primeira função , inserir no vetor , use uma variável do tipo string e o comando getline(cin, nome_da_variavel) ; para pegar nomes compostos ,  então faça seu código e poste aqui pra que possamo ajudar  .

Oi, isso foi o que consegui fazer ate agora:

 

 

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

     int main()
{    
      int i, v[5];     //captura os elementos 
      char n1[30], n2 [30], n3 [30], n4 [30], n5 [30]; //captura palavras
      printf("\nInforme o 1 nome: ");
      gets(n1);
      printf("\nInforme o 2 nome: ");
      gets(n2);
      printf("\nInforme o 3 nome: ");
      gets(n3);
      printf("\nInforme o 4 nome: ");
      gets(n4);
      printf("\nInforme o 5 nome: ");
      gets(n5);
 
    return 0; 

adicionado 8 minutos depois
9 minutos atrás, Sullivan Clécio Do Canto disse:

 

A letra C, D e E do exercício não faço nem ideia de como fazer... também não sei se o que já fiz esta certo???

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Sullivan Clécio Do Canto   está bom , mas primeiro faça o menu .

que poderia ser assim   :

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <iomanip>
#include <cstring>
#include <iostream>
#define cls system("cls");
using namespace std;
void inserir(char v[][30]);
int main(){
    int i;
    char v[5][30],op;     //captura os elementos
    // o Mrnu
    do{
        cls
        cout<<"  A - inserir"<<endl;
        cout<<"  B - Listar"<<endl;
        cout<<"  C - Mostrar Nome Sem Sobrenome"<<endl;
        cout<<"  D - Nome mais comprido"<<endl;
        cout<<"  E - Contar Nomes com inicial"<<endl;
        cout<<"  F - Ordem Alfabética"<<endl;
        cout<<"  S - Sair Do Programa"<<endl;
        cin>>op;
        cout<<endl;
        op=toupper(op);
        switch( op ){
        case 'A':
            inserir(v);
            break;
        case 'B':
            break;
        case 'C':
            break;
        case 'D':
            break;
        case 'E':
            break;
        case 'F':
            break;
        default:
            break;
    }
    }while( op != 'S' );
    return 0;
}
void inserir(char v[][30]){
    int j;
    for(j=0; j<5; j++){
        cout<<j+1<<(char)167<<" Nome ";
        fflush(stdin);
        fgets(v[j],29,stdin);
    }
}

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

12 horas atrás, devair1010 disse:

Obrigado, sei que agora tenho que criar os comandos para cada item do menu... não sei como fazer, irei rever umas vídeos aulas e tentar fazer, porém tenho que entregar ate amanha, se você poder me ajudar, agradeço.

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

16 horas atrás, Sullivan Clécio Do Canto disse:

Vamos trabalhar com vetores de strings.

·         Faça um vetor com pelo menos 5 elementos para testar seu programa. Vamos chamar seu vetor de V

 

Porque não o simples?

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<string> Vetor =
    { "Nome 1", "Nome 2", "Nome 3", "Nome 4", "Nome 5" };
    for (auto nome : Vetor) cout << nome << endl;
};  // main()

Que mostra

Nome 1
Nome 2
Nome 3
Nome 4
Nome 5

E a partir daí criar as funções?

adicionado 7 minutos depois
16 horas atrás, Sullivan Clécio Do Canto disse:

C) Faça uma função para mostrar todos os nomes que não contenham sobrenome.

D) Faça uma função para mostrar o nome mais comprido armazenado no vetor V.

E) Faça uma rotina para contar o número de nomes iniciados com uma letra escolhida pelo usuário dentro do vetor

 

sobre essas

  • o que determina um sobrenome é um espaço. Apenas varrendo o vetor --- um loop --- mostre os caras que tem não tem um espaço no meio da string. No começo ou no fim não faz diferença certo?
  • cada string tem um tamanho, dado por nome.length() para a string nome. Apenas varrendo o vetor --- um loop --- salve a que tem o maior comprimento. tipo
string maior_nome;
  • A inicial é... a primeira letra: nome[0]. Um char. Apenas compare em um único loop com a inicial procurada.

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Agora depois do ☕

 

Esqueci de postar esse link Onde tem os métodos da classe string

 

Veja os métodos:

 

image.png.0f3e7efbffbac8fd90bf6495a689d3cb.png

Gente boa quem escreveu isso. Não é que tem find_first_of() pra dizer por exemplo onde está a primeira letra ou o primeiro espaço? E find_last_of() pra dizer onde está o último espaço ou letra? E tem o contrário também, pra dizer se tem um espaço entre a primeira e a última letra? find_first_not_of() ?

 

image.png.9415c38defd46cb0585128967b391fa1.png

 

E tem esse que devolve o tamanho: nome.length()

image.png.aaeed4e14c98e8c403f0a0968207a2b7.png

E tem esse que devolve a letra numa certa posição... nome.at(0);

 

É tudo de que precisa.

 

Não há nada demais em ler a documentação. Mesmo os profissionais sempre começam por isso. Ver a documentação da classe para saber o que tem lá que dá para usar...

 

Você tem um livro-texto? Um manual? http://www.cplusplus.com/reference/ é seu amigo! E https://docs.microsoft.com/pt-br/cpp/cpp/c-cpp-language-and-standard-libraries?view=vs-2019 também. 

 

 

adicionado 1 minuto depois

Entendeu como usar isso para resolver os desafiadores ítens C D e E? Se não entendeu escreva de novo!

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Sullivan Clécio Do Canto disse:

 

Entendeu o que eu mostrei?

 

adicionado 2 minutos depois

A inicial e o tamanho são só uma linha cada. O lance do sobrenome é mais chato, mas não pelo C ou C++.

Tem umas pegadinhas, porque pode ter espaços antes ou depois tipo  "              NOME               " então precisa uasr as funções que te mostrei. Ou claro escrever outras.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, arfneto disse:

Entendeu o que eu mostrei?

 

adicionado 2 minutos depois

A inicial e o tamanho são só uma linha cada. O lance do sobrenome é mais chato, mas não pelo C ou C++.

Tem umas pegadinhas, porque pode ter espaços antes ou depois tipo  "              NOME               " então precisa uasr as funções que te mostrei. Ou claro escrever outras.

Não consigo fazer mesmo, tentei o que todos me disseram, revi as vídeos aulas e não consigo e tenho que entregar ate amanha senão vou reprovar... se fosse com "int" seria bem mais fácil, agora com "strings' não tem jeito....

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, arfneto disse:

Bem, não estou falando do que todos te disseram. 

 

Falo do que eu disse há pouco. Te mostrei as 5 funções de que precisa. Acha que mesmo assim não consegue resolver?

 

Rodou o programa que mostrei ontem?

 

 

rodei e não funcionou no devC++

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

?

 

Não sei o que dizer. é só C++ e tem 5 linhas. É de fato C++ que você usa certo? 

Porque não respondeu ontem falando do "erro"?

 

Parece que todo mundo usa isso aqui no forum, mas é uma escolha infeliz. Esse não é um bom IDE para escrever programas. Você não disse o que deu errado então fica difícil, mas num programa de 5 linhas imagino que o medieval Code::blocks está em falta da opção de compilação -std=c++11 e sim, esse 11 é de 2011...

 

Acrescente isso e veja se roda. Vou te mostrar um programa que testa os tais itens C D e E. Vou copiar aqui. Mas teste isso agora ou não vai adiantar nada.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu tinha me prometido não instalar nada nessas máquinas aqui, mas trata-se de uma época estranha...
 

image.png.4846b9cd1a2f4b701cacdd690f2d524b.png

 

Settings | Compiler

 

Que tipo de professor não ensinou vocês a configurar uma versão de menos de 20 anos para compilar os programas?

adicionado 6 minutos depois

Esses são os casos que precisa resolver, pensando ANTES. Os valores do vetor estão entre aspas claro

 

 1       ""

Em branco vai dar m#$%a porque vai cancelar seu programa se tentar acessar a inicial

 

2        "Nome 1"

caso simples: nome e sobrenome

 

3        "XomeNome2"

caso simples sem sobrenome

 

4        " Nome3 "

pegadinha. Espacos antes e depois. Vai zoar a inicial e nao tem sobrenome

 

5       "Aome 4 xxxxxxxxxxxxxxxx"

caso simples

 

6        "No"

muito curto: nao cabe nome e sobrenome com menos de 3 letras


 7       "Nome Sobrenome"

normalzinho

 

8        "       "

nome em branco so pra ferrar 
 

adicionado 10 minutos depois

Veja esse resultado

 

Nome vazio: ai nao adianta! ...


    Inicial: 'N'
 012345678901234567890123456789 pra ajudar :)
'Nome 1'
    Tamanho: 6
    Tem sobrenome e comeca depois da posicao 4


    Inicial: 'X'
 012345678901234567890123456789 pra ajudar :)
'XomeNome2'
    Tamanho: 9
    Sem espacos ==> sem sobrenome...


    Inicial: 'N'
 012345678901234567890123456789 pra ajudar :)
' Nome3 '
    Tamanho: 7
    Tem espacos mas estão no final...


    Inicial: 'A'
 012345678901234567890123456789 pra ajudar :)
'Aome 4 xxxxxxxxxxxxxxxx'
    Tamanho: 23
    Tem sobrenome e comeca depois da posicao 4


    Inicial: 'N'
 012345678901234567890123456789 pra ajudar :)
'No'
    Tamanho: 2
    Nome muito curto para ter um sobrenome


    Inicial: 'N'
 012345678901234567890123456789 pra ajudar :)
'Nome Sobrenome'
    Tamanho: 14
    Tem sobrenome e comeca depois da posicao 4
    Sem inicial, nome em branco...
 012345678901234567890123456789 pra ajudar :)
'       '
    Tamanho: 7
    Nome em branco...

Desse programa

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int primeira_letra = 0;
    int ultima_letra = 0;
    int espaco_interno = 0;

    vector<string> Vetor = {
        "",
        "Nome 1",
        "XomeNome2",
        " Nome3 ", 
        "Aome 4 xxxxxxxxxxxxxxxx",
        "No",
        "Nome Sobrenome",
        "       "
    };
    for (auto nome : Vetor)
    {
        int tamanho = nome.length();
        if (nome.length() == 0)
        {
            cout << "Nome vazio: ai nao adianta! ..." << endl;
            continue; // tenta outro
        };  // if()

        primeira_letra = nome.find_first_not_of(' ', 0);
        if (primeira_letra != string::npos)
        {
            const char& inicial = nome.at(primeira_letra);
            // Inicial: 'N'
            cout << "\n\n    Inicial: '" << inicial << "'" << endl;
        }
        else
        {
            cout << "    Sem inicial, nome em branco..." << endl;
        }// if();

        // gabarito com as colunas
        cout << " 012345678901234567890123456789 pra ajudar :)" << endl;
        // 'nome'
        cout << "'" << nome << "'" << endl;
        // Tamanho: n
        cout << "    Tamanho: " << tamanho << endl;
        // tem sobrenome?
        // para ter um sobrenome tem que ter ao menos 3 letras "A B"
        if (nome.length() < 3)
        {
            cout << "    Nome muito curto para ter um sobrenome" << endl;
            continue; // tenta outro
        };  // if()
        // entao se tiver um espaco ao menos entre o primeiro nao espaco
        // e o ultimo nao-espaco tem um sobrenome
        primeira_letra = nome.find_first_not_of(' ',0);
        // claro que so tem espacos nao tem sobrenome
        if (primeira_letra == string::npos)
        {
            cout << "    Nome em branco..." << endl;
            continue; // tenta outro
        }   // if();
        // entao tem ao menos uma letra. A partir dessa procura
        // a ultima letra
        int ultima_letra = nome.find_last_not_of(' ');
        if (ultima_letra == string::npos)
        {
            cout << "    Sem mais letras a partir da primeira..." << endl;
            continue; // tenta outro
        }   // if();
        // se chegou aqui entao tem um sobrenome se tiver um espaco
        // entre a primeira e a ultima letra
        int espaco_interno = nome.find_first_of(' ', primeira_letra + 1);
        if (espaco_interno == string::npos)
        {
            cout << "    Sem espacos ==> sem sobrenome..." << endl;
            continue; // tenta outro
        }   // if();
        // tem um espaco a partir da primeira letra. Se for depois da
        // ultima letra nao adianta. Tipo "NomeSobrenome    "
        if (espaco_interno > ultima_letra)
        {
            cout << "    Tem espacos mas estão no final..." << endl;
            continue; // tenta outro
        };
        cout << "    Tem sobrenome e comeca depois da posicao " <<
            espaco_interno << endl;
    };  // for()
};  // main()

Faz o que você precisa e tem MUITOS comentários caso a caso. Acha que consegue incluir em seu programa? é só isso. 

Conseguiu mudar aquela opção no seu IDE? Que versão você usa?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

EAD, a distância não é fácil de aprender... não sei nem onde procurar e instalar o que você está pedindo...

Se você quiser me ajudar e fazer o exercício pra mim eu agradeço muito...

adicionado 11 minutos depois
18 horas atrás, devair1010 disse:

Até aqui está perfeito, mas daqui em diante não consigo desenvolver mais nada...

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Sullivan Clécio Do Canto disse:

EAD, a distância não é fácil de aprender... não sei nem onde procurar e instalar o que você está pedindo...

Se você quiser me ajudar e fazer o exercício pra mim eu agradeço muito...

 

Estou tentando te ensinar. Também é EAD.

 

Se você usa esse Code::Blocks apenas use o mouse e vá em Settings depois Compiler e vai abrir a janela que eu te mostrei, onde você vai na linha em que eu mostrei em amarelo e clica no quadradinho. Depois clique em OK. Eu instalei agora a versão 17.12 mas pode ser qualquer uma do IDE depois de 2011 

 

 

image.png.248ce0f2be88ff33b138268d55ac4966.png

 

O programa que te mostrei resolve os tais casos. E funciona perfeitamente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

22 minutos atrás, Sullivan Clécio Do Canto disse:

uso o dev-c++5.11

 

Entendi. Apenas ache o equivalente lá então. Não sei onde li Code::Blocks. Desculpe.

 

Esse não dá pra eu instalar. Mas vá em Tools depois Compiler Options depois Compiler e vai ter uma opção parecida, tipo "Add the following commands when calling the compiler" e lá você acrescenta o que eu te falei:

-std=c++11

 e confirme.

 

 

 

Avise se rodou

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Sim funcionou e rodou, mas não sei colocar isso em meu programa:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <iomanip>
#include <cstring>
#include <iostream>
#define cls system("cls");
using namespace std;
void inserir(char v[][30]);
int main(){
    int i;
    char v[5][30],op;     //captura os elementos
    // o Mrnu
    do{
        cls
        cout<<"  A - inserir"<<endl;
        cout<<"  B - Listar"<<endl;
        cout<<"  C - Mostrar Nome Sobrenome"<<endl;
        cout<<"  D - Nome mais comprido"<<endl;
        cout<<"  E - Contar Nomes com inicial"<<endl;
        cout<<"  F - Ordem Alfabetica"<<endl;
        cout<<"  S - Sair do Programa"<<endl;
        cin>>op;
        cout<<endl;
        op=toupper(op);
        switch( op ){
        case 'A':
            inserir(v);
            break;
        case 'B':
            break;
        case 'C':
            break;
        case 'D':
            break;
        case 'E':
            break;
        case 'F':
            break;
        default:
            break;
    }
    }while( op != 'S' );
    return 0;
}
void inserir(char v[][30]){
    int j;
    for(j=0; j<5; j++){
        cout<<j+1<<(char)167<<" Nome ";
        fflush(stdin);
        fgets(v[j],29,stdin);
    }
}

 

Falta Resolver C,D,E, como fazer para incluir dentro dos menus e como fazer os parâmetros?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Sullivan Clécio Do Canto     um código bem complicado de fazer , e para quem tem pouca experiência , mais ainda ,  eu precisaria um mês para fazer , e se te pediram para fazer com pouco tempo é por que querem ver o que você consegue fazer sob pressão , então faça do jeito que você aprendeu ,  e do melhor modo que conseguir ,  pois não podemos te dar um código pronto , pois é contra as regras do fórum  . 

Link para o comentário
Compartilhar em outros sites

Você poderia recortar e colar o que te mostrei nas funções. Lá tem quase tudo. Veja uns protótipos que pode usar, já com as letras do enunciado pra facilitar:

 

// uma lista com funcoes como as pedidas

void        A_inserir_no_vetor(const string str, vector<string>* vetor);
void        B_listar_o_vetor(vector<string>* vetor);
void        C_lista_sem_sobrenome(vector<string>* vetor);
string      D_nome_mais_comprido(vector<string>* vetor);
int         E_total_com_inicial(char letra, vector<string>* vetor);
void        F_ordenar_vetor(vector<string>* vetor);

bool        sem_sobrenome(string nome);

Algumas notas:

  • A
        string nova = "teste um";
        A_inserir_no_vetor(nova, &Vetor);
        nova = "Teste DOIS";
        A_inserir_no_vetor(nova, &Vetor);

    já estaria bem. Você lê uma linha a partir do teclado e chama a função com o valor que o cara digitou. Não precisa inventar nada. 

     

  • B
    listar eu ja te mostrei. nada especial. Chama direto a partir do menu, já que não tem parâmetros
     

  • C
    Imagine uma função auxiliar chamada sem_sobrenome(nome) que retorna true se a string nome não tem sobrenome, Criada apenas copiando o código comentado que te mostrei. Então você copia ocódigo do item B mas só lista se a tal função retornar true para o nome. Também sai direto do menu
     

  • D
    A função retorna simplesmente o que foi pedido: uma string com o nome mais comprido.  Não tem nenhum parâmetro de entrada então é só chamar direto do menu
     

  • E
    Nesse caso você tem que ler a letra. Só isso. E chamar a função direto, tipo
     

        letra = 'A';
        cout << E_total_com_inicial(letra, &Vetor) <<
            " nomes iniciam com '" << letra << endl;
  • F

    Essa não tem qualquer parêmetro, mas precisa chamar a opção B de novo ou ninguém vai acreditar em você
        F_ordenar_vetor(&Vetor);
        B_listar_o_vetor(&Vetor);

    Só isso. O código da tal função acho que nem tem problema em mostrar:
     

    void        F_ordenar_vetor(vector<string>* vetor)
    {
        sort(vetor->begin(), vetor->end());
        return;
    };




     

 

adicionado 0 minutos depois
53 minutos atrás, Sullivan Clécio Do Canto disse:

Falta Resolver C,D,E, como fazer para incluir dentro dos menus e como fazer os parâmetros?


Veja as notas que escrevi item a item

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

58 minutos atrás, Sullivan Clécio Do Canto disse:

        cout<<"  A - inserir"<<endl;
        cout<<"  B - Listar"<<endl;
        cout<<"  C - Mostrar Nome Sobrenome"<<endl;
        cout<<"  D - Nome mais comprido"<<endl;
        cout<<"  E - Contar Nomes com inicial"<<endl;
        cout<<"  F - Ordem Alfabetica"<<endl;
        cout<<"  S - Sair do Programa"<<endl;
        cin>>op;
        cout<<endl;
        op=toupper(op);
        switch( op ){
        case 'A':
            inserir(v);
            break;
        case 'B':
            break;
        case 'C':
            break;
        case 'D':
            break;
        case 'E':
            break;
        case 'F':
            break;

 

Como passou a opção C de
 

22 horas atrás, Sullivan Clécio Do Canto disse:

C) Faça uma função para mostrar todos os nomes que não contenham sobrenome

 
Para

 cout<<"  C - Mostrar Nome Sobrenome"<<endl

?

 

Você só vai inserir o código nos lugares certos. As funções estão todas funcionando. Por exemplo

       case 'B':
           B_listar_o_vetor(&Vetor);
            break;
        case 'C':
           C_lista_sem_sobrenome(&Vetor);
            break;
        case 'D':
           cout << "Nome mais comprido: " << D_nome_mais_comprido(&Vetor) << endl;
            break;
        case 'E':
           letra = 'A'; // exemplo. voce vai ler a tal letra
           cout << E_total_com_inicial(letra, &Vetor) <<
               " nomes iniciam com '" << letra << endl;
            break;
        case 'F':
            F_ordenar_vetor(&Vetor);
            B_listar_o_vetor(&Vetor);
            break;

E assim por diante

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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...