-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
@Mauro Britivaldo.... entendi! Acho que entendi também o que ocorreu com @Leoveira.. Vi aqui, acho que foi apenas que ele tirou o [] lá da assinatura. Ou seja, deixou assim: float suavizacao(float vetor) { Ai deixou de ser vetor!!! e dá o erro: [Error] invalid types 'float[int]' for array subscript Talvez eu tenho me expressado errado na outra postagem, ou seja, só a parte da invocação que tem que tirar o []. RESUMINDO: ou deixa assim: float suavizacao(float vetor[tam]) { ou como como você tinha sugerido, assim: float suavizacao(float vetor[]) { Para invocar fica igual: suavizacao(valores); Ou seja, a falha do: Foi que "declarou o método para receber um vetor (que estava certo), mas na olha de usar a função, passou apenas uma posição... tem que passa o vetor completo (sem [] lá dentro do main()) Correto?
-
Olá. Hum!.. antes de seguir essa orientação do @Mauro Britivaldo, por favor, poste o seu código completo para servi de base.. entender o que foi que aconteceu... Depois, segue a orientação e também posta o código corrigido, ok? No aguardo.
-
Olá @Leoveira. Vamos lá: Assinatura do método: Como está invocando: Ou seja, o método quer um "vetor inteiro", mas você está passando uma posição específica de um vetor. Na assinatura, o valor dentro do [] refere-se ao tamanho (lá está "criando um vetor"), já ao invocar, o valor dentro do [] refere-se à posição (está "acessando uma posição"). RESUMINDO: Não precisa do [], passe o vetor em si. Algo como: suavizacao(valores); ou seja, "o método deve receber aquilo que ele pediu". No aguardo. adicionado 20 minutos depois ADENDOS: 1) INDENTAÇÃO Recomendo se atentar a indentação. É de suma importância... pelo menos aqui no fórum ele está um pouco "bagunçado". Veja um exemplo de como poderia ficar: #include<iostream> #define tam 10 using namespace std; float suavizacao(float vetor[tam]) { int cont; float media=0; for (cont=0;cont<tam;cont++) { if (cont ==0) { media=(vetor[cont]+vetor[cont+1])/2; cout << "\nPosicao no vetor: " << cont << ", suavizacao: " << media; media=0; } else if (cont ==9) { media=(vetor[cont]+vetor[cont-1])/2; cout << "\nPosicao no vetor: " << cont << ", suavizacao: " << media; media=0; } else { media=(vetor[cont-1]+vetor[cont]+vetor[cont+1])/3; cout << "\nPosicao no vetor: " << cont << ", suavizacao: " << media; media=0; } } return 0; } int main() { float valores[tam], teste; int cont; cout << "\n\t Suavizacao de vetor\n"; cout << "\nDigite dez valores: "; for(cont=0;cont<tam;cont++){ cin >> valores[cont]; } suavizacao(valores); } Compare um com o outro... veja como um código indentado já deixa uma boa noção da estrutura do algoritmo. 2) REPETIÇÃO DE CÓDIGO Observe que a impressão na tela utiliza o mesmo "comando": cout << "\nPosicao no vetor: " << cont << ", suavizacao: " << media; ou seja, só precisa ser declarado uma vez... basta colocar ali após o segundo else. Assim como o media=0; também está repetido. 3) (RE)INICIAÇÃO DE VARIÁVEL Teoricamente a instrução: media=0; dentro do if (ou se acatar a sugestão do item 2, após o else) não é necessária. Pois é uma variável que "apenas" recebe um valor, ou seja, o valor atual dele não é utilizado no processo... logo, não precisa zera. obs.: veja que nem lá na declaração precisaria inicializar... pois não importa seu valor atual... ela vai "apenas" receber um valor externo.. mas lá pode deixar, acho que fica mais visível a "não necessidade" lá dentro do for. Veja por exemplo que você não inicializou o vetor, apenas "atribui" valores a ele e pronto.. não importa o valor que estava lá antes... não é necessário inicializar. 4) VARIÁVEIS DESNECESSÁRIAS A variável teste não está sendo utilizada. *** No aguardo
-
Olá @Code guy. Resolveu como? por favor, poste a sua solução para assim poder servi de base para outros usuários. No aguardo.
-
Complementando: Se está trabalhando com "médias", o vetor não pode ser inteiro, pois a divisão de inteiros resultam em um número real (é uma propriedade matemática), ou seja, poderia usar float ou double (ou algo do tipo, não sei a diferença.. mas o que não pode é ser int). A não ser que o enunciado exija uma "aproximação" para "zero casas decimais"... ai o resultado seria um inteiro mesmo. Seria mais ou menos assim: A/B=C Se: A=inteiro B=inteiro Então: C=real Ex. 1: 10/4=2.5 Ex. 2: 12/3=4 (veja, esse "4" também é real... lembrando que os inteiros estão contidos no reais, já o oposto não) Logo, a "variável" tem que "suportar" toda a possibilidade que a média pode resultar... Outra coisa... não necessariamente os dados de entrada são apenas inteiros, ou seja, o usuário em si já poderia inserir dados do tipo "real". O resultado da média continuaria como real mesmo. No aguardo.
-
C Não estou conseguindo retirar os 0 de uma frase
Simon Viegas respondeu ao tópico de diogo moura em C/C#/C++
Olá a todos. Apenas uma dica: para facilitar os testes, é possível copiar a entrada de dados e colar no console (pelo menos aqui no Dev++ funciona), ex.: Clica com o botão direito do mouse na "barra de título" da janela. Vai em "Editar/Colar". Entrada utilizada: 7 RA000000000000000001 RA000000000000000100 RA000000000000012345 RA123456789012345678 ra000000000000000333 RA12345 12345678901234567890 obs.: deixem uma linha em branco na última linha, para servir como o "ENTER" da última linha (caso contrário, após colar vai ficar faltando mais um ENTER) -
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
@Ruben Timoteo 1) Para postar um código, favor utilizar a tag CODE. Basta pressionar o botão <>. OK? 2) Pode fazer o que? O que o código acima deveria fazer? está fazendo o que você quis? adicionado 30 minutos depois @Ruben Timoteo, para adiantar, vou responder a sua dúvida: Então, ESTAMOS TRATANDO DA MANUTENÇÃO DAS MOEDAS, isso não tem nada a ver!!! Esqueça isso!!! Cadê o foco? O que está sendo proposto é a atualização das moedas!!! Tem que resolver o que você quer fazer... ou ver essa parte, ou ver as moedas... você que decide. No aguardo. -
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Estranho... só se alterou alguma coisa por engano. Tome esse código como base: #include<stdio.h> #include<iostream> #include<stdlib.h> #include<math.h> #include <conio.h> #include <string.h> //extern char resp[ ]="400855"; tem algum motivo para ser "extern"??? char resp[ ]="400855"; char rl[40]; //int ModoMan(int moe,int cenas) void verificarSenha() { gets(rl); while(strcmp(rl,resp) !=0) { puts("Palavra pass Errada Tente de Novo."); gets(rl); } puts("Correto!"); } main() { float combeb[5]={1,1.10,1.20,1,0.50}; int indice,moe,cenas,i; float saldo = 0; int moeda,creditos; int stock[6]={5,5,5,5,5,5}; float valor[6] = {0.05,0.10,0.20,0.50,1,2}; int caso = 1; int TROCO[6]; float troco; int cont; int custo=0; int quantidade; system("color 0B"); printf("%c",201); for(i=0;i<30;i++) printf("%c",205); printf("%c\n",187); printf("%c",204); for(i=0;i<30;i++) printf("%c",205); printf("%c\n",185); while(caso) { system("cls"); printf("\nSaldo Atual: %.2f Euros\n\n",saldo); printf("ESCOLHA A OPCAO:\n\n",186,186); printf("0 - Sair\n",186,186); printf("1 - Depositar Moeda\n",186,135,198,186); printf("2 - Escolher bebidas\n",186,135,198,186); printf("3 - Modo Admistrador\n",186,198,186); printf("\nOPCAO:",186,186); scanf("%i", &caso); switch(caso) { case 1: { system("cls"); printf("\n\nDeposite a sua moeda\n\n"); printf("1 - 0.05 Euros\n"); printf("2 - 0.10 Euros\n"); printf("3 - 0.20 Euros\n"); printf("4 - 0.50 Euros\n"); printf("5 - 1.00 Euro \n"); printf("6 - 2.00 Euros\n\n"); printf("MOEDA:"); scanf("%i",&moeda); if ((moeda>=1) && (moeda<=6)) { //delimita a faixa de códigos válidos saldo = saldo + valor[moeda-1]; } else { printf("MOEDA INVÁLIDA - Favor recolher na bandeja de 'troco'"); getch(); } break; } case 2: { indice = -1; while (indice!=0) { system("cls"); printf("\n\nEscolha a bebida que deseja \n"); printf("0 - Para Sair - \n"); printf("1 - Ice Tea Limao - 1.00 euro\n"); printf("2 - Ice tea de pêssego - 1.10 euro\n"); printf("3 - Bogo - 1.20 euro\n"); printf("4 - Agua 1L - 1.00 euro\n"); printf("5 - Bolachas De Agua e sal - 0.50 euro\n"); printf("6 - Bolachas - 0.50 euro\n"); printf("Código : "); scanf("%i", &indice); } break; } case 3: { printf("Digite o codigo de acesso: "); scanf("%c",&rl); //ModoMan(moe,cenas); verificarSenha(); printf("1- Carregar produtos\n"); printf("2- Carregar moedas \n"); printf("3- Tirar Moedas \n"); //aqui você implementa o usuário escolhendo o item 2 getch(); //aguardar uma tecla ser pressionada break; } } } if(saldo != 0) { cont = 5; while (cont >= 0) { TROCO[cont] = 0; while(saldo >= valor[cont]) { TROCO[cont] = TROCO[cont]+1; saldo = saldo - valor[cont]; } cont = cont -1; } cont = 0; printf("\n\nO seu troco e:\n\n"); while(cont<6) { printf("MOEDAS DE euro%.2f: %i\n", valor[cont], TROCO[cont]); cont++; } saldo = 0; } printf("\n\nOBRIGADO! VOLTE SEMPRE!\n\n"); system("PAUSE"); return 0; } Teste o acesso no item 3. Após inserir senha, vai aguardar uma tecla ser pressionada, e vai voltar pro menu. Pronto, aí implementa a parte para atualizar as moedas. obs.: após editar, poste o item 3 completo aqui para analisarmos. No aguardo. adicionado 6 minutos depois O código vi depois... É isso mesmo, deve ter alterado algum coisa... mas para não perder tempo, use esse código acima. -
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Olhe o item 3 como está: case 3: { printf("Digite o codigo de acesso: "); scanf("%c",&rl); ModoMan(moe,cenas); printf("1- Carregar produtos\n"); printf("2- Carregar moedas \n"); printf("3- Tirar Moedas \n"); break; } Ou seja, não tá fazendo nada... após ler a senha, imprime 3 linhas e fecha!!! Você precisa implementar o que disse: O código não se autoconstrói... Sobre a mensagem de erro, apague esse trecho: if(caso>2) { printf("OPCAO INVALIDA!!"); getch(); } Depois ajusta isso... se preocupe em fazer o carregamentos das moedas... lembrando, esse item está em construção, você tem que implementar a lógica lá... No aguardo. -
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Olá @Ruben Timoteo. Segue o seu código reindentado com pequenas alterações... Favor analisar. #include<stdio.h> #include<iostream> #include<stdlib.h> #include<math.h> #include <conio.h> #include <string.h> //extern char resp[ ]="400855"; tem algum motivo para ser "extern"??? char resp[ ]="400855"; char rl[40]; int ModoMan(int moe,int cenas) { gets(rl); while(strcmp(rl,resp) !=0) { puts("Palavra pass Errada Tente de Novo."); gets(rl); } puts("Correto!"); } main() { float combeb[5]={1,1.10,1.20,1,0.50}; int indice,moe,cenas,i; float saldo = 0; int moeda,creditos; int stock[6]={5,5,5,5,5,5}; float valor[6] = {0.05,0.10,0.20,0.50,1,2}; int caso = 1; int TROCO[6]; float troco; int cont; int custo=0; int quantidade; system("color 0B"); printf("%c",201); for(i=0;i<30;i++) printf("%c",205); printf("%c\n",187); printf("%c",204); for(i=0;i<30;i++) printf("%c",205); printf("%c\n",185); while(caso) { system("cls"); printf("\nSaldo Atual: %.2f Euros\n\n",saldo); printf("ESCOLHA A OPCAO:\n\n",186,186); printf("0 - Sair\n",186,186); printf("1 - Depositar Moeda\n",186,135,198,186); printf("2 - Escolher bebidas\n",186,135,198,186); printf("3 - Modo Admistrador\n",186,198,186); printf("\nOPCAO:",186,186); scanf("%i", &caso); switch(caso) { case 1: { system("cls"); printf("\n\nDeposite a sua moeda\n\n"); printf("1 - 0.05 Euros\n"); printf("2 - 0.10 Euros\n"); printf("3 - 0.20 Euros\n"); printf("4 - 0.50 Euros\n"); printf("5 - 1.00 Euro \n"); printf("6 - 2.00 Euros\n\n"); printf("MOEDA:"); scanf("%i",&moeda); if ((moeda>=1) && (moeda<=6)) { //delimita a faixa de códigos válidos saldo = saldo + valor[moeda-1]; } else { printf("MOEDA INVÁLIDA - Favor recolher na bandeja de 'troco'"); getch(); } break; } case 2: { indice = -1; while (indice!=0) { system("cls"); printf("\n\nEscolha a bebida que deseja \n"); printf("0 - Para Sair - \n"); printf("1 - Ice Tea Limao - 1.00 euro\n"); printf("2 - Ice tea de pêssego - 1.10 euro\n"); printf("3 - Bogo - 1.20 euro\n"); printf("4 - Agua 1L - 1.00 euro\n"); printf("5 - Bolachas De Agua e sal - 0.50 euro\n"); printf("6 - Bolachas - 0.50 euro\n"); printf("Código : "); scanf("%i", &indice); } break; } case 3: { printf("Digite o codigo de acesso: "); scanf("%c",&rl); ModoMan(moe,cenas); printf("1- Carregar produtos\n"); printf("2- Carregar moedas \n"); printf("3- Tirar Moedas \n"); break; } } if(caso>2) { printf("OPCAO INVALIDA!!"); getch(); } } if(saldo != 0) { cont = 5; while (cont >= 0) { TROCO[cont] = 0; while(saldo >= valor[cont]) { TROCO[cont] = TROCO[cont]+1; saldo = saldo - valor[cont]; } cont = cont -1; } cont = 0; printf("\n\nO seu troco e:\n\n"); while(cont<6) { printf("MOEDAS DE euro%.2f: %i\n", valor[cont], TROCO[cont]); cont++; } saldo = 0; } printf("\n\nOBRIGADO! VOLTE SEMPRE!\n\n"); system("PAUSE"); return 0; } Sugiro que faça as novas alterações a partir desse código. Já copia ele e dar uma revisada nas alterações... mantenha a indentação nesse padrão!! Beleza? Sobre: O carregamento do estoque de bolachas itens segue a mesma lógica para o carregamento do estoque de moedas... Vai lá no vetor do estoque de itens atualiza. Vamos focar primeiro no estoque de moedas... Pronto, após digitar a senha correta, você vai perguntar qual moeda quer inserir... é a mesma lógica do item 1, só que você não vai atualizar o valor, após ler a moeda, vai na posição onde essa moeda está e adiciona mais 1. Algo como: stock[moeda]+=1 obs.: veja que lá no item 1, você também precisa atualiza a quantidade de moedas!!! Mas deixa pra lá por enquanto... foque apenas em fazer a manutenção de moedas funcionar. @Ruben Timoteo, tenta implementar a atualização de moedas. Se tiver alguma dúvida, informa onde está... Para posta um código, utilizar o botão <> lá na barra de ferramentas! No aguardo. -
Olá @Jaque021. Então, tem alguns pontos que precisará tomar cuidado, veja: 1) INFORMAÇÕES SOBRE O ARQUIVO Como citado, o nome do arquivo de entrada e do arquivo de saída vêm do usuário. No seu código, você já definiu no código fonte. 2) DADOS DAS CIDADES Os dados das cidades estão no arquivo de entrada, mas no seu código, você está solicitando e lendo via teclado. 3) PROCESSAMENTO DOS DADOS Como dito, os dados devem ser lidos do arquivo de entrada. Ai vai verificando o maior, e após, escreve APENAS o nome da cidade mais populosa, assim com a seu número de habitantes. No seu código, você está escrevendo as cidades que está lendo do teclado... está fugindo da proposta do enunciado. Em relação a impressão, talvez seja necessário simplesmente escrever o nome da cidade e sua população, algo como: fprintf(f,"%s %d\n", cidades,maior); *** Obs.: talvez o processo de leitura de dados seja mais delicada, ou seja, daí você precisa trabalhar no processo da leitura dos dados do arquivo OU trabalhar para desenvolver logo a parte da verificação da cidade mais populosa, neste último caso, você poderia deixar, por enquanto, os dados sendo lidos via teclado, verificaria a cidade mais populosa e escreveria no arquivo... Depois, trocaria a leitura via teclado, para leitura do arquivo... entende? No aguardo. No aguardo.
-
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Tá, o que no case 2 não está funcionado??? O que você tentou fazer??? Vamos lá: case 2: { indice = -1; //inicializa a variável com algum valor para poder entrar no while while(indice!=0) //a condição de para é quando escolher SAIR, logo, deve continuar enquanto for diferente de 0 { //faltou a {} do while system("cls"); printf("\n\nEscolha a bebida que deseja\n"); printf("0 - Sair - 0.50 euro\n"); printf("1 - Ice Tea Limao - 1 euro\n"); printf("2 - Ice tea de pêssego - 1.10 euro\n"); printf("3 - Bogo - 1.20 euro\n"); printf("4 - Agua 1L - 1euro\n"); printf("5 - Bolachas De Agua e sal - 0.50 euro\n"); printf("6 - Bolachas - 0.50 euro\n"); printf("bebidas:\n"); scanf("%i", &indice); } break; } Pronto. Teoricamente o while está corrigido: - faltou você inicializar a variável indice; - fatou as {} do while; - a condição do while estava errada. Alguma dúvida até ai? Pronto. Agora precisa você fazer o mais importante, que é implementar a venda do item. Implemente os passos necessários após ter escolhido um item válido. No aguardo. -
Olá @estudante. Você precisa reformular a lógica do seu algoritmo. Tente entender melhor o problema, por exemplo, se for informado 1 e 10... teria que aparecer 2, 4, 6 e 8 (supondo que o intervalo é aberto), correto?. Tente analisar e interpretar como funciona essa sequência... Sugiro que tente entender como o seu código atual está funcionando e se o resultado que está apresentando corresponde com o que você entendeu ou não... ou seja, não me parece está ocorrendo algum erro de sintaxe, mas apenas na lógica... o programa está fazendo o que você pediu para ele fazer... Reformule para o que você precisa. Vá tentando... No aguardo.
-
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Poste o código atual completo e onde acha que está o erro. -
C++ Programa + subprograma - função XY/(2*Y)
Simon Viegas respondeu ao tópico de mariana_____silva em C/C#/C++
Olá @mariana_____silva . Pelo que vi, ainda não. Você praticamente postou o mesmo código... e está praticamente com o mesmo problema. Pelo menos encontrei divergências... Vamos lá. Compilei e rodei o seu código. Inseri 5 e 3 como entrada. Deu: Certo. Agora vamos fazer a conta manualmente. Formula: XY/(2*Y), correto? Substituindo os valores, temos: 5*3/(2*3) Efetuando as operações: 5*3/(2*3) = 15/(6) = 2,50 ou seja, deveria aparecer assim: Ou sua fórmula está errada ou minha conta está errada... (ou ambos) Vejamos o enunciado: Ou seja, a função deve retornar o RESULTADO FINAL da expressão. E o seu programa não esta fazendo isso. Como dito tem que ser assim: Simples assim. Não tem conta para fazer fazer depois que o método expressao() retorna uma resposta. A função deve já retornar o resultado final! RESUMINDO Como citado: ou seja, faça um programa que apenas retorne o resultado de X*Y. Ai posta o código aqui. Depois, desse exemplo mais simples, tenta fazer a expressão completa X*Y/(2*Y). Obs. 1: por favor, poste o código completo de uma vez só. Não precisa separar. Obs. 2: não tente fazer a versão final logo, apenas tente fazer com a expressão X*Y. No aguardo. -
C Tenho 2 matrizes 3x3 e a 3 tem que somar os elementos a e b
Simon Viegas respondeu ao tópico de estudante em C/C#/C++
Olá @estudante. Só complementando: Analisando o enunciado: Certo.. Inicialmente precisam-se saber o que é uma matriz. Concorda? creio eu que seja uma etapa trivial... mas se tiver dúvidas sobre, pode dar uma pesquisada para revisar, como nesse conteúdo. Vamos adiante... Um outro ponto base seria em saber o que seria uma "soma dos elementos correspondentes de a e b.", ou seja, o que você entende disso? o que significa "elementos correspondentes"? Então, um elemento correspondente de uma matriz seria o elemento da outra matriz na mesma coordenada, ou seja, o termo Aij da primeira matriz seria correspondente ao termo Aij da outra matriz. Ai o, a posição Aij da terceira matriz vai ser igual a soma dos Aij da primeira com a segunda matriz. Pelo que foi pedido, ele quer basicamente uma "adição de matrizes". Pronto, em relação ao que foi pedido, seria mais ou menos isso.. Agora a etapa seria "implementar" na linguagem escolhida. Seria mais ou menos esses passos: - ler a matriz A; - ler a matriz B; - Gerar a matriz C, que será a soma adição da matriz A com a matriz B. ADENDO Perceba por exemplo que no seu código, em vez de "ler" a matriz, você estava "gerando uma"... que são coisas diferentes! Para efetuar testes, pode ser interessante gerar matriz automaticamente, mas tem que se atentar que o quê foi pedido é para ler mesmo... o usuário precisa ir preenchendo. -
Olá @Code guy. Você inverteu o sinal... seria "<" em detrimento do ">", ou seja, aquela posição no meio do for funciona como um "enquanto a condição resultar em verdadeiro", como o i começa com 0, a condição i>100 já seria falsa, por isso "pulou" o for. No aguardo.
-
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Olá @Ruben Timoteo. Poste seu código atual e onde está com dúvidas... se você não disse onde está com problemas, não temos como te ajudar. Por exemplo: Sobre: Veja, você só postou um código e disse que "não sabe se vai conseguir", Ok. Mas o quê você não está conseguindo fazer? é o erro que @Mauro Britivaldo citou? Se for isso, você poderia dizer algo como: Entende? você precisa apontar onde você acha que está com erro... Se for isso, veja: int ModoMan(int moe,int cenas) { gets(rl); while(strcmp(rl,resp) !=0) puts("Resposta errada. Tente de novo."); gets(rl); puts("Correcto! "); } Você simplesmente esqueceu das { } do while. Ficaria algo como: int ModoMan(int moe,int cenas) { gets(rl); while(strcmp(rl,resp) !=0) { puts("Resposta errada. Tente de novo."); gets(rl); } puts("Correcto! "); } Simples assim. Mas é você que precisa nos indicar. Sobre: Sim. Claro, estamos aqui para isso... mas você precisa dizer onde precisa de ajuda e porque. Dizer só algo como "não consegue" não é parâmetro, ou seja, precisamos saber porque e onde.. etc. Vamos lá... Peguei o seu último código completo e apenas reindentei, veja: #include<stdio.h> #include<iostream> #include<stdlib.h> #include<math.h> #include <conio.h> #include <string.h> //no meu compitlador precisou para poder reconhecer o srtcmp() extern char resp[]="400855"; char rl[40]; int ModoMan(int moe,int cenas) { gets(rl); while(strcmp(rl,resp) !=0) //<-- aqui já inseri as chavas que estavam faltando { puts("Resposta errada. Tente de novo."); gets(rl); } puts("Correcto! "); } main() { float combeb[5]={1,1.10,1.20,1,0.50}; int indice,moe,cenas,i; float saldo = 0; int moeda,creditos; int stock[6]={5,5,5,5,5,5}; float valor[6] = {0.05,0.10,0.20,0.50,1,2}; int caso = 1; int TROCO[6]; float troco; int cont; int custo=0; int quantidade; system("color 0B"); printf("%c",201); for(i=0;i<30;i++) printf("%c",205); printf("%c\n",187); printf("%c",204); for(i=0;i<30;i++) printf("%c",205); printf("%c\n",185); while(caso) { printf("\nSeu saldo Atual e de: euro%.2f\n\n",saldo); printf("ESCOLHA A OPCAO:\n\n",186,186); printf("0 - Sair\n",186,186); printf("1 - Depositar Moeda\n",186,135,198,186); printf("2 - Escolher bebidas\n",186,135,198,186); printf("3 - Modo Admistrador\n",186,198,186); printf("\nOPCAO:",186,186); scanf("%i", &caso); switch(caso) { case 1: { system("cls"); printf("\n\nDeposite a sua moeda\n\n"); printf("0 - 0.05 centimos\n"); printf("1 - 0.10 centimos\n"); printf("2 - 0.20 centimos\n"); printf("3 - 0.50 centimos\n"); printf("4 - 1 Euro\n"); printf("5 - 2 Euros\n\n"); printf("MOEDA:"); scanf("%i",&moeda); saldo = saldo + valor[moeda]; break; } case 2: { system("cls"); printf("\n\nEscolha a bebida que deseja\n"); printf("0 - Sair - 0.50euro\n "); printf("1 - Ice Tea Limao - 1euro\n"); printf("2 - Ice tea de pêssego - 1.10euro\n"); printf("3 - Bogo - 1.20€\n"); printf("4 - Agua 1L - 1euro\n -"); printf("5 -Bolachas De Agua e sal - 0.50euro\n "); printf("6 -Bolachas - 0.50euro\n "); printf("bebidas:\n"); scanf("%i", &indice); break; } case 3: { printf("Digite o codigo de acesso: "); scanf("%c",&rl); ModoMan(moe,cenas); printf("1- Carregar produtos\n"); printf("2- Carregar moedas\n"); printf("3- Tirar Moedas\n"); cont = 0; printf("\n\nO seu troco e:\n\n"); while(cont<6) { printf("MOEDAS DE euro%.2f: %i\n", valor[cont], TROCO[cont]); cont++; } saldo = 0; } { printf("\n\n====== Saldo Insuficiente ======"); } break; } if(caso>2) { printf("OPCAO INVALIDA!!\n\n"); } } if(saldo != 0) { cont = 5; while (cont >= 0) { TROCO[cont] = 0; while(saldo >= valor[cont]) { TROCO[cont] = TROCO[cont]+1; saldo = saldo - valor[cont]; } cont = cont -1; } cont = 0; printf("\n\nO seu troco e:\n\n"); while(cont<6) { printf("MOEDAS DE euro%.2f: %i\n", valor[cont], TROCO[cont]); cont++; } saldo = 0; } printf("\n\nOBRIGADO! VOLTE SEMPRE!\n\n"); system("PAUSE"); return 0; } obs.: Só alterei a parte do erro citado acima lá no ModoMan(). Em relação à manutenção, lá no item 3, após colocar a senha, aparece:: Se você observar os números verás que não está batendo, já que deveria ter 5 moedas de cada, correto? UMA DÚVIDA SUA SERIA ALGO: Tá conseguindo entender a linha de raciocínio? Daí, analisaríamos o trecho... veja, se você quer imprimir as moedas, qual vetor precisaria usar? Resp: vetor das moedas! . Logo, stock[]. O trecho poderia ficar assim: while(cont<6) { //printf("MOEDAS DE euro%.2f: %i\n", valor[cont], TROCO[cont]); printf("MOEDAS DE %.2f: %i\n", valor[cont], stock[cont]); cont++; } Entende? Foque onde está o erro, tente entender o que está acontecendo.. provavelmente você mesmo veria que estava apenas usando o vetor errado... ai, se não conseguir, posta aqui onde está a dúvida... o que não pode é ficar esperando que alguém procure os possíveis erros e resolva tudo para você. No aguardo. -
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
@Ruben Timoteo, sugiro que inicialmente coloque também para exibir as moedas contidas na máquina e o estoque de cada produto. Dessa forma, ficará mais fácil para acompanhar as atualizações. obs.: essas informações não necessariamente são para a versão final do programa, a ideia é apenas para o programador ter uma referência dos estoques. Se for o caso, depois é só remover. Vai servir como um "modo desenvolvedor ativado". Sobre: Complementando...: Você precisa atualizar as variáveis que têm os respectivos valores de cada moeda, como citado, lá no vetor stock. É como o cliente inserir moedas na máquina, cada moeda inserida vai para o para o estoque de moedas, correto? E o valor da moeda vai para o saldo do cliente. A diferença da manutenção, é que as moedas inseridas não irão para o saldo, vão apenas atualizar o estoque. A mesma analogia serve para o produto. Para "vender", a máquina vai subtrair o valor do saldo do cliente E atualizará o estoque do produto. Na manutenção, apenas vai atualizar o produto. -
C++ Simulador de máquina de vendas automática
Simon Viegas respondeu ao tópico de Ruben Timoteo em C/C#/C++
Olá @Ruben Timoteo. Seja bem vindo ao Fórum do Clube do Hardware. Não está conseguindo é o esperado aqui, concorda? Então, qual parte não está conseguindo? onde está com dúvidas? Identifique o problema e em qual parte está com dúvidas para resolver. No aguardo. -
C++ Programa + subprograma - nº aparelhos vendidos
Simon Viegas respondeu ao tópico de mariana_____silva em C/C#/C++
@mariana_____silva, Por favor, poste seu código para analisarmos, e também poder servi de base para outros usuários. Para adiantar... Em relação ao último código, tem outros pontos que precisam ser verificados, como: - não está tratando a parte decimal do salário; (experimente salário de R$1000,30) - o terceiro if precisaria de um else antes também; (são condições mutuamente excludentes, ou seja, se for um não pode ser o outro) - tecnicamente o terceiro if nem precisa existir. (se não for as anteriores, necessariamente será a terceira..) etc No aguardo. -
C++ Programa + subprograma - nº aparelhos vendidos
Simon Viegas respondeu ao tópico de mariana_____silva em C/C#/C++
Só complementando. @vangodp, Para mim também não está bem claro... Por exemplo, dá forma que foi feito por @mariana_____silva, o vendedor poderia cruzar os braços ao ter vendido o 21º produto... O salário seria o mesmo, rs. Mas aí é outro ponto! O que foi citado por mim e @Mauro Britivaldo foi sobre a sintaxe da linguagem. É necessário ver os outros aspectos do algoritmo também. -
C++ Programa + subprograma - função XY/(2*Y)
Simon Viegas respondeu ao tópico de mariana_____silva em C/C#/C++
Olá @mariana_____silva. A dica é simples: foque no problema, não na resposta. Apenas entenda o que se pede! Vejamos o enunciado: Não tem mistério. A função recebe X e Y e retorna X*Y/(2*Y). Fim. , ou seja, só por observar o problema em si, a resposta já veio implícita: é apenas uma expressão matemática, não tem um algoritmo por trás . Obs.: assim como na matemática, tem que delimitar o escopo mesmo, mas o certo seria apenas para y!=0, em vez y<=0. O que não pode é ser 0, correto? pois resultará em uma indeterminação (pode dar o famoso "pau" no programa). Os negativos podem de boa. Então, por hora esqueça o C++, tome como X=5 e Y=3. Qual o resultado da expressão? Consegue fazer essa conta? Resp: 2,5, correto? Como essa a expressão completa envolverá outros problemas, devido a divisão, tente fazer primeiro um mais simples, ex: Ou seja, a função simplesmente receberá X e Y e retornará X*Y. Outra coisa... Percebe que a resposta já está na própria função, logo só precisa imprimir a função em si.. não há outra conta para fazer depois. Algo como: printf ("O valor da expressao = %d\n", expressao(x,y)); A expressao() já terá o X*Y como resposta. Quando for fazer a expressão completa, idem. O printf() não mudará em nada, só a conta dentro da função (mais algumas adaptações que verás que serão necessárias)... Ai posta o código aqui. No aguardo. -
Olá. As alterações nas opções citadas abaixo não estão salvando. No Write, indo no menu "Ferramentas\Opções" No item "Configuração de idiomas\Verificação de frases em português" Eu altero os itens, mas não funcionam... ao retornar no local, as mudanças aparecem desfeitas!! obs.: fiz teste no item referente ao inglês e funciona normalmente, só no português tem esse problema. Outros itens das opções também estão salvando. O que pode ser? como resolver? Versão do LibreOffice: 6.0.1.1. (x64). obs.: tinha versão 5 com o mesmo problema, atualizei para a mais recente e está com o mesmo problema. Windows 7 Professional x64 SP1 (original) Esses itens que desmarquei, ao retornar ficam marcadas novamente Desde já, obrigado.
-
C++ Programa + subprograma - nº aparelhos vendidos
Simon Viegas respondeu ao tópico de mariana_____silva em C/C#/C++
Olá @mariana_____silva. Você precisa informa o que acontece. Está dando algum erro? é alguma parte que não está conseguindo implementar? Veja, você só informou que "tentou algumas vezes", postou um enunciado e um código. Mas iaí, qual a sua dúvida? Vamos lá: Apenas peguei o sei código e inserir o método main, para assim "rodar" ao executar. #include <iostream> void produtos (); int main() //método main é aquele vai ser ser invocado ao executar o programa { produtos(); //incova o método que você criou } void produtos () { int naparelhos; float vtotal, comissao, sbase; //{ <-- não tem vínculo com nada. É desnecessário printf ("Indique salario\n"); scanf ("%d", &sbase); printf ("Qual o numero de aparelhos vendidos?\n"); scanf ("%d", &naparelhos); if (naparelhos>20) { comissao= (sbase*0.12); vtotal = sbase + comissao; } else { if (naparelhos<=20 && naparelhos>10) { comissao = (sbase *0.09); vtotal = sbase + comissao; } if (naparelhos<10) { comissao=0; vtotal=sbase+comissao; } } printf ("O valor do salario e %2.f e o valor da comissao e %2.f\n", vtotal,comissao); //} referenete ao { que foi removido lá em cima } Não alterei nada! beleza? Pronto! Vamos supor que esse é o seu código completo. Executei e fiz alguns testes... notei que todas os resultados deram 0 (zero) nas contas. Ou seja, uma "dúvida" sua poderia ser algo como: "todos os testes que fiz estão dando zero, não sei o que acontece". Ai, analisando o código, veríamos um probleminha no scanf(). Para ler um float, NÃO se usa "%d". RESUMINDO: Dê uma pesquisada sobre como "ler arquivos float em C++" e ajuste o código. A partir daí faça outros testes e veja se está se comportando como desejado. No aguardo.
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