
Mnemonic
Membros-
Total de itens
170 -
Registro em
-
Última visita
Tudo que Mnemonic postou
-
Esse tópico ensina como usar a tag code (é só selecionar o codigo e clicar no ultimo ícone que aparece no lugar de escrever a mensagem, parecido com um pergaminho): http://scriptbrasil.com.br/forum/index.php?showtopic=88873 A lógica do teu codigo ta correta... só precisar ver os casos especiais, como onze, doze, etc. Da vez que eu fiz, eu primeiro tentei pegar os numeros equivalentes a casa das unidades, dezenas e centenas, depois eu fiz os cases. Ex: int x, un, cn, dz, ml; //unidade, centena, dezena, milhar x = 4321; ml = x / 1000; //4321/1000 = 4 cn = (x / 100) % 10; //4321/100 = 43 ... 43 % 10 = 3 dz = (x / 10) % 10; //4321/10 = 432 .. 432 % 10 = 2 un = x % 10; //4321 % 10 = 1 Desse jeito você coloca cada casa decimal em uma variável do tipo int e fica mais fácil pra jogar elas nos switches. Por exemplo... se ml == 0, cn == 1, dz e un == 0, então você usa "cem" em vez de "cento e..."
-
Tem que ter um limite... é impossível escrever um código que pegue qualquer número e converta. Se ele não deu limite nenhum entào o mais provavel é que ele queira os números apenas de 0 a 9 Ex: 12345 = um, dois, três, quatro, cinco
-
Opa, só uma correção... Onde eu escrevi isso: for(m=0; m<9; m++) for(n=0; n<9; n++) if(y[m] == y[n]) repete = 1; Você troca por isso:for(m=0; m<9; m++) for(n=0; n<9; n++) if(y[m] == y[n] && m != n) repete = 1; Senão ia ficar preso no while pra sempre.
-
O erro tá acontecendo por esse motivo: em C e C++, quando você declara um vetor você coloca o número de elementos que ele vai ter, mas na hora de acessar esses elementos, comece contando do 0. Ex: mat[2]; //dois elementos: mat[0] e mat[1] ... mat[2] é inválido, e se usar ele vai dar erro. Então no seu código, o mat precisa ser declarado como mat[3][3]. Além disso, faça o seu codigo trabalhar por você. Isso: y[0]=10; y[1]=11; y[2]=12; y[3]=13; y[4]=14; y[5]=15; y[6]=16; y[7]=17; y[8]=18; é igual a isso: for(n=0; n<9; n++) y[n] = n + 10; E isso: y[0]=rand()%10; y[1]=rand()%10; y[2]=rand()%10; y[3]=rand()%10; y[4]=rand()%10; y[5]=rand()%10; y[6]=rand()%10; y[7]=rand()%10; y[8]=rand()%10; é igual a isso: for(n=0; n<9; n++) y[n] = rand()%10 + 1; //+1 pra não ser 0 nunca Esse while while( ( (y[1]==y[2]) || (y[1]==y[3]) || (y[1]==y[4]) || (y[1]==y[5]) || (y[1]==y[6]) || (y[1]==y[7]) || (y[1]==y[8]) || (y[1]==y[0]) || (y[2]==y[3]) || (y[2]==y[4]) || (y[2]==y[5]) || (y[2]==y[6]) || (y[2]==y[7]) || (y[2]==y[8]) || (y[2]==y[0]) || (y[3]==y[4]) || (y[3]==y[5]) || (y[3]==y[6]) || (y[3]==y[7]) || (y[3]==y[8]) || (y[3]==y[0]) || (y[4]==y[5]) || (y[4]==y[6]) || (y[4]==y[7]) || (y[4]==y[8]) || (y[4]==y[0]) || (y[5]==y[6]) || (y[5]==y[7]) || (y[5]==y[8]) || (y[5]==y[0]) || (y[6]==y[7]) || (y[6]==y[8]) || (y[6]==y[0]) || (y[7]==y[8]) || (y[7]==y[0]) || (y[8]==y[0]) ) || ( (y[1]==0) || (y[2]==0) || (y[3]==0) || (y[4]==0) || (y[5]==0) || (y[6]==0) || (y[7]==0) || (y[8]==0) || (y[0]==0) ) ); Pode ser substituído com dois laços for: int repete; //declara antes essa variavel de controle ... { ... repete = 0; for(m=0; m<9; m++) for(n=0; n<9; n++) if(y[m] == y[n]) repete = 1; }while( repete ); mat[0][0]=y[0]; mat[0][1]=y[1]; mat[0][2]=y[2]; mat[1][0]=y[3]; mat[1][1]=y[4]; mat[1][2]=y[5]; mat[2][0]=y[6]; mat[2][1]=y[7]; mat[2][2]=y[8]; igual a isso: x = 0; for (m=0; m<3; m++) for (n=0; n<3; n++) mat[m][n] = x++; É isso, espero que tenha ajudado. []s
-
Eu faria o seguinte: Criaria um único array, e jogaria nesse array os resultados da pesquisa, 1, 2 ou 3. No final você percorre o array, conta quantos 1's, 2's e 3's existem e divide pelo total, pra pegar a porcentagem. int indice = 0; do { scanf("%d", &continuar); v[indice] = continuar; indice++; } while (continuar < 4 && continuar > 0); //... for (x=0; x < indice; x++) if (v[x] == 1) qtdWindows++; else if (v[x] == 2) qtdLinux++; else if (v[x] == 3) qtdOutros++; Depois é só calcular por exemplo (qtdWindows / indice) pra pegar os percentuais
-
C... Visual Basic? Tem algo errado nisso. Ou eu estou meio por fora dos produtos da microsoft.
-
Programinha de cadastro com arvores
pergunta respondeu ao Thiago de Paula Beserra de Mnemonic em C, C++
Mesma coisa de uma árvore binária qualquer. A diferença é que o nó dela vai ser do tipo da sua estrutura. typedef struct tPessoa { int codigo; float peso; int idade; } Pessoa; typedef struct tTree { Pessoa node; Tree *esq; Tree *dir; } Tree; Depois na hora de incluir o cadastro das pessoas, é só usar algum método de inserção em árvore que você deve ter aprendido já. -
Ah, esqueci de dizer que fazendo o que eu disse, na função select você vai usar: *testeFinalList em vez de testeFinalList Porque testeFinalList vai receber o endereço do ponteiro. E *testeFinalList vai acessar esse ponteiro. Resumindo: o *testeFinalList da função select vai equivaler ao testeFinalList do main. Se no main você faria: testeFinalList = malloc ... No select você faz: *testeFinalList = malloc... E o resultado é o mesmo. Como se a variavel estivesse espelhada. Só tenha cuidado pra não perder a referencia da variável.
-
Você tá passando apenas o valor da variavel ponteiro como parametro (que nesse caso, é nulo, ou nada, sei lá), mas a função select faz uma copia dela, então você perde a referencia. Pra isso que você quer fazer, vai precisar passar o endereço da variavel. //main select(idconn, &teste, &testeFinalList); //select select(U16 id, teste_t *teste, teste_t **testeFinalList)
-
(Resolvido) Classificação a depender da idade
pergunta respondeu ao Diego Antonio de Mnemonic em C, C++
Você pode escrever o switch assim pra ficar mais fácil: switch (idade) { case 0: case 1: case 2: case 3: case 4: printf("Sem Categoria"); break; case 5: case 6: case 7: printf("Infantil A"); break; case 8: case 9: case 10: printf("Infantil B"); break; case 11: case 12: case 13: printf("Juvenil A"); break; case 14: case 15: case 16: case 17: printf("Juvenil B"); break; default: printf("Adulto"); } -
Eu sempre tive esse problema também. Existem algumas soluções usando cast, ou declarando a matriz como um array de ponteiros. Aqui eu contornei o problema usando uma struct: #include <stdio.h> #include <stdlib.h> #include <time.h> #define COL 10 #define LIN 6 typedef struct sMatriz { int m[COL][LIN]; } Matriz; void gerar_bolao(Matriz *a, int tamx, int tamy) { int i, j; srand(time(NULL)); for (i = 0; i < tamx; i++) for (j = 0; j < tamy; j++) a->m[i][j] = rand() % 60 + 1; //pra acessar os elementos do ponteiro, usa-se o "->" } int main() { int i, j; Matriz b; gerar_bolao(&b, COL, LIN); //como a função recebe um pointer, //precisa passar o endereço de b (&) for (i = 0; i < COL; i++) for (j = 0; j < LIN; j++) printf("%d ",b.m[i][j]); return 0; }
-
Acho que esses valores não podem ser integer. Troca pra real. No else tá faltando um begin..end.
-
Não entendi. Do modo como eu pensei aqui, a questão é bem simples. A única parte que poderia complicar, é a parte de passar a expressão do segundo grau pro algoritmo... mas foi a parte que eu dei a dica lá em cima. O resto do programa é bem direto. - Pegar os 3 valores. - Calcular o delta: delta = (b*b ) - (4*a*c) - Se delta for menor que 0, não existem raizes reais - Caso contrário, é só calcular o(s) valore(s) de x. x1 = (-b + sqrt(delta)) / 2*a x2 = (-b - sqrt(delta)) / 2*a http://www.cplusplus.com/reference/clibrary/cmath/sqrt/ http://pt.wikipedia.org/wiki/Equa%C3%A7%C3...quadr%C3%A1tica
-
Ax² + Bx + C = 0 A*(x*x) + B*(x) + C = 0 Você pede pro usuário digitar o valor de A, B e C, depois calcula as raizes usando aquelas formulas que aprendeu no segundo grau. b² - 4ac... Pra colocar um número ao quadrado, pode usar a função pow(), mas acho mais simples multiplicar o número por ele mesmo.
-
#include <stdio.h> #include <conio.h> int idade, feminino, masculino; float media; Por que não declarou essas variáveis dentro do main? main() { feminino=0; masculino=0; A variável media não tá sendo usada nesse código. do { printf("informe idade e sexo [1-feminino//2-masculino]"); scanf("%d", &idade); switch (idade) { case 1: feminino*idade; break; case 2: masculino*idade; break; } } while Aqui tem dois problemas. Um deles é que você tá usando a variavel idade dentro do switch. O switch funciona assim: nesse teu codigo, se idade fosse igual a 1, o programa executa tudo que vem depois de "case 1". Se idade for igual a 2, o programa executa tudo que vem depois de case 2. Mas nesse exemplo, você pede pra digitar idade e sexo, e o scanf pega a idade apenas. Se a idade da pessoa for 25, o switch vai usar o 25 mas não existe nenhum "case 25". Além disso, "feminino * idade" não faz sentido nenhum. Pra onde tá indo esse valor? O outro problema é no while. Você precisaria de alguma expressão lógica alí no final pro while. Por exemplo: ...while (idade > 0); printf("\n media feminino: %f", feminino); printf("\n media masculino: %f", masculino); getch(); } Aquele %f alí significa que aquele local vai ser substituído por uma variavel do tipo float. Tanto feminino quando masculino são do tipo int. Então você precisaria usar %d. A impressão que dá é que você tá atirando no escuro até alguma coisa funcionar. O melhor é você procurar algum livro sobre C, ou alguma apostila na internet, e aprender a linguagem aos poucos. No começo parece difícil, mas em uma semana dá pra entender o básico da linguagem.
-
Eu não entendi a pergunta... No teu codigo o usuario tá sempre preenchendo todos os registros (MAX). Caso você preenchesse apenas um por vez, você poderia criar uma variável global pra manter a contadem dos registros que fossem cadastrados com sucesso. Ex: //... struct registro tabela[MAX]; int regCont = 0; //... void preenche_registro() { //... regCont++; } Não é muito elegante, mas funciona. A segunda pergunta, pra conferir se o usuário cadastrou tudo certo, o jeito é criar um monte de if, ou do..while até o safado digitar tudo certo. Você pode por exemplo usar variaveis temporárias pra pegar os valores do registro, daí no final confere tudo e aí manda pra variável real. Pra não ficar repetindo isso várias vezes, melhor criar uma função que faz isso e retorna 0 tá tudo certo ou 1 se deu problema.
-
Opa, legal eu ter ajudado. :) Essa de pesquisar a placa do carro eu não entendi direito o que é pra fazer. (é o case 4 daquele switch?) Melhor você criar outro tópico especificando isso, e colocando o código identado lá, que fica mais fácil pra outras pessoas ajudarem também.
-
Mas é um programa só. Quando compilar, isso tudo se transforma num único .exe.
-
http://scriptbrasil.com.br/forum/index.php?showtopic=88873 Normalmente você cria um arquivo header (.h) com os protótipos das funções e um arquivo com o corpo das funções, e quando você quiser usar aquelas funções no seu código, você faz um #include "seuHeader.h" Exemplo: carro.h #ifndef _CARRO_H_ #define _CARRO_H_ #define tamanho 5 struct carro{ int placa; char nome[15]; }; struct carro incluir(); void imprimir(struct carro temporaria[]); #endif carro.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "carro.h" struct carro incluir() { //corpo da função aqui... } void imprimir(struct carro temporaria[]) { //corpo da função aqui... } Então qualquer outro código onde você precise usar essas funções, basta usar: #include "carro.h" Todos os arquivos precisam estar na mesma pasta. E dependendo do compilador ou IDE que você esteja usando, é preciso incluir o carro.c ao seu projeto (ou compilar ele junto com o programa principal).
-
O primeiro obstaculo que eu superei foi perceber que "Matrix" e "Hackers" são apenas filmes, e que um computador é só uma ferramenta. Assim como o Linux é apenas um sistema operacional. Infelizmente nem sempre é uma questão de tempo pra perceber isso.
-
Ah, no final você pode testar se 'maria' é maior que 'joao', daí diz quem foi o vencedor. if (maria > joao) printf("A vencedora foi Maria"); else printf("O vendedor foi Joao");
-
Você não pode atribuir valores pras variáveis daquele jeito: maria=0, joao=0, branco=0 (e mesmo que pudesse, faltou um ponto e virgula no final). No for você precisa usar ponto e virgula em vez de virgula apenas. No switch, você tava usando 'voto' em vez de 'votos'. Corrigindo isso, fica assm: #include <stdio.h> int main() { int votos, maria = 0, joao = 0, branco = 0, i; for(i=0; i<30; i++) { printf("informe o voto [1-maria, 2-joao, 3-branco}"); scanf("%d", &votos); switch(votos) { case 1: maria++; break; case 2: joao++; break; case 3: branco++; break; } } printf("maria: %d ", maria); printf("joao: %d ", joao); printf("branco: %d ", branco); return 0; }
-
#include <stdio.h> int main() { int i; int j; int cont; int v[9]; printf("digite 9 valores:"); for (i=0;i<9;i++) { scanf("%d", &v[i]); for (i=0;i<9;i++) { cont=0; for (j=0;j=v[i];j++) { //aqui j=v[i] tá atribuindo o valor de v[i] pra j, e não comparando if(v[i]%j==0) cont = cont+1; } if (cont<=2) { printf("%d", v[i]); printf("%d", i); } } return 0; //return tava sendo executado dentro do for anterior, daí o programa sempre fechava antes do fim }
-
#include <stdio.h> #include <stdlib.h> int main() { int x = 33; char c[5]; sprintf (c, "%d ", x); printf("%s ", c); return 0; } A função sprintf é como a printf, mas em vez de mandar o resultado pra tela, ela guarda o resultado numa string (nesse exemplo que eu dei, a string "c" .
-
codlivro_aux, tabela.codlivro; preco_aux, tabela.preço; quant_aux, tabela.quant; Talvez seja culpa dessas vírgulas aí.