Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado
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
Postado

@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 1
Postado
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
Postado

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

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?

 

 

  • Curtir 1
Postado
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
Postado

?

 

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
Postado

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
Postado

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

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
Postado

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

Postado

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

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!