Ir para conteúdo
Fórum Script Brasil
  • 0

Programa com ponteiros


Zualdo

Pergunta

Fala galera, to com um programa pra entregar seg na facul em C++, só que to tendo problemas...

preciso fazer um programa seguindo isso...

Exercício - Ponteiros

Receber por digitação uma string de até 20 caracteres num vetor de caracteres local à função main. Em seguida, visualizar um menu com as seguintes de opções:

1 – Converter os caracteres para maiúsculos

2 – Converter os caracteres para minúsculos

3 – Criptografar as vogais

4 – Descriptografar as vogais

5 – Substituir uma letra

6 – Visualizar o vetor

7 – Receber nova string

8 – Sair do programa

Ao receber uma opção, chamar uma função específica criada para realizar a operação, a qual deverá receber como parâmetro o endereço do vetor, pois toda a alteração feita deverá ocorrer no próprio vetor.

Para a opção 5, considerar também o envio da letra a ser substituída e da que irá substituir, também, como parâmetros.

Para a operação de criptografar vogais, considerar a seguinte proposta de conversão:

a → e

e → i

i → o

o → u

u → a

Para a operação de descriptografar vogais, considerar a seguinte proposta de conversão:

a → u

e → a

i → e

o → i

u → o

Observações:

- Conversão para maiúsculas: função toupper (char) Biblioteca: <ctype.h>

- Conversão para minúsculas: função tolower (char) Biblioteca: <ctype.h>

Não to conseguindo fazer os menus 1 à 5, não consigo modificar o vetor, da erro como 'ISO C++ forbids comparison between pointer and integer'

o que eu fiz ate agora ta assim...

=-=-=-=-=-=-=-=-=-=-=-=-=-

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <ctype.h>

#include <iostream.h>

#include <stdlib.h>

typedef char string [40];

string *letras[20];

int menu1();

int menu2();

int menu3();

int menu4();

int menu5();

int menu6();

int menu7();

int menu8();

int main ()

{

int i, menu;

system ("color C");

for (i=0;i<20;i++)

{

printf ("Digite a letra na casa %d do vetor: ", i+1);

scanf ("%s", &letras);

}

do

{

printf ("\n\n\n Digite o numero desejado referente ao menu: \n");

printf ("\n 1 - Converter os caracteres para maiusculos \n");

printf (" 2 - Converter os caracteres para minusculos \n");

printf (" 3 - Criptografar as vogais \n");

printf (" 4 - Descriptografar as vogais \n");

printf (" 5 - Substituir uma letra \n");

printf (" 6 - Visualizar o vetor \n");

printf (" 7 - Receber nova string \n");

printf (" 8 - Sair do programa \n\n\n");

scanf ("%d", &menu);

if (menu == 1)

menu1 ();

if (menu == 2)

menu2 ();

if (menu == 3)

menu3 ();

if (menu == 4)

menu4 ();

if (menu == 5)

menu5 ();

if (menu == 6)

menu6 ();

if (menu == 7)

menu7 ();

}

while ((menu != 8) || (menu < 1) || (menu > 8));

printf ("Programa Encerrado");

for (i=0;i<20;i++)

getch ();

return 0;

}

int menu1 ()

{

}

int menu2 ()

{

}

int menu3 ()

{

}

int menu4 ()

{

}

int menu5 ()

{

int i;

char busc, subs;

printf ("Qual letra já existente deseja substituir?");

scanf ("%c", &busc);

printf ("Digite uma letra para substituir a letra antiga");

scanf ("%c", &subs);

for (i=0;i<20;i++)

{

if (letras == busc)

letras = subs;

}

}

int menu6 ()

{

int i;

printf ("Opcao 6 - [Visualizar o vetor]\n\n");

for (i=0;i<20;i++)

{

printf ("%s", letras);

}

printf ("\n\nVetor visualizado com sucesso!\n\n");

}

int menu7 ()

{

int i;

printf ("Opcao 7 - [Receber nova string]\n\n");

for (i=0;i<20;i++)

{

printf ("Digite a letra na casa %d do vetor: ", i+1);

scanf ("%s", &letras);

}

printf ("\nNova string recebida com sucesso!\n\n");

}

=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Se alguém puder me ajudar... ficarei eternamente grato!...

