Alexandre Pizzini Postado Novembro 27, 2009 Denunciar Share Postado Novembro 27, 2009 O professor passou assim..." Criar um programa que receba uma palavra (char*) e mostre:O nome do estado quando a palavra for uma siglaoua sigla do estado quando a palavra for um nome do estadoDica:é necessario comparar a palavra com cada elemento do vetorquando encontrar igualdade mostrar o valor do outro vetor na mesma posição. "dai ele falou o jeito que começa...char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC","BA"};char* estado[10]={"são Paulo","Rio de Janeiro","Minas Gerais","Parana","Para","Sergipe","Ceara","Alagoas","Acre","Bahia"};por favor, quem conseguir fazer, me explicar o que fez...Muito Obrigado, desde já! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 28, 2009 Denunciar Share Postado Novembro 28, 2009 Percorra cada uma das siglas e cada um dos estados num loop até achar o que quer. Para comparar strings, utilize a função strncmp (note que não há diferença entre maiúsculas e minúsculas) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alexandre Pizzini Postado Novembro 28, 2009 Autor Denunciar Share Postado Novembro 28, 2009 no meu programa eu coloque isso, mas deu erro no programa já compilado, depois de digitar a sigla...#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC"," BA "}; char* estado[10]={"são Paulo","Rio de Janeiro","Minas Gerais","Parana","Para","Sergipe","Ceara","Alagoas ","Acre","Bahia"}; char* txt; int cont; printf("Digite uma sigla ou estado: "); scanf("%s",&txt); if (strcmp(txt,sigla[10])==0) //são iguais printf("%s corresponde a %s",txt,estado[10]); system("PAUSE"); return EXIT_SUCCESS; }A Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 28, 2009 Denunciar Share Postado Novembro 28, 2009 Você declarou a variável txt como um ponteiro, mas esqueceu de alocar memória para a mesma. Antes de utilizá-la você deve alocar a memória necessária. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alexandre Pizzini Postado Novembro 28, 2009 Autor Denunciar Share Postado Novembro 28, 2009 Eu mudei, mas agora quando o programa roda ele não da a mensagem, ele já da o system pause...#include <cstdlib>#include <iostream> using namespace std; int main(int argc, char *argv[]) { char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC","BA "}; char* estado[10]={"são Paulo","Rio de Janeiro","Minas Gerais","Parana","Para","Sergipe","Ceara","Alagoas ","Acre","Bahia"}; char* txt[20]; int cont; printf("Digite uma sigla ou estado: "); scanf("%s",&txt); if (strcmp(txt[20],sigla[10])==0) //são iguais printf("%s corresponde a %s",txt,estado[10]); system("PAUSE"); return EXIT_SUCCESS; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 28, 2009 Denunciar Share Postado Novembro 28, 2009 Troque:char* txt[20]; Por: char txt[20];Não que esse código seja inválido, mas no código anterior você estava criando um ponteiro para um vetor (ou seja, ponteiro para ponteiro). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alexandre Pizzini Postado Novembro 28, 2009 Autor Denunciar Share Postado Novembro 28, 2009 troquei, mas mesmo assim ele continua sem mostrar o texto no printf...#include <iostream> using namespace std; int main(int argc, char *argv[]) { char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC","BA "}; char* estado[10]={"são Paulo","Rio de Janeiro","Minas Gerais","Parana","Para","Sergipe","Ceara","Alagoas ","Acre","Bahia"}; char txt[20]; int cont; printf("Digite uma sigla ou estado: "); scanf("%s",&txt); if (strcmp(txt,sigla[10])==0) //são iguais printf("%s corresponde a %s",txt,estado[10]); system("PAUSE"); return EXIT_SUCCESS; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Novembro 28, 2009 Denunciar Share Postado Novembro 28, 2009 Em vez de strcmp utilize strncmp neste caso. Mas nessa função você não está percorrendo os estados e siglas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RSalvador Postado Novembro 30, 2009 Denunciar Share Postado Novembro 30, 2009 (editado) Olá AlexandreO erro está na lógica do seu programa. Veja que, após pedir a sigla ou nome, ele executa este comando:if (strcmp(txt,sigla[10])==0) //são iguais printf("%s corresponde a %s",txt,estado[10]);Ou seja, ele compara a entrada com o valor de sigla[10], que, no caso, é "BA". Experimente rodar o programa da forma como está digitando "BA" como entrada.Como sugestão, adicione um laço for envolvendo o if, para percorrer todo o vetor de siglas. Lembre de verificar também o vetor de nomes.Abraço! Editado Novembro 30, 2009 por RSalvador Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alexandre Pizzini Postado Novembro 30, 2009 Autor Denunciar Share Postado Novembro 30, 2009 Eu dei uma arrumada, ele da certo, mas depois que ele da o resultado, logo em seguida ele da erro. Ele fala que o programa precisa ser fechado. Por favor me ajudem...Se alguém conseguir fazer o programa de outra forma, por favor poste para mim.Ai esta o programa:#include <iostream> using namespace std; int main(int argc, char *argv[]) { char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC","BA "}; char* estado[10]={"são Paulo","Rio de Janeiro","Minas Gerais","Parana","Para","Sergipe","Ceara","Alagoas ","Acre","Bahia"}; char txt[14]; int cont; printf("Digite uma sigla ou estado: "); gets(txt); for(cont=0;cont<=10;cont++) { if (strcmp(txt,sigla[cont])==0) //são iguais printf("%s corresponde a %s",txt,estado[cont]); else if (strcmp(txt,estado[cont])==0) printf("%s corresponde a %s",txt,sigla[cont]); } system("PAUSE"); return EXIT_SUCCESS; }A...E quando eu digito algum estado com mais de duas palavras, tipo são paulo, rio de janeiro, minas gerais, ele da erro e nem mostra o resultado... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alexandre Pizzini Postado Dezembro 1, 2009 Autor Denunciar Share Postado Dezembro 1, 2009 Consegui arrumar... só que tem mais um problema...eu fiz uma repetição no programa para se a pessoa queira fazer denovo...só que quando você digita 's', o programa volta no começo, porem com o cursor na pergunta de novo...alguém pode me ajudar?olha como ficou:#include <iostream> #include <conio.c> using namespace std; int main(int argc, char *argv[]) { char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC","BA "}; char* estado[10]={"são PAULO","RIO DE JANEIRO","MINAS GERAIS","PARANA","PARA","SERGIPE","CEARA","ALAGOAS ","ACRE","BAHIA"}; char txt[14],p; int cont; do { system("cls"); gotoxy(20,1);printf(" ***Sigla / Estado*** "); gotoxy(15,3);printf("Digite uma sigla ou estado (EM MAIUSCULA) : "); gets(txt); for(cont=0;cont<10;cont++) { if (strcmp(txt,sigla[cont])==0) //são iguais { gotoxy(15,4);printf("%s corresponde a %s",txt,estado[cont]); } else if (strcmp(txt,estado[cont])==0) { gotoxy(15,4);printf("%s corresponde a %s",txt,sigla[cont]); } } do { gotoxy(15,6);printf("Deseja continuar? (s/n): "); scanf("%c",&p); }while(p!='s' && p!='n'); }while(p=='s'); return EXIT_SUCCESS; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RSalvador Postado Dezembro 1, 2009 Denunciar Share Postado Dezembro 1, 2009 Olá AlexandreO programa não deveria voltar na pergunta? Aonde você gostaria que ele voltasse? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alexandre Pizzini Postado Dezembro 1, 2009 Autor Denunciar Share Postado Dezembro 1, 2009 Já conseguir resolver isso, usei o flush(stdin) antes de pegar a varivale txt...Mas, eu só queria saber uma coisa...tem como quando receber a variavel txt, o programa leia o que o usuario digitou e passar para o programa em letra maiuscula?Porque assim, eu declarei a variavel sigla com as siglas em maiusculas, só que se o usuario digita em minuscula, ele não vai dar certo.Obrigado desde já. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Alexandre Pizzini
O professor passou assim...
" Criar um programa que receba uma palavra (char*) e mostre:
O nome do estado quando a palavra for uma sigla
ou
a sigla do estado quando a palavra for um nome do estado
Dica:
é necessario comparar a palavra com cada elemento do vetor
quando encontrar igualdade mostrar o valor do outro vetor na mesma posição. "
dai ele falou o jeito que começa...
char* sigla[10]={"SP","RJ","MG","PR","PA","SE","CE","AL","AC","BA"};
char* estado[10]={"são Paulo","Rio de Janeiro","Minas Gerais","Parana","Para","Sergipe","Ceara","Alagoas","Acre","Bahia"};
por favor, quem conseguir fazer, me explicar o que fez...
Muito Obrigado, desde já!
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
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.