Ir para conteúdo
Fórum Script Brasil

Aristóteles

Membros
  • Total de itens

    69
  • Registro em

  • Última visita

Tudo que Aristóteles postou

  1. Adapte em seu código o seguinte algorítmo de ordenamento de strings em ordem alfabética: #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { char nome [4][15], aux [15]; int i, j; for (i=0; i<4; i++) { printf ("Digite o nome %d:",i+1); scanf ("%s", nome[i]); printf ("\n"); } printf ("\nAntes do ordenamento:\n"); for (i=0; i<4; i++) { printf ("Nome %d: %s\n", i+1, nome[i]); } for (i=0; i<4; i++) { for (j=i+1; j<4; j++) { if (strcmp (nome[i], nome[j]) > 0) { strcpy (aux, nome[i]); strcpy (nome [i], nome [j]); strcpy (nome [j], aux); j=i; } } } printf ("\n\nEm ordem alfabetica: \n\n"); for (i=0;i<4;i++) printf ("Nome %d: %s\n", i+1, nome[i]); return 0; }
  2. Bem vindo. Primeiramente, evite usar a biblioteca conio.h cara, ela já é obsoleta e nem é padrão do C. Esse algorítmo parece ser fácil e simples, mas é complexo. Segue o código: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdbool.h> bool rept (int m[], int numero, int tam) { //um bool auxiliar. int q, l; for (q=0; q<tam; q++) { if (numero==m[q]) l=1; else l=0; } if (l==1) return true; else return false; } //ordena maior repetição. Em a[0] será inserida a face com maior número de repetição, e em b[0] a respectiva face. int maior (int a[], int b[], int tam) { int i, j, backup, backup2; for (i=0; i<tam; i++) { for (j=i+1; j<tam; j++) { if (a[i]<a[j]) { backup = a[i]; a[i]=a[j]; a[j]=backup; backup2=b[i]; b[i]=b[j]; b[j] = backup2; } } } return b[0]; } int main () { srand (time(NULL)); bool repet, repet2=false; int dados [5], num_iguais [5], m=0, j, i, facemaisrepetida, aux=0; int entrada; printf ("Bem vindo! Voce deseja:\n1 - Jogar\nOutro - Sair:"); scanf ("%d", &entrada); printf ("\n"); if (entrada != 1) { printf ("\nSaindo\n"); exit (1); } do { printf ("Digite 1 para jogar os cinco dados:"); scanf ("%d", &entrada); printf ("\n"); }while (entrada!=1); // jogar os dados for (i=0;i<5; i++) { dados[i] = 1 + rand () % 5; printf ("Dado %d caiu em %d\n", i+1, dados[i]); } printf ("\nApenas a maior repeticao sera considerada. Se sairem duas duplas, apenas uma sera considerada!"); //conferir se os dados caíram com números iguais for (i=0; i<5; i++) { for (j=i+1; j<5; j++) { if (dados[i]==dados[j]) { if (m==0) { num_iguais[m] = dados[i]; m++; repet2=true; } repet = rept (dados, dados[i], m); if (dados[i]==dados[j] && m!=0 && repet==false) { num_iguais[m] = dados[i]; m++; repet2=true; } } } } int *maior_rept = (int*) calloc (m,sizeof (int)); if (repet2==true) { for (i=0; i<m; i++) { for (j=0; j<5; j++) { if (num_iguais[i]==dados[j]) { maior_rept[i]+=1; } } } facemaisrepetida = maior (maior_rept, num_iguais, m); if (maior_rept[0]==2) printf ("\n\nVoce tirou uma dupla!\n\n"); if (maior_rept[0]==3) printf ("\n\nVoce tirou uma trinca!\n\n"); if (maior_rept[0]==4) printf ("\n\nVoce tirou uma quadra!\n\n"); if (maior_rept[0]==5) printf ("\n\nVoce tirou um FULL GAME, o melhor resultado do jogo!\n\n"); printf ("A face mais repetida foi %d, tirada pelos dados de numero:", facemaisrepetida); for (i=0; i<1; i++) { for (j=0; j<5; j++) { if (num_iguais[i]==dados[j]) { if (aux==0) printf (" %d", j+1); else printf (", %d", j+1); aux++; } } printf (".\n\n"); } } else { printf ("\n\nNenhuma face repetida!\n\n"); } free (maior_rept); maior_rept=NULL; return 0; } Falou.
  3. Sim, num vai sendo somada ++ até que saia do while. Se não fosse somado nada, ou fosse subtraído, o loop seria infinito. E esse cin >> num não é necessário no caso. Isso é para gravar um dado de entrada (do teclado).
  4. #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand (time(NULL)); /*isso é a semente para gerar números aleatórios mesmo, baseado no tempo. sempre use isso para gerar números aleatórios.*/ int CHANCE, AUMENTOMIN, AUMENTOMAX, numrand; CHANCE=0; AUMENTOMIN=3; AUMENTOMAX=15; printf("Percentual de CHANCE: [0,%d]\n\n", 100); for(CHANCE=1 ; CHANCE <= 100 ; CHANCE++) { //uma variável para receber um número aleatório de 1 a 50. Do jeito que estava, era de 0 a 50... numrand = 1 + rand ()%50; if (numrand>40) { printf ("Tentativa de %d: CHANCEMIN: %d\%% CHANCEMAX: %d\%% \nFAVORAVEL.\n\n",CHANCE, numrand+AUMENTOMIN, numrand+AUMENTOMAX); } else { printf ("Tentativa de %d: CHANCEMIN: %d\%% CHANCEMAX: %d\%% \nDESFAVORAVEL.\n\n",CHANCE, numrand+AUMENTOMIN, numrand+AUMENTOMAX); } } return 0; } Veja se isso ajuda... Apenas não coloquei no printf o normal, mas é só colocar %d numrand. Agora é com você. #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand (time(NULL)); /*isso é a semente para gerar números aleatórios mesmo, baseado no tempo. sempre use isso para gerar números aleatórios.*/ int CHANCE, AUMENTOMIN, AUMENTOMAX, numrand; CHANCE=0; AUMENTOMIN=3; AUMENTOMAX=15; printf("Percentual de CHANCE: [0,%d]\n\n", 100); for(CHANCE=1 ; CHANCE <= 100 ; CHANCE++) { //uma variável para receber um número aleatório de 1 a 50. Do jeito que estava, era de 0 a 50... numrand = 1 + rand ()%50; if (numrand>40) { printf ("%d ", numrand); printf ("Tentativa de %d: NORMAL: %d%% CHANCEMIN: %d\%% CHANCEMAX: %d\%% \nFAVORAVEL.\n\n",CHANCE, numrand, numrand+AUMENTOMIN, numrand+AUMENTOMAX); } else { printf ("Tentativa de %d: NORMAL: %d%% CHANCEMIN: %d\%% CHANCEMAX: %d\%% \nDESFAVORAVEL.\n\n",CHANCE, numrand, numrand+AUMENTOMIN, numrand+AUMENTOMAX); } } return 0; } Agora sim
  5. vangodp, quero aprender allegro mas não encontro uma bibliografia e nem instruções de como instalar os pacotes no linux. Poderia ajudar?
  6. A sua questão está um pouco mal explicada, explique mais claramente.
  7. Apenas pequenos ajustes são necessários: #include <stdio.h> #include <stdlib.h> #include <time.h> int main (){ int i; int j; int linhas; int colunas; int ordem; long T1; long T2; float delta; //inicialize só depois de entrar com a ordem, e inicialize com os valores das variáveis linhas e colunas. printf("Digite a ordem das matrizes quadradas A e B: "); scanf("%d", &ordem); T1 = clock(); printf("\nAs matrizes quadradas A e B, são matrizes de ordem %d",ordem); //Diferente de como é na realidade cotidiana, arrays iniciam sempre o primeiro elemento no 0, logo ordem = ordem - 1. ordem = ordem - 1; linhas = ordem; colunas = ordem; //agora sim insira as matrizes: float A[linhas][colunas]; float B[linhas][colunas]; //ajuste os testes lógicos para <= linhas e colunas. Pois quando i == linhas é preciso executar o for ainda mais uma vez. for(i = 0 ; i <= linhas; i++){ for(j = 0; j <= colunas; j++){ printf("\n\nEntre com o valor da matriz A[%d][%d]: ",i+1,j+1); scanf("%f", &A[i][j]); printf("\nEntre com o valor da matriz B[%d][%d]: ",i+1,j+1); scanf("%f", &B[i][j]); } } for(i = 0; i <= linhas; i++){ for(j = 0; j <= colunas; j++){ printf("\nA soma das matrizes A[%d][%d] e B[%d][%d] = %.2f",i+1,j+1,i+1,j+1,A[i][j] + B[i][j]); } } T2 = clock(); delta = (float)(T2-T1)/CLOCKS_PER_SEC; printf("\n\nTempo %.5f segundos",delta); //return 0; return 0; } Inicialize as matrizes só depois de entrar com a ordem e atribui-las a linhas e colunas.
  8. Com vetor é MUITO mais fácil, economiza tempo e energia. Mas como um exercício de raciocínio fazer sem vetor é válido. Código: #include <stdio.h> #include <stdlib.h> int main() { int v1, v2, v3, v4, backup; printf("valor1: "); scanf ("%d", &v1); printf ("\nvalor2: "); scanf ("%d", &v2); printf ("\nvalor3: "); scanf ("%d", &v3); printf ("\nvalor4: "); scanf ("%d", &v4); printf ("\n"); if (v1>v2) { backup=v2; v2=v1; v1=backup; } if (v1>v3) { backup=v3; v3=v1; v1=backup; } if (v1>v4) { backup=v4; v4=v1; v1=backup; } if (v2>v3) { backup=v3; v3=v2; v2=backup; } if (v2>v4) { backup=v4; v4=v2; v2=backup; } if (v3>v4) { backup=v4; v4=v3; v3=backup; } printf ("\n\n %d - %d - %d - %d\n\n", v1, v2, v3, v4); return 0; }
  9. Na alocação dinâmica de *p, deve ser somado TAM+1 para embutir o '\0'. Esqueci desse detalhe.
  10. O seu programa buga quando um caractere é digitado numa variável int? Não sabe como criar uma string com tamanho dinâmico e lendo os espaços? Não sabe como gravar apenas o tipo correto numa variável? Baseando nesses questionamentos eu escrevi um arquivo cabeçalho contendo algumas funções com códigos criados, recriados e reciclados, que resolvem esses problemas sem buscar ajuda em bibliotecas desconhecidas e antigas. Baixe o arquivo gotype.h: LINK DIRETO. LINK Coloque o arquivo na mesma pasta em que compilará o programa, e coloque #include “gotype.h” Ou coloque na pasta dos arquivos e funções padrão, e use #include <gotype.h>. Esse arquivo contém as seguintes funções: goint () - Grava e retorna um valor inteiro, e apenas um valor inteiro. gofloat () - Grava e retorna um valor real, e apenas um valor real. gofloatPTBR () - Funciona do mesmo modo que gofloat, mas para quem usa falcon C++ com mingw quando utilizar setlocale (LC_ALL, “Portuguese”) para trabalhar com os números reais é usada a vírgula e não o ponto. tamstring() - Retorna o tamanho da string a ser gravada gostring (char p[]) - Grava a string na string passada por referência. Primeiro, vamos analisar a goint() na seguinte função que imprime uma pirâmide de asteriscos: #include <stdio.h> #include <stdlib.h> int main () { int altura, i, j=1, backup, backup1, espacos=0; printf ("Digite a altura da piramide: "); scanf ("%d", &altura); for (i=1; i<altura; i++) { espacos+=1; } printf ("\n"); for (i=0; i<altura; i++) { backup=j; backup1=espacos; while (backup1>=1) { printf (" "); backup1--; } while(backup>=1) { printf ("*"); backup--; } j+=2; espacos--; printf ("\n"); } return 0; } Neste código,sem usar goint, o programa buga caoticamente se um char é digitado: Agora, usando o goint (), não existe problema de o scanf forçar a gravação de um tipo errado e incumbir em um erro caótico: # include <gotype.h> int main () { int altura, i, j=1, backup, backup1, espacos=0; printf ("Digite a altura da piramide: "); //------------------------------------------------ altura=goint(); //altura recebe o retorno da função, não é parâmetro. //------------------------------------------------ for (i=1; i<altura; i++) { espacos+=1; } printf ("\n"); for (i=0; i<altura; i++) { backup=j; backup1=espacos; while (backup1>=1) { printf (" "); backup1--; } while(backup>=1) { printf ("*"); backup--; } j+=2; espacos--; printf ("\n"); } return 0; } O gofloat () funciona do mesmo jeito, e um tipo double pode receber o retorno também. # include <gotype.h> int main () { float f; printf ("\nDigite um numero REAL: "); f = gofloat(); printf ("\n\nO número real digitado: %f\n\n", f); return 0; } A notação decimal é necessária na gofloat, por isso digitar "22.00" é aceito normalmente. Agora tamstring () e gostring (char a []); # include <gotype.h> int main () { //para receber o tamanho da string; int TAM; printf ("Digite uma string: "); TAM = tamstring (); printf ("\n\nTamanho da string: %d", TAM); //na alocação, somar TAM+1 para embutir o '\0' char *p = (char*) malloc (TAM+1 * sizeof (char)); if (p==NULL) { /*se houver um erro na alocação é importante liberar a variável global e apontá-la para NULL. Por isso sempre use gostring após tamstring, em gostring ela é liberada e recebe NULL.*/ printf ("\nERRO\n"); free (_str_glob); _str_glob = NULL; exit (1); } //p é passada por referência em gostring() . gostring (p); printf ("\n\nSua string: %s\n\n\n", p); free (p); p = NULL; return 0; } Espero que seja útil. Abraços.
  11. Aristóteles

    Dúvida em String

    muito mais fácil, hahah. #include <stdlib.h> #include <stdio.h> #include <string.h> int main() { char string[101], backup; int tamanho_str; printf("String: "); scanf("%s", string); tamanho_str = strlen (string); backup = string[tamanho_str-1]; string [tamanho_str-1] = string [0]; string [0] = backup; strcat (string, "ay"); printf ("\nstring final: %s\n", string); return 0; } Achei que tinha que colocar o último caractere no primeiro elemento também, mas valeu a intenção. :p
  12. Existe duas formas de imprimir uma piramide de asteriscos. Uma piramide de verdade: # include <stdio.h> # include <stdlib.h> int main () { int altura, i, j=1, backup, backup1, espacos=1; printf ("Digite a altura da piramide: "); scanf ("%d", &altura); for (i=0; i<altura; i++) { espacos+=1; } printf ("\n"); for (i=0; i<altura; i++) { backup=j; backup1=espacos; while (backup1>=1) { printf (" "); backup1--; } while(backup>=1) { printf ("*"); backup--; } j+=2; espacos--; printf ("\n"); } return 0; } E uma do jeito que você quer: # include <stdio.h> # include <stdlib.h> int main () { int altura, i, j=1, backup; printf ("Digite a altura da piramide: "); scanf ("%d", &altura); printf ("\n"); for (i=1; i<=altura; i++) { backup=j; while(backup>=1) { printf ("*"); backup--; } j+=2; printf ("\n"); } return 0; } PS: Se você digitar uma altura muito grande, obviamente a pirâmide poderá sair distorcida por conta dos parágrafos. Bons estudos.
  13. Moçada, fiz um programa que, como na lotofácil, sorteia quinze números de um a vinte e cinco, e uma cartela que gera números de um a vinte e cinco. Enquanto não forem 15 acertos, uma variável somará mais um. Quando acertar 15 números, o programa irá parar com uma parabenização. Consegui em 919621 tentativas. MUITO FÁCIL ACERTAR! kkkkkkk #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand (time(NULL)); int cartela [15], sorteio [15], acertos=0, backup, i,j; double qtd_sort=0; do { for (i=0; i<15; i++) { cartela[i]=1+rand()%25; sorteio[i]=1+rand()%25; } for (i=0; i<15; i++) { for (j=i+1; j<15; j++) { if (cartela[i]==cartela[j]) { while (cartela[i]==cartela[j]) { cartela[i]=1+rand()%25; cartela[j]=1+rand()%25; } i=-1; break; } } } for (i=0; i<15; i++) { for (j=i+1; j<15; j++) { if (sorteio[i]==sorteio[j]) { while (sorteio[i]==sorteio[j]) { sorteio[i]=1+rand()%25; sorteio[j]=1+rand()%25; } i=-1; break; } } } for (i=0; i<15; i++) { for (j=i+1; j<15; j++) { if (cartela[i]>cartela[j]) { backup=cartela[i]; cartela[i]=cartela[j]; cartela[j]=backup; } } } for (i=0; i<15; i++) { for (j=i+1; j<15; j++) { if (sorteio[i]>sorteio[j]) { backup=sorteio[i]; sorteio[i]=sorteio[j]; sorteio[j]=backup; } } } for (i=0; i<15; i++) { for (j=0; j<15; j++) { if (cartela[i]==sorteio[j]) { acertos+=1; break; } } } if (acertos==15) printf ("PARABEEEEEEEEENS VOCE ACERTOU NA LOTOFACIL!\nForam %f tentativas! hahahahah", qtd_sort); else { qtd_sort+=1; acertos=0; printf ("%f\n", qtd_sort); } }while (acertos!=15); return 0; } Enquanto não acertar somará mais uma tentativa.
  14. Aristóteles

    Dúvida - Saída

    Area = PI * raio². Então: #include <iostream> #define PI 3.14 using namespace std; int main() { int raio; float area=0; cout << "Digite o valor do raio: " << endl; cin >> raio; area = PI*(raio*raio); cout << "Area = " << area << "m²"<< endl; return 0; } Calcular se um número é perfeito: #include <iostream> using namespace std; int main() { int SomaDivisores=0, NumeroTeste, i; cout << "Digite um numero para testar se é perfeito: "; cin >> NumeroTeste; for (i=1; i<NumeroTeste; i++) { if (NumeroTeste%i==0) { SomaDivisores+=i; } } if (SomaDivisores==NumeroTeste) { cout << "A soma dos divisores do numero " << NumeroTeste << " com excecao dele mesmo é " << SomaDivisores << endl; cout << "Logo, " << NumeroTeste << " é um numero perfeito" << endl; } else { cout << "A soma dos divisores do numero " << NumeroTeste << " com excecao dele mesmo é " << SomaDivisores << endl; cout << "Logo, " << NumeroTeste << " não é um numero perfeito" << endl; } return 0; } Abraços e bons estudos.
  15. Aristóteles

    Dúvida - Saída

    Use uma variável auxiliar num comando condicional fera! Veja como é simples: #include <iostream> using namespace std; int main () { int i, j, n, m; cout << "Digite o valor de n: "<< endl; cin >> n; cout << "Digite o valor de m: " << endl; cin >> m; cout << "\n"; j=0; for (i=n; i<=m; i++) { if (i%5==0) { if (j==0) cout << i; else cout << "|" << i; j++; } } cout << "\n"; return 0; } Abraços e bons estudos! Esse já foi resolvido, lol. Vou ajudar no outro.
  16. É verdade. Geralmente eu trabalho com global, mas desse jeito aí poupa memória. Eu nem imaginei que a biblioteca stdio.h não tinha sido declarada, pois é a principal em C.
  17. Código FINAL: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdbool.h> int main() { bool SomasIguais; int NumeroDeJogadores; int AuxDo=0; do { if (AuxDo>0) { printf ("Numero de jogadores invalida!\n"); } printf ("Digite a quantidade de jogadores (2-8): "); scanf ("%d", &NumeroDeJogadores); printf ("\n"); AuxDo ++; }while (NumeroDeJogadores > 8 || NumeroDeJogadores < 2); srand (time(NULL)); int jogador [NumeroDeJogadores], backup=0, NumerosGerados [3], SomaDosNumerosGeradosDeCadaJogador [NumeroDeJogadores], i, j; for (i=0; i<NumeroDeJogadores; i++) { for (j=0; j<3; j++) { NumerosGerados[j] = (1 + rand () % 100); backup = backup + NumerosGerados[j]; } SomaDosNumerosGeradosDeCadaJogador [i] = backup; jogador[i] = SomaDosNumerosGeradosDeCadaJogador[i]; backup=0; } //Essa função checa o maior valor e o coloca no primeiro elemento do array. Se existirem valores iguais estarão um adiante do outro. for (i=0; i<NumeroDeJogadores; i++) { for (j=i+1; j<NumeroDeJogadores; j++) { if (SomaDosNumerosGeradosDeCadaJogador[i] < SomaDosNumerosGeradosDeCadaJogador [j]) { backup = SomaDosNumerosGeradosDeCadaJogador[i]; SomaDosNumerosGeradosDeCadaJogador [i] = SomaDosNumerosGeradosDeCadaJogador [j]; SomaDosNumerosGeradosDeCadaJogador [j] = backup; } } } //verifica se há valores iguais. for (i=0; i<NumeroDeJogadores; i++) { for (j=i+1; j<NumeroDeJogadores; j++) { if (SomaDosNumerosGeradosDeCadaJogador[i] == SomaDosNumerosGeradosDeCadaJogador [j]) { SomasIguais = true; printf ("Existem valores iguais dentre os jogadores: \n\n"); break; } else { SomasIguais = false; } } } if (SomasIguais==false) printf ("não existem somas iguais dentre os numeros dos jogadores. \n\n"); //verifica o(s) jogador(es) com maior soma. for (i=0; i<NumeroDeJogadores; i++) { printf ("[Jogador %d somou %d]\n", i+1, jogador[i]); } printf ("\n[Maior Numero é %d]\n", SomaDosNumerosGeradosDeCadaJogador[0]); for (i=0; i<NumeroDeJogadores; i++) { if (jogador[i]==SomaDosNumerosGeradosDeCadaJogador[0] && SomasIguais==false) { printf ("\nMaior soma foi gerada pelo jogador %d, que é %d", i+1, SomaDosNumerosGeradosDeCadaJogador[0]); break; } if (jogador[i]==SomaDosNumerosGeradosDeCadaJogador[0] && SomasIguais==true) { printf ("\nAs maior soma é %d, e foi gerada pelos jogadores: ", SomaDosNumerosGeradosDeCadaJogador[0]); for (j=i; j<NumeroDeJogadores; j++) { if (jogador[j]==SomaDosNumerosGeradosDeCadaJogador[0]) { printf ("%d,", j); } } } } printf (".\n\n"); return 0; } Bons estudos!
  18. Outra coisa, nessa parte: SomaDosNumerosGeradosDeCadaJogador [i] = backup; jogador[i] = SomaDosNumerosGeradosDeCadaJogador[i]; é preciso zerar o backup! SomaDosNumerosGeradosDeCadaJogador [i] = backup; jogador[i] = SomaDosNumerosGeradosDeCadaJogador[i]; backup=0; Bom, fazendo esses ajustes funciona.
  19. #include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdbool.h> int main() { bool SomasIguais; int NumeroDeJogadores; int AuxDo=0; do { if (AuxDo>0) { printf ("Numero de jogadores invalida!\n"); } printf ("Digite a quantidade de jogadores (2-8): "); scanf ("%d", &NumeroDeJogadores); printf ("\n"); AuxDo ++; }while (NumeroDeJogadores > 8 || NumeroDeJogadores < 2); int jogador [NumeroDeJogadores], backup=0, NumerosGerados [3], SomaDosNumerosGeradosDeCadaJogador [NumeroDeJogadores], i, j; for (i=0; i<NumeroDeJogadores; i++) { for (j=0; j<3; j++) { NumerosGerados[j] = 1 + rand () % 100; backup = backup + NumerosGerados[j]; } SomaDosNumerosGeradosDeCadaJogador [i] = backup; jogador[i] = SomaDosNumerosGeradosDeCadaJogador[i]; } //Essa função checa o maior valor e o coloca no primeiro elemento do array. Se existirem valores iguais estarão um adiante do outro. for (i=0; i<NumeroDeJogadores; i++) { for (j=i+1; j<NumeroDeJogadores; j++) { if (SomaDosNumerosGeradosDeCadaJogador[i] < SomaDosNumerosGeradosDeCadaJogador [j]) { backup = SomaDosNumerosGeradosDeCadaJogador[i]; SomaDosNumerosGeradosDeCadaJogador [i] = SomaDosNumerosGeradosDeCadaJogador [j]; SomaDosNumerosGeradosDeCadaJogador [j] = backup; } } } //verifica se há valores iguais. for (i=0; i<NumeroDeJogadores; i++) { for (j=i+1; j<NumeroDeJogadores; j++) { } if (SomaDosNumerosGeradosDeCadaJogador[i] == SomaDosNumerosGeradosDeCadaJogador [j]) { SomasIguais = true; printf ("Existem maiores valores iguais dentre os jogadores: \n\n"); break; } else { SomasIguais = false; } } if (SomasIguais==false) printf ("não existem somas iguais dentre os numeros dos jogadores. \n\n"); //verifica o(s) jogador(es) com maior soma. for (i=0; i<NumeroDeJogadores; i++) { if (jogador[i]==SomaDosNumerosGeradosDeCadaJogador[0] && SomasIguais==false) { printf ("Maior soma foi gerada pelo jogador %d, que é %d", i, SomaDosNumerosGeradosDeCadaJogador[0]); break; } if (jogador[i]==SomaDosNumerosGeradosDeCadaJogador[0] && SomasIguais==true) { printf ("As maior soma é %d, e foi gerada pelos jogadores: ", SomaDosNumerosGeradosDeCadaJogador[0]); for (j=i; j<NumeroDeJogadores; j++) { if (jogador[j]==SomaDosNumerosGeradosDeCadaJogador[0]) { printf ("%d,", j); } } } } printf (".\n\n"); return 0; } Apenas corrija essa parte, uma falha bem oculta: for (j=i+1; j<NumeroDeJogadores; j++) { } if (SomaDosNumerosGeradosDeCadaJogador[i] == SomaDosNumerosGeradosDeCadaJogador [j]) { SomasIguais = true; printf ("Existem maiores valores iguais dentre os jogadores: \n\n"); break; } Esse if é dentro do for: for (j=i+1; j<NumeroDeJogadores; j++) { if (SomaDosNumerosGeradosDeCadaJogador[i] == SomaDosNumerosGeradosDeCadaJogador [j]) { SomasIguais = true; printf ("Existem maiores valores iguais dentre os jogadores: \n\n"); break; } } O else também.
  20. Simplificando para mim mesmo entender melhor, eu deixaria o código assim: #include <stdio.h> #include <stdlib.h> //#include <malloc.h> #include <string.h> int main() { char c, *str = NULL; int i, j = 1; str = (char *) malloc(10 * sizeof(char) + 1); printf("Digite a string: "); i=0, j=0; while ((c = getchar()) != '\n' && /*c != EOF &&*/ c!= '\0') { if (i == 9) { str = (char *) realloc(str, strlen(str) + 10 * sizeof(char) + 1); i=0; } str [j] = c; i++; j++; } str [j+1] = '\0'; puts("\n\n"); printf("%s\n\n", str); free(str); str=NULL; return 0; } Fui.
  21. Em C é preciso fazer algo bem complicado para isso, no C++ já tem essa função que você disse. Mas olhe só um código que um rapaz escreveu, que resolve o problema citado: #include <stdio.h> #include <malloc.h> #include <string.h> int main() { char c, *str = NULL; int i = 0, j = 1; str = (char *) malloc(10 * sizeof(char) + 1); printf("Digite a string: "); while ((c = getchar()) != '\n' && c != EOF && c != '\0') { if (j == 10) { str = (char *) realloc(str, strlen(str) + 10 * sizeof(char) + 1); j = 1; } *(str + i * sizeof(char)) = c; i++; j++; } *(str + i * sizeof(char)) = '\0'; puts("\n\n"); printf("%s\n\n", str); free(str); str=NULL; return 0; } Sempre que a string chega em 10, seu limite, é realocada com mais slots na memória. E char a char a string vai sendo obtida com tamanho dinâmico. Na verdade não char a char, mas sim enquanto não for encontrado o retorno de carro e o fim da string '\0'
  22. Basta modificar (j == 0 && j == 2 && j == 4 && j == 6 && j == 8) para (j == 0 || j == 2 || j == 4 || j == 6 || j == 8) O no primeiro, todas as condições precisam ser verdadeiras para a[j] receber 'x', no segundo apenas um caso, que é o pretendido.
  23. Existe uma função na biblioteca string.h que retorna a quantidade de caracteres de uma string, chamada strlen. A sintaxe é assim: strlen (nome_da_string); Um exemplo: # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { int p; char nome [10] = "Joao"; p = strlen (nome); printf ("\n%d\n", p); return 0; } Fui Já para ler uma string com espaços em branco, um das formas é ajustar o scanf: scanf("%[^\n]s", nome_da_string); [^\n] é uma instrução que diz para gravar tudo que entrou antes do retorno de carro, (enter); Exemplo: #include <stdio.h> #include <stdlib.h> int main () { char string [100]; printf ("Digite uma frase: "); scanf ("%[^\n]s", string); printf ("\n\n"); printf ("A frase que voce digitou é: %s\n", string); return 0; }
×
×
  • Criar Novo...