Editado por Zualdo
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bem, o enunciado do problema pede que o vetor seja uma variável local (declarada dentro da função main) e não global. Além disso, tem que haver passagem de parâmetro por referência para as funções. Se é um trabalho da facul, melhor corrigir esses problemas primeiro.

Link para o comentário
Compartilhar em outros sites

  • 0

haa cara q isso, começei a modificar as funções começou a bugar tudo.

tinha declarado void menu6 (char *letras)

num vai, tentei fazer um esquema de void menu6 (char *x, *y) -> (char x, char y) ele acusa "too few arguments to function"

cara d boa, num to entendendo...

to tentando seguir isso

 Por referência: o endereço (referência) da variável do argumento é copiado para uma variável ponteiro local do parâmetro da função. Neste caso a função pode acessar o conteúdo da variável de argumento atualizando-a se necessário.

Ex:

...

void troca ( int *x, int *y); //declaração da função

int main ( )

{ int a = 40;

int b = 20;

troca (&a, &b);

cout <<”\n Valor atual de a : “ << a;

cout <<”\n Valor atual de b : “ << b;

...

}

void troca ( int *x, int *y)

{int aux;

aux = *x; //aux recebe temporariamente o conteúdo do endereço em x

*x = *y; // no endereço contido em x é armazenado o conteúdo do

endereço de y

*y = aux; // no endereço contido em y é armazenado o conteúdo de aux

}

e seila, num quer ir...

Se mantenho as funções como menu ();

e tento puxar o vetor ele fiz q o nome do vetor (no caso letras) não foi declarado. To tentando de tudo aki mais num quer isso essa joçinha... =/

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <ctype.h>

typedef char string [40];

void menu1();

void menu2();

void menu3();

void menu4();

void menu5();

void menu6 (int *x, int *y);

void menu7 ();

void menu8();

int main ()

{

int i, menu;

string letras[20];

for (i=0;i<20;i++)

{

printf ("Digite a letra na casa %d do vetor: ", i+1);

scanf ("%s", &letras);

}

do

{

printf ("\n\n\n Digite o numero desejado referente ao menu: \n");

printf ("\n 1 - Converter os caracteres para maiusculos \n");

printf (" 2 - Converter os caracteres para minusculos \n");

printf (" 3 - Criptografar as vogais \n");

printf (" 4 - Descriptografar as vogais \n");

printf (" 5 - Substituir uma letra \n");

printf (" 6 - Visualizar o vetor \n");

printf (" 7 - Receber nova string \n");

printf (" 8 - Sair do programa \n\n\n");

scanf ("%d", &menu);

if (menu == 1)

menu1 ();

if (menu == 2)

menu2 ();

if (menu == 3)

menu3 ();

if (menu == 4)

menu4 ();

if (menu == 5)

menu5 ();

if (menu == 6)

menu6 ();

if (menu == 7)

menu7 ();

}

while ((menu != 8) || (menu < 1) || (menu > 8));

printf ("Programa Encerrado");

for (i=0;i<20;i++)

getch ();

return 0;

}

void menu1 ()

{

}

void menu2 ()

{

}

void menu3 ()

{

}

void menu4 ()

{

}

void menu5 ()

{

int i;

char busc, subs;

printf ("Qual letra já existente deseja substituir?");

scanf ("%c", &busc);

printf ("Digite uma letra para substituir a letra antiga");

scanf ("%c", &subs);

// for (i=0;i<20;i++)

// {

// if (letras == busc)

// letras = subs;

// }

}

void menu6 (char &letras)

{

int i;

printf ("Opcao 6 - [Visualizar o vetor]\n\n");

for (i=0;i<20;i++)

{

printf ("%s", &letras);

}

printf ("\n\nVetor visualizado com sucesso!\n\n");

}

void menu7 ()

{

int i;

printf ("Opcao 7 - [Receber nova string]\n\n");

for (i=0;i<20;i++)

{

printf ("Digite a letra na casa %d do vetor: ", i+1);

scanf ("%s", &letras);

}

printf ("\nNova string recebida com sucesso!\n\n");

}

ta assim, aqueles int na função foi pra testar apenas pra ver se essa msg "too few arguments to function" sumia... =()

o prob é q fazia tempo q num pegava em C... to num nó só aki =/

