Jump to content
Fórum Script Brasil

Aristóteles

Membros
  • Posts

    55
  • Joined

  • Last visited

Everything posted by Aristóteles

  1. #include <stdio.h> #include <stdlib.h> #include <time.h> void rodarroleta() { printf ("\nPara girar a roleta, pressione ENTER\n"); while (getchar () != '\n'); } int main() { srand (time(NULL)); int numero=1; rodarroleta(); do { if (numero%2==0) { printf ("\nVocê acertou um número par, tem direito a uma nova jogada... \n"); rodarroleta(); } numero = 1 + rand () % 35; if (numero==7) printf ("\nVOCÊ GANHOU O MAIOR PRÊMIO!, acertou o número %d\n", numero); else printf ("Você tirou o número %d\n", numero); }while (numero%2==0); printf ("\n\nFIM\n\n"); return 0; }
  2. Você pode usar um alinhamento de if e else if ou switch para fazer isso. Grave a entrada numa variável e faça os testes lógicos.
  3. E mais uma coisa importante, quando if (texto[i]==' ' || texto[i]=='\0') antes de tudo coloque aux[j]='\0'; Atribuindo caractere por caractere é necessário fazer isso. Fui.
  4. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<locale.h> const int TAM_TEXTO = 100; const int TAM_PALAVRA = 50; int conta_ocorrencia_palavra(char texto[], int TAM, char palavra[], int TAM2) { printf ("\n\n%d\n\n", TAM); int igual = 0, i=0, j=0; char aux [TAM_PALAVRA]; strcpy (aux, ""); for (i=0; i<TAM+1; i++) { if (texto[i]==' ' || texto[i]=='\0') { if (strcmp (aux, palavra)==0) igual++; strcpy(aux, ""); j=0; } else { aux[j]=texto[i]; j++; } } printf ("\n%d\n", igual); return 0; } int main(){ //setlocale(LC_ALL,"Portuguese"); char texto[TAM_TEXTO],palavra[TAM_PALAVRA]; printf ("\nTEXTO:"); scanf("%[^\n]s",texto); printf ("\n%s\n", texto); printf ("\nPALAVRA:"); scanf("%s",palavra); conta_ocorrencia_palavra(texto, strlen(texto), palavra, strlen(palavra)); //system ("pause"); return 0; } Você precisa passar aonde a string acaba, é um array de caracteres e está na função main. E no for principal, que trabalha caractere por caractere da string texto, é preciso somar+1 no TAM ou colocar i<=TAM , pois o final do texto não é ' ' e sim '\0', isso serve para que a ultima palavra da string também tenha efeito na função.
  5. quais das linhas (0,1,2,3) devem ser par e quais impar
  6. O raciocínio está correto, basta utilizar mais uma variável para fazer o backup da média. Veja só: #include <stdio.h> #include <stdlib.h> int main () { float altura, media=0, backup_media=0; int idade=10, cont=0; while (idade > 0) { printf ("DIGITE A IDADE:"); scanf ("%d", &idade); printf ("DIGITE A ALTURA:"); scanf ("%f", &altura); printf ("\n"); if (idade >50) { cont++; backup_media+=altura; media=backup_media; media/=cont; } printf ("A media de altura das pessoas com mais de 50 anos é: %f\n\n", media); } return 0; } Se o cálculo for feito apenas somando media = media + altura; media / cont; O valor bruto da média aritmética é perdido a cada operação. Por isso o uso de uma variável de backup: backup_media+=altura; media=backup_media; media/=cont; backup_media sempre mantém o valor bruto da soma de todas as alturas, e a variável média recebe apenas a média aritmética desse valor bruto fazendo a divisão de acordo com a contagem da variavel cont. Até.
  7. O erro mais evidente está nas letras maiúsculas, Return, Printf, Float, são iniciais minúsculas.
  8. Dê uma estudada em funções virtuais e em funções publicas que permitem esse tipo de acesso externo.
  9. Pode ser aí o problema. :)
  10. Para isso, inclua a biblioteca time.h, e coloque srand (time(NULL)), de preferência logo no inicio da função main. Exemplo: #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { srand (time(NULL)); int a; a = 1 + rand () % 100; printf ("\n%d\n", a); return 0; } Repare no tamanho que você define sua matriz: int matriz[100][2]; Lembre-se, vetores iniciam no zero e vão até o tamanho -1. Nesse caso, de 0 a 99 linhas, e 0 a 1 colunas. O provável erro está nessa parte: int a = ; for (a = ; a<101; a++) { matriz[a][] = 10; matriz[a][1] = 100; matriz[a][2] = 100; } Você está usando a sua matriz como se fosse de 0 a 100 linhas e não 0 a 99, pois <<a>> é incrementado de 0 até 100 e está usando 0 a 2 colunas. Para resolver isso é simples. Se você quiser uma matriz que vai de 0 a 100 linhas, e 0 a 2 colunas: int matriz [101][3]. se quer de 0 a 99 linhas e 0 a 2 colunas: int matriz [100][3]. Feita essa correção, ajuste esse for e o seu programa estará redondinho.
  11. #include <iostream> #include <stdbool.h> using namespace std; int main() { cout << "Determinar o maior múltiplo de um inteiro dado menor do que ou igual a um outro inteiro dado.\n" << endl; bool ExisteMult=false; int i, M, N, backup, j; cout << "Digite um valor:"<< endl; cin >> M; cout << "Digite outro valor:"<< endl; cin >> N; if (M>N) { backup=N; N=M; M=backup; } cout << "\nEntrada:\n\n" << M << "\n\n" << N; cout << endl; for (i=M; i<=N; i++) { if ((M*i) <= N) { ExisteMult=true; j=(M*i); } } if (ExisteMult==false) cout << "\nNenhum multiplo existe nas condicoes de entrada definidas" << endl; else cout << "\nO maior multiplo entre " << M << " e " << N << ": " << j << endl; return 0; }
  12. 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; }
  13. 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.
  14. 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).
  15. #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
  16. vangodp, quero aprender allegro mas não encontro uma bibliografia e nem instruções de como instalar os pacotes no linux. Poderia ajudar?
  17. A sua questão está um pouco mal explicada, explique mais claramente.
  18. 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.
  19. 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; }
  20. Na alocação dinâmica de *p, deve ser somado TAM+1 para embutir o '\0'. Esqueci desse detalhe.
  21. 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.
  22. 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
  23. 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.
×
×
  • Create New...