Ir para conteúdo
Fórum Script Brasil

Mnemonic

Membros
  • Total de itens

    170
  • Registro em

  • Última visita

Tudo que Mnemonic postou

  1. Dá uma olhada aqui antes: http://scriptbrasil.com.br/forum/index.php?showtopic=88873 Quando você declara um array, o número que você declara entre chaves é o número de elementos daquele array, porém a linguagem C começa contando do elemento 0. Então se você declarar "int v[9];", os elementos válidos são: v[0], v[1], v[2], ... v[7] e v[8]. Do 0 até o 8 você tem 9 elementos. Portanto nesse FOR você tá ignorando o elemento v[0] e tá acessando o elemento v[9] que não faz parte do array: for (i=1;i<10;i++) scanf("%d",&v[i]); A mesma coisa nesse outro: for (j=1;j=v[i];j++) { if(v[i]%j==0) cont=cont+1; } No final da sua função "int main()" você precisa usar um "return 0;".
  2. Eu não entendi a dúvida. Da forma que você mostrou deveria funcionar. if (a < (b+c)) then ...
  3. A lógica da questão é essa: string frase(""); int x = 1349; Como o valor maximo que o prof disse é 1500, então você testa apenas se o número é maior que 1000: if (x > 1000) frase += "Mil "; x = x % 1000; Depois testa a casa das centenas: if (x > 900) frase += "novecentos e "; else if (x > 800) frase += "oitocentos e "; else if (x > 700) frase += "setecentos e "; ... else if (x > 100) frase += "cento e "; x = x % 100; Depois a casa das dezenas: if (x > 90) frase += "noventa "; else if (x > 80) frase += "oitenta "; ... else if (x > 10) frase += "dez "; x = x % 10; E acho que já entendeu a idéia. Pode substituir esses if/else por um switch também. switch (x / 100) switch (x / 10) ...
  4. Isso é daqueles temas que as pessoas passam horas debatendo. Por exemplo, conheço muita gente que diz que aprender C++ logo (em vez de C) é bem melhor. Outros acham mais importante aprender a base, depois passar pra OO. Eu só posso te dizer o modo que funcionou pra mim: Quando eu tinha uns 15 anos mais ou menos queria muito aprender uma linguagem de programação, como você agora. Na época, por alguma razão acabei conhecendo a linguagem PERL, que é mais ou menos como o PYTHON hoje em dia, e havia bastante material dela. Devido ao fato do perl ser uma linguagem de script, sem muitas restrições, acho que isso serviu bem pra eu exercitar lógica de programação e construção de algoritmos. Depois quando eu achei que o perl já não era mais suficiente, eu conheci o pascal, usei ele por pouco tempo e depois parti pro C++. Alguns anos depois quando eu entrei na faculdade, eu senti que tava com uma base muito boa. A questão é que nenhuma linguagem vai "emburrecer" você, então começa a testar tudo sem medo que não paga nada. =)
  5. Esse codigo aqui imprime o dia, ano e mês atual: #include <ctime> #include <iostream> using namespace std; int main() { time_t current = time(0); tm * ptm; time ( &current ); ptm = gmtime ( &current ); cout << ptm->tm_mday << endl; cout << ptm->tm_year + 1900 << endl; cout << ptm->tm_mon + 1 << endl; return 0; } Como pode ver, esses valores ficam guardados em ptm->tm_year, ptm->tm_mon e ptm->tm_mday. Daí basta subtrair dos valores que o usuário digitar pro ano, mês e dia do aniversário dele. Mais informações: http://www.cplusplus.com/reference/clibrary/ctime/
  6. Na sua função main, você usa esses parametros: int main( int argc, char* argv[] ) argc é o número de argumentos passados como parametro, e argv são esses parametros. Se no prompt você chamar o arquivo como: seuprograma arquivo.txt -open XZ Então: argc -> 4 argv[0] -> "seuprograma" argv[1] -> "arquivo.txt" argv[2] -> "-open" argv[3] -> "XZ"
  7. Recomendo python, não por ser mais fácil nem nada disso, mas pela praticidade e pela facilidade de achar material dela na net. Em 10 minutos dá pra deixar o python pronto pra uso no computador. Eu sou daqueles que acreditam que um bom livro pode ajudar bastante também.
  8. Tente assim: float x = 8.754000; printf("%g \n", x);
  9. Eu não sou muito bom pra explicar código, vou tentar, mas desculpa se ficar mais confuso que antes :D Pegando o exemplo de N = 3: S = [1] + [3] + [5] + 7 + 9 + 11 Ignora os números entre chaves [] e soma os próximos N números (3) A parte de somar os N números é fácil, pois você já tem o valor de N, e também já tem o cubo dele, então é só uma questão de chegar naquele número, como você fez no seu for: for (i = 1; s <= n3; i = i + 2) { s = i + s; printf ("\n%d", i); } Nesse teu FOR as iterações ficam assim: //i = 1 s = 1 + s; //i = i +2; ---> i = 3 s = 3 + s; //i = i +2; ---> i = 5 s = 5 + s; //i = i +2; ---> i = 7 s = 7 + s; //i = i +2; ---> i = 9 s = 9 + s; //i = i +2; ---> i = 11 s = 11 + s; Como pode ver, o 1, 3 e 5 estão sendo incluídos em s, mas deveria começar do 7. Então o jeito é fazer que o valor inicial de i, em vez de 1, seja 7. Foi daí que eu pensei na variavel x, que vai pegar o valor inicial que o laço FOR deve começar, dependendo do valor de N. Eu vi que pra N igual a 1, o FOR começava do 1 mesmo (não precisa pular nenhum numero impar)... pra N igual a 2, o FOR começava do 3 (e pula 1 numero impar, o 1)... pra N igual a 3, o FOR começava do 7 (pula 3 numeros impares, 1, 3, 5)... então eu tentei buscar alguma relação entre eles: N = 1 --> pula 0 N = 2 --> pula 1 [1] N = 3 --> pula 3 [1, 3, 5] N = 4 --> pula 6 [1, 3, 5, 7, 9, 11] Daí eu fiquei olhando pra isso por vários dias... e a ficha caiu: N + [numero de impares que pulou] = [numero de impares a pular na proxima] N = 1 --> 0 // 1 + 0 = 1 N = 2 --> 1 // 2 + 1 = 3 N = 3 --> 3 // 3 + 3 = 6 N = 4 --> 6 for(i=0; i<n; i++) x = x + i; x é o número de impares pra pular, e i vale como N Mas como o laço FOR que você criou não quer saber o número de impares pra pular e sim o número impar que ele começa a contar, eu só fiz transformar uma coisa na outra. Exemplo: Se N = 3, o número de impares pra pular vai ser 3: [ 1 - 3 - 5 ]- 7 - 9 - 11 A terceira (3) posição é o 5: x = (3 * 2) -1 = 6 - 1 = 5 Mas você quer começar contando a partir do 7, então: x = x + 2 = 7 O que complica é que isso acabou usando um pouco de matemática. Mas entendendo a lógica do negócio, é possível fazer um algoritmo um pouco maior, mas sem usar essas noções.
  10. Ess programa parece simples, mas na verdade a lógica dele é bem complexa. Além de pegar os N números impares consecutivos e somá-los, é preciso também pular os números que já foram somados na iteração anterior. Ou seja, quando N for 2, é preciso ignorar o [1], quando N for 3, é preciso ignorar o [1], [3] e [5]. Se a gente considerar apenas os números impares, olhando pra esses números abaixo, dá pra chegar na lógica que, o número de algaritmos pra ignorar na próxima iteração é sempre a soma de N mais os números que foram ignorados antes 0 - 1 = 1 1 - 2 = [1] + 3 + 5 3 - 3 = [1] + [3] + [5] + 7 + 9 + 11 6 - 4 = [1] + [3] + [5] + [7] + [9] + [11] + 13 + 15 + 17 + 19 Ou seja, quando N for 1, ignora zero... quando N for 2, ignora 1 + 0 (1), quando N for 3, ignora 2 + 1. Isso eu resolvi com esse for: for(i=0; i<n; i++) x = x + i; x é o número de algaritmos que você precisa ignorar. Multiplicando x por 2 e subtraindo 1, a gente consegue o número impar equivalente aquela posição: x = (2 * x) -1; Mas como na verdade a gente quer apenas somar os próximos números impares depois dele, então eu somo +2 pra ir pro próximo: x = x +2; Daí é só criar o laço FOR, começando por esse número. Resultado ficou assim: #include <stdio.h> int main () { int n, n3, i, s, x=0; printf ("Digite o numero n: "); scanf ("%d", &n); n3 = n * n * n; s = 0; for(i=0; i<n; i++) x = x + i; // 0 + 0 = 0 , -1 // 0 + 1 = 1 , 1 // 1 + 2 = 3 , 5 // 3 + 3 = 6 , 11 x = (2 * x) -1; x = x +2; for (i = x; s <= n3; i = i + 2) { s = i + s; printf ("%d ", i); } printf ("\n"); return 0; }
  11. Eu só troquei a posição do C pelo L function calc(a : matriz ) : matriz; var soma : integer; begin soma := 0; for c := 1 to 10 do begin for l := 1 to 60 do soma := soma + a[l,c]; a[61, c] := soma; end; calc := a; end;
  12. Os erros que eu suspeito são esses: this->firstNode->item = (T) new int(-1); Nessa linha é como se você tivesse chamando um construtor pro tipo T que recebe um int como parametro, mas ele não existe. void Add(const T& item) { this->lastNode = new Node(); this->lastNode->nodeItem = item; acho que você colocou aquele "nodeItem" sem querer alí. Deveriam ser apenas Item. T ElementAt(int position) { Node * aux; try { aux = this->firstNode->pProx; for (int I = 0; I < position; ++I) aux = aux->pProx; return aux; Essa função é do tipo T, mas você tá tentando retornar um Node*. Minha sugestão é que seja criado um templade apenas pra classe Node
  13. O exercício pede uma função, mas você tá fazendo um procedure. function calc( b : matriz ): integer; Var soma: integer; begin soma := 0; for l := 1 to 9 do if((l mod 2 ) = 0) then for c := 1 to 9 do soma := soma + b[l,c]; calc := soma; end; Desculpa se a sintaxe tá errada, mas a lógica é essa.
  14. Sobre o return 0: Alguns usam "main() { ... }", outros usam "int main() { ... return 0; }" Alguns compiladores aceitam o primeiro modo. Todos os compiladores aceitam o segundo modo, que é "mais correto". Mas fica da sua escolha. Eu coloquei o int e o return senão meu compilador dá erro. Sobre a função vetor: Eu tomei a liberdade de mudar ela de int pra void, e incluí aquela parte de imprimir os números dentro da função mesmo, porque acho que ficou mais fácil de entender. Ou seja, antes a função retornava um inteiro (quando na verdade você queria retornar um conjunto de inteiros?) e depois imprimia essa inteiro. Agora a função já faz isso tudo nela mesma, sem precisar retornar nada. vetor(int vet1[10], int vet2[10]) é a mesma coisa que vetor(int* vet1, int* vet2) Um vetor/array é a mesma coisa de um ponteiro. Por exemplo, se você declarar: int vetor[5]; O compilador entende que "vetor" é do tipo "int*". Então você pode usar do outro jeito também, tanto faz... eu prefiro usar o int* pois fica mais fácil de lembrar.
  15. É que no retorno da função vetor, você tá retornando apenas um elemento (vet2). Veja se ajuda: #include<stdio.h> #include<stdlib.h> void vetor(int* vet1, int* vet2) { int i, j, k=0; int vet3[10]; for(i=0; i<10; i++) for(j=0; j<10; j++) if(vet1[i] == vet2[j]) { vet3[k] = vet1[i]; k++; } printf("A interseccao entre eles é: "); for(i=0; i<k; i++) printf("%d, ", vet3[i]); } int main() { int v1[10]; int v2[10]; int i; for(i=0; i<10; i++) { printf("Preenche o vetor X[%d]\n", i); scanf("%d",&v1[i]); printf("Preenche o vetor Y[%d]\n", i); scanf("%d",&v2[i]); } vetor(v1, v2); return 0; }
  16. A função vetor recebe dois INTs: int vetor(int ..., int ...) Mas no printf você tá passando apenas um: printf("...", vetor(v2) ) Acho que o que você quer fazer é: printf("A interseccao entre eles é: %d\n", vetor(v1, v2));
  17. Já tá pronto, cara... oh só: S = 0; for(x=1; x <= n; x++) { S += ((x*x)+1) / (x +3); } Fazendo as iterações aqui: x=1 :---> S = 1*1 +1 / 1 +3 = 2/4 x=2 :---> S = 2*2 +1 / 2 +3 = 5/5 x=3 :---> S = 3*3 +1 / 3 +3 = 10/6 x=4 :---> S = 4*4 +1 / 4 +3 = 17/7 ... até x = n.
  18. Desculpa amigo, acho que você iniciou os estudos nessa linguagem recentemente, certo? O código que eu mandei era uma função e um laço FOR que usa essa função. No exemplo que eu dei, ele guardava os valores num vetor "primo[]". Se você não souber usar vetor ainda, ou não quiser usar, pode imprimir os valores na tela direto. Vou colocar aqui o exemplo do programa, mas você precisa perder 4 dias da sua vida e aprender a sintaxe da linguagem, ou não vai adiantar muito. #include <stdio.h> #include <stdlib.h> int primo(int); int main() { int x=0, i; for(i=100; x<10; i++) if(primo(i)) { printf("%d \n", i); x++; } return 0; } int primo(int p) { int x; for(x=2; x<p; x++) if( (p%x) == 0 ) return 0; return 1; } Ah, eu confundi no começo e pensei que era pra mostrar 100 números. Agora corrigi pra 10. A saída aqui foi essa: 101 103 107 109 113 127 131 137 139 149
  19. for(i=100; x<100; i++) if(primo(i) { primos[x] = i; x++; } int primo(int p) { int x; for(x=2; x<p; x++) if( (p%x) == 0 ) return 0; return 1; } Não testei aqui, mas acho que dá pra entender a lógica. Primeiro um for, com i começando em 100, até que x (o numero de primos) será igual a 100 (quando declarar o x não esqueça de inicializar ele em 0). O for testa todos os números com a função primo, que apenas usa outro for pra testar se o resto da divisão daquele número com outro qualquer é 0 ou não. Se for 0, significa que o número é divisível, e portanto não é primo... então a função retorna 0. Caso o número consiga passar em todos os testes do FOR, a função retorna 1 no final.
  20. Alguma lib não foi linkada ao programa. Esse arquivo tá fazendo chamadas a alguma função que está numa lib que não foi linkada.
  21. No google achei ele pronto, mas não conferi: http://sourceforge.net/projects/qmcs/files/
  22. Bem, se você mudou apenas o valor de n lá no #define, deveria funcionar. Um motivo pode ser que em alguns compiladores, o valor maximo que um int pode pegar é um pouco mais que 65000, então é preciso usar um "long int", em vez de apenas "int" nos valores de i, j, conttroca e contcompara.
  23. #include <stdio.h> #include <stdlib.h> #include <time.h> #define n 6 int main () { int vet[n]; int i , j, aux, conttroca, contcompara; conttroca = 0; contcompara = 0; // inicializar o gerador de números aleatórios srand(time(NULL)); printf ("Numeros do vetor gerados aleatoriamente\n"); for (i=0; i<n; i++) { vet[i] = rand() % 50; printf ("%d \n", vet[i]); } for (i=0; i <(n-1); i++) for (j= (n-1); j >i; j--) { contcompara = contcompara +1; if (vet[j] < vet[j-1]) { aux = vet[j]; // <------------------------------------------ vet [j] = vet [j-1]; vet [j-1] = aux; conttroca = conttroca +1; } } printf("\n"); for (i=0; i<n; i++) printf ("%d \n", vet[i]); printf ("O numero de comparacoes foi de : %d \n", contcompara); printf ("O numero de trocas foi de : %d \n", conttroca); return 0; } Corrigi a linha "aux = vet[j]" e outras coisinhas, e aqui funcionou corretamente. Veja se é o que você quer.
  24. for(indice=0;indice<20;indice++) { printf("Digite o elemento %d do vetor A: ",indice); scanf("%d",&A[indice]); printf("Digite o elemento %d do vetor B: ",indice); scanf("%d",&B[indice]); } C[indice]=A[indice]+B[indice]; Essa linha: C[indice]=A[indice]+B[indice]; deveria estar dentro do FOR. Dica: use uma boa identação (4 espaços, sem fechar chaves na mesma linha, etc) que fica melhor de catar esse tipo de erro.
×
×
  • Criar Novo...