Editado por Zualdo
Link para o comentário
Compartilhar em outros sites

  • 0

Veja só, no protótipo da função menu6, você passa dois ponteiros de inteiros como parâmetros. Já na main, você não passa nada como parâmetro para a mesma função, e no cabeçalho da função menu6 o parâmetro é um char. Os tipos devem ser iguais senão não compila.

Link para o comentário
Compartilhar em outros sites

  • 0

sim, usei tudo do mesmo tipo, o problema é q o menu 6, da problema, como eu disse eu deixe ele com os int, so pra teste, porque se fosse pra dar erro era pra dar mais abaixo por motivos de ser tipos diferentes, mais nem declarando assim a função o negocio aceita.

Link para o comentário
Compartilhar em outros sites

  • 0
#include <iostream>

#include <stdio.h>

#include <ctype.h>

#include <conio.h>

#include <string.h>

//using namespace std;

typedef char string [20];

void menu1 (char *maius);

void menu2 (char *minus);

void menu3 (char *palavra);

void menu4 (char *palavra);

void menu5(char *palavra);

void menu6(char *palavra);

void menu7(string palavra);

int main ()

{

int i, menu;

string letras;

printf ("Digite ate 20 caracteres: ");

scanf ("%s", &letras);

do

{

printf ("\n\n\n Digite o numero desejado referente ao menu: \n");

printf ("\n 1 - Converter os caracteres para maiusculos \n");

printf (" 2 - Converter os caracteres para minusculos \n");

printf (" 3 - Criptografar as vogais \n");

printf (" 4 - Descriptografar as vogais \n");

printf (" 5 - Substituir uma letra \n");

printf (" 6 - Visualizar o vetor \n");

printf (" 7 - Receber nova string \n");

printf (" 8 - Sair do programa \n\n\n");

scanf ("%d", &menu);

if (menu == 1)

menu1 (letras);

if (menu == 2)

menu2 (letras);

if (menu == 3)

menu3 (letras);

if (menu == 4)

menu4 (letras);

if (menu == 5)

menu5 (letras);

if (menu == 6)

menu6 (letras);

if (menu == 7)

menu7 (letras);

}

while ((menu != 8) || (menu < 1) || (menu > 8));

printf ("Programa Encerrado");

getch ();

return 0;

}

void menu1 (char *maius)

{

int i, tam;

tam=strlen(maius);

for(i=0; i<20; i++)

maius = toupper(maius);

return;

}

void menu2 (char *minus)

{

int i, tam;

tam=strlen(minus);

for(i=0; i<20; i++)

minus = tolower(minus);

return;

}

void menu3 (char *palavra)

{

int i;

for(i=0; i<strlen(palavra); i++)

{

if (palavra == 'a')

palavra = 'e';

else if (palavra == 'e')

palavra = 'i';

else if (palavra == 'i')

palavra = 'o';

else if (palavra == 'o')

palavra = 'u';

else if (palavra == 'u')

palavra = 'a';

return;

}

}

void menu4 (char *palavra)

{

int i;

for(i=0; i<strlen(palavra); i++)

{

if (palavra == 'a')

palavra = 'u';

else if (palavra == 'e')

palavra = 'a';

else if (palavra == 'i')

palavra = 'e';

else if (palavra == 'o')

palavra = 'i';

else if (palavra == 'u')

palavra = 'o';

return;

}

}

void menu5(char *palavra)

{

char busc, subs;

int i;

printf ("Qual letra já existente deseja substituir?");

scanf ("%c", &busc);

printf ("\nDigite uma letra para substituir a letra antiga");

scanf ("%c", &subs);

for (i=0;i<strlen(palavra);i++)

{

if (palavra == busc)

palavra = subs;

}

}

void menu6 (string palavra)

{

printf ("Opcao 6 - [Visualizar o vetor]\n\n");

printf ("%s", palavra);

printf ("\n\nVetor visualizado com sucesso!\n\n");

}

void menu7 (string palavra)

{

printf ("Opcao 7 - [Receber nova string]\n\n");

printf ("Digite ate 20 caracteres: ");

scanf ("%s", &palavra);

printf ("\nNova string recebida com sucesso!\n\n");

}

beleza pessoal dei uam boa arrumada, só q a opção 7 num quer funcionar, alguém da uma luz?

vlw!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...