×
Ir ao conteúdo
  • Cadastre-se

Emerson2156547384729849

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

Reputação

9
  1. @devair1010 eu não entendi como eu deveria aplicar a ordenação nos dois vetores, já que se eu aplicar a ordenação nos vetores Peso e Vu eles perderiam seu correspondente. Exemplo: Item Valor Peso Vu A 4 12 0,33 B 2 2 1 C 1 1 1 D 2 1 2 E 10 4 2,5 Se aplicarmos a ordenação no vetor Peso e vetor Vu vai ficar: Item Valor Peso Vu A 4 1 0,33 B 2 1 1 C 1 2 1 D 2 4 2 E 10 12 2,5
  2. E ai galera estou fazendo o projeto da faculdade do tema Problema da mochila de algoritmos gulosos e estou sem ideias de como resolver uma coisa. O usuário entrara com um numero para o tamanho da mochila e o numero de itens. Os itens terão o seu peso, seu valor e sua valoração (valoração = Valor/Peso). O algoritmo deve ver nos Valores quais são os números maiores, pegar o peso desse determinado item e diminuir o seu peso do tamanho da mochila. Exemplo: Tamanho da mochila = 15; Numero de itens = 5; Item Valor Peso Vu A 4 12 0,33 B 2 2 1 C 1 1 1 D 2 1 2 E 10 4 2,5 Temos que ver quais são os maiores valores do vetor Vu e pegar o peso correspondente. Como no vetor Vu o maior valor é 2,5 pegamos o peso desse item que é 4 e descontamos da mochila 15-4 =11. Depois pegamos o próximo maior valor que seria o 2 do vetor Vu, e pegamos o peso desse item que é 1 e descontamos da mochila 11-1 = 10. E fazemos esses passos até onde a mochila suportar (mochila >= 0). O problema esta na parte em que eu tenho que pegar o peso do maior valor. Eu declarei vetores separados para o Valor, Peso e Vu. Quando eu acho o maior valor do vetor Vu (nesse exemplo seria o 2,5) como eu pego o seu peso no vetor Peso (que nesse exemplo seria 4)? É nisso que estou travado e não sei como resolver. Desde já agradeço. #include <stdio.h> #include <stdlib.h> #define maxItens 200 //coloque aqui a quantidade maxima de itens int peso[maxItens]; int valor[maxItens]; float Vu[maxItens]; int main(){ int capacidade, i, itens, aux, ItensMax=0; float maior=0; printf("Insira a capacidade da mochila e o numero de itens: "); scanf("%d %d", &capacidade, &itens); while(capacidade){ //lendo os elementos: for(i = 0; i<itens; i++){ printf("Insira o peso e valor do ITEM numero %d: \n", i+1); scanf("%d %d", &peso[i], &valor[i]); //peso do item, valor do objeto } //Fazer a divisaõ de valor/peso e armazena no Vu for(i=0;i<itens;i++){ Vu[i] = (float)valor[i] / peso[i]; } //vai achar o maior valor de todo o vetor Vu, mas o objetico é achar os maiores valores do vetor Vu //e pegar seus deteminados pesos e descontar da mochila for(i=0;i<itens;i++){ if(Vu[i] > maior){ maior = Vu[i]; } } printf("Valor Peso Vu\n"); for(i=0;i<itens;i++){ printf("%d %d %f\n", valor[i], peso[i], Vu[i]); } printf("\n\nMaior valor de Vu: %f", maior); exit(0); } return 0; }
  3. Estou com problema na hora de passar os valores de 3 vetores pra uma matriz. Ex: int Valor[5], Peso[5]; float Vu[5], matriz[5][3]; O meu objetivo é passar os valores dos vetores 'Valor, Peso e Vu' para as colunas da matriz. Por exemplo: Valor = {4, 2, 1, 2, 10}; Peso = {12, 2, 1, 1, 4}; Vu = {0.333, 1, 1, 2, 2.5}; Passando esses valores para a matriz, cada vetor formara uma coluna na matriz: matriz = { {4, 12, 0.333}, {2, 2, 1}, {1, 1, 1}, {2, 1, 2}, {10, 4, 2.5} }; mas não estou conseguindo passar os valores dos vetores para a matriz, alguém pode me ajudar? /* * Problema da mochila booleana */ #include <stdio.h> #include <stdlib.h> #define maxN 200 //coloque aqui a quantidade maxima de objetos #define maxC 1000 //coloque aqui o valor maximo do peso da mochila int peso[maxN+1]; int valor[maxN+1]; int main(){ int capacidade, i, itens; printf("Insira a capacidade da mochila e o numero de itens: "); while(scanf("%d %d", &capacidade, &itens), capacidade ){ //capacidade da mochila, numero de objetos //lendo os elementos: for(i = 0; i<itens; i++){ printf("Insira o valor e o peso do ITEM numero %d: \n", i); scanf("%d %d", &valor[i], &peso[i]); //peso do item, valor do objeto } float vu[itens]; for(int i=0; i<itens; i++){ vu[i] = (float)valor[i] / peso[i]; } printf("Valor Peso Vu\n"); for(int i=0; i<itens; i++){ printf(" %d ", valor[i]); printf(" %d ", peso[i]); printf(" %0.2f \n", vu[i]); } int matriz[itens][3]; for(int i=0;i<itens;i++){ for(int j=0;j<itens;j++){ matriz[i][j] = valor[i]; matriz[i][j] = peso[i]; } } printf("Na matriz: \n"); for(int i=0;i<itens;i++){ for(int j=0;j<itens;j++){ printf("%d", matriz[i][j]); } printf("\n"); } exit(0); } return 0; }
  4. O programa só está funcionado na primeira iteração. Alguém sabe porque só está funcionando na primeira e nas posteriores não? #include<stdio.h> int ChecarVaga(char sala[8][10], int x, int y){ int i = y - 1; int j = x - 1; int maxi = y + 1; int maxj = x + 1; if(i < 0) i = 0; if(maxi > 7) maxi = 7; for(i=i; i <= maxi; i++){ j = x - 1; maxj = x + 1; if(j < 0) j = 0; if(maxj > 7) maxj = 7; for(j=j; j <= maxj; j++){ if(sala[i][j] == 'P'){ return 0; } } } return 1; } // Transforma a Letra em numero int Converte(char letra) { int numero; if (letra == 'a' || letra == 'A') numero = 0; if (letra == 'b' || letra == 'B') numero = 1; if (letra == 'c' || letra == 'C') numero = 2; if (letra == 'd' || letra == 'D') numero = 3; if (letra == 'e' || letra == 'E') numero = 4; if (letra == 'f' || letra == 'F') numero = 5; if (letra == 'g' || letra == 'G') numero = 6; if (letra == 'h' || letra == 'H') numero = 7; return numero; } int main(){ char letra; char sala[8][10] = { '@','@','@','@','@','@','@','@','@','@', '@','@','@','@','@','@','@','@','@','@', ' ','@','@','@','@','@','@','@','@',' ', ' ','@','@','@','@','@','@','@','@',' ', ' ',' ','@','@','@','@','@','@',' ',' ', ' ',' ','@','@','@','@','@','@',' ',' ', ' ',' ',' ','@','@','@','@',' ',' ',' ', ' ',' ',' ',' ','@','@',' ',' ',' ',' ', }; int x, y,i,j,lotado=0,ok; int npessoas = 0; while((!lotado) && (npessoas < 10)){ printf(" 0 1 2 3 4 5 6 7 8 9\n"); //Impressão da matriz for(i = 0; i < 8; i++){ printf("%3c", 65+i); //printf("%3c", 72-i) for(j = 0; j < 10; j++){ printf("%3c", sala[i][j]); } puts(""); } printf("\nDigite uma coordenada (x,y): "); scanf("%c,%d", &letra, &y); x = Converte(letra); ok = ChecarVaga(sala,x,y); if(ok == 0){ printf("Por favor escolha uma localizacao segura\n"); } else{ sala[x][y] = 'P'; npessoas++; } ok = 0; //Checar se esta lotado for(i = 0; i < 8; i++){ for(j =0; j < 10; j++){ ok = ChecarVaga(sala, j, i); if(ok){ break; //sai do loop pois tem vaga disponivel } } } if(!ok){ lotado = 1; printf("Lotacao maxima alcancada!\n"); } } for(i=0; i < 8; i++){ printf("%3c", 65+i); //printf("%3c", 72-i) for(j=0; j < 10; j++){ printf("%3c", sala[i][j]); } puts(""); } printf(" 0 1 2 3 4 5 6 7\n"); return 0; }
  5. E ai rapaziada, beleza? Então, tô com um exercício da faculdade que não tô conseguindo progredir em certas partes dele. O exercício é o seguinte: Crie uma matriz (tela de cinema) que receba uma coordenada no formato, 1° a letra da posição da cadeira(eixo y) seguido pelo numero da cadeira(eixo x). Ao receber as posições da cadeira desejada devesse colocar o caractere 'P' na posição desejada se a posição ao lado (direita e esquerda) e em cima e em baixo estiverem vazias (devido ao distanciamento social), se a posição digitada tiver as cadeiras vizinhas vazias divise reserva essa cadeira com o caractere 'P' e colocar na sua vizinhança o caractere '#' para simbolizar as cadeiras que não podem ser usadas. As partes que eu estou com problema são: 1° Colocar o '#' nas posições vizinhas 2° Minha matriz feita até agora está nesse formato mostrado ao usuário 0 1 2 3 4 5 6 7 7 - - - - - - - - A - - - - - - - - 6 - - - - - - - - B - - - - # - - - 5 - - - - - - - - C - - # P # - 4 - - - - P - - - D - - - # - - 3 - - - - - - - - e o exercício pede que fique nesse formato -> E - - - - 2 - - - - - - - - F - - - - 1 - - - - - - - - G - - 0 - - - - - - - - 0 1 2 3 4 5 6 7 exemplo com coordenada(4,4) exemplo com coordenada(C,4) a matriz que eu fiz ate agora esta recebem os valores em dois números inteiros (x,y) mas o exercício pede que digitemos uma letra seguido de um numero para reserva a vaga (se essa for uma posição segura) e preencher em seu vizinhos com '#' para indicar cadeiras que não podem ser usadas. Então em resumo, o que eu tenho que fazer é 1° receber coordenadas (Letra/numero), 2° modificar a matriz para aparecer no formato que pede, e 3° colocar '#' nas vizinhanças. código até agora: #include<stdio.h> int ChecarVaga(char sala[8][8], int x, int y){ int i = y - 1; int j = x - 1; int maxi = y + 1; int maxj = x + 1; if(i < 0) i = 0; if(maxi > 7) maxi = 7; for(i=i; i <= maxi; i++){ j = x - 1; maxj = x + 1; if(j < 0) j = 0; if(maxj > 7) maxj = 7; for(j=j; j <= maxj; j++){ if(sala[i][j] == 'P'){ return 0; } } } return 1; } int main(){ char sala[8][8] = { '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', '-','-','-','-','-','-','-','-', }; int x, y,i,j,lotado=0,ok; int npessoas = 0; while((!lotado) && (npessoas < 10)){ //Impressão da matriz for(i = 0; i < 8; i++){ printf("%3d", 7-i); //printf("%3c", 72-i) for(j = 0; j < 8; j++){ printf("%3c", sala[i][j]); } puts(""); } printf(" 0 1 2 3 4 5 6 7\n"); printf("\nDigite uma coordenada (x,y): "); scanf("%d,%d", &x, &y); y = 7 - y; ok = ChecarVaga(sala,x,y); if(ok == 0){ printf("Por favor escolha uma localizacao segura\n"); } else{ sala[y][x] = 'P'; npessoas++; } ok = 0; //Checar se esta lotado for(i = 0; i < 8; i++){ for(j =0; j < 8; j++){ ok = ChecarVaga(sala, j, i); if(ok){ break; //sai do loop pois tem vaga disponivel } } } if(!ok){ lotado = 1; printf("Locatacao maxima alcancada!\n"); } } for(i=0; i < 8; i++){ printf("%3d", 7-i); //printf("%3c", 72-i) for(j=0; j < 8; j++){ printf("%3c", sala[i][j]); } puts(""); } printf(" 0 1 2 3 4 5 6 7\n"); return 0; }
  6. #include<stdio.h> #include<string.h> int validaSenha (char frase[20]){ int num, numMinusculo, numMaiusculo, cont; for(int i = 0; frase[i] != '\0'; ++i){ if (strlen(frase) >= 8) cont = 1; if(frase[i] >= 'a' && frase[i] <= 'z'){ ++numMinusculo; } if(frase[i] >= 'A' && frase[i] <= 'Z'){ ++numMaiusculo; } if((frase[i] >= '0') && (frase[i] <= '9')){ ++num; } } if ((cont = 1) && (numMinusculo > 0) && (numMaiusculo > 0) && (num > 0)) return 1; else return 0; } int main(){ char frase[20]; int resultado; printf("Informe sua senha: \n"); gets(frase); resultado = validaSenha(frase); printf("Resulatado: %d", resultado); return 0; } Esse programa que eu estou criando deve receber uma string de tamanho 20. Dentro da função: O programa deve verificar se a string possua pelo menos 8 caracteres. O programa deve verificar se contém ao menos uma letra maiúscula. O programa deve verificar se contém ao menos uma letra minúscula. O programa deve verificar se contém ao menos e ao menos um número. Se o todos os casos acima forem verdadeiros deve retornar 1 caso contrario deve retornar 0. O meu problema nesse codigo é que o meu só está retornando 1 mesmo os casos acima dando falso.
  7. Estou tentando mostras as posições de uma palavra encontrada em uma frase digitada. Exemplo: Entrada: Frase: O rato roel a roupa palavra: ro Saída: A palavra foi encontra. Posição: 8, 15. O programa deve buscar essa palavra na frase e mostra se ela tem, se tiver deve mostrar a posição dela. #include <stdio.h> #include <string.h> #include <stdbool.h> bool existe(char termo[], char frase[]){ int teste[ strlen(termo) ]; int aux; bool ok; //se o termo for maior que a frase if( strlen(termo) > strlen(frase) ){ return false; } //se o termo for do tamanho da frase if( strcmp(termo, frase) == 0){ return true; } //se o termo for menor que a frase for(int i=0; i<= strlen(frase) - strlen(termo); ++i){ if(frase[i] == termo[0]){ for(int k=0; k < strlen(termo); ++k) teste[k]=0; aux=i; for(int j=0; j < strlen(termo);++j){ if(termo[j] == frase[aux]){ teste[j]=1; aux++; } } ok=true; for(int m=0; m< strlen(termo); ++m){ if(teste[m] == 0){ ok=false; } } if( ok ){ return true; } } } return false; } int main() { char frase[100]; char termo[10]; gets(termo); gets(frase); if(existe(termo, frase)){ printf("\n A palavra foi encontrada \n"); }else{ printf("\n A palavra nao foi encontrada \n"); } return 0; }
  8. Eu estou tentando criar um programa que inverta a frase letra a letra. Meu programa está assim no momento. Entrada: olá mundo Saída: odnum alo O desejado: álo odnum Vejo que tem um exercício semelhante a esse nesse cite respondido com funções, mas como eu ainda não aprendi funções tem uma forma de fazer isso sem funções? Desde de já agradeço.😌 #include<stdio.h> #include<string.h> int main(){ char nome[100]; char inverso[100]; int i, h = 0; printf("Digite uma frase: \n"); gets(nome); strlen(nome); for(i = strlen(nome) - 1; i >= 0; --i){ inverso[h] = nome[i]; // inverte a frase toda e joga na string inverso ++h; } inverso[h] = '\0'; printf("\nO inverso: %s \n", inverso); return 0; }
  9. devair1010 é realmente mais fácil criar uma matriz [8][30] do que 8 strings diferentes, valeu. Mas o real problema nesse exercício que eu estou tendo é como remover um nome a cada interação.
  10. Crie um programa que receba o nome dos 8 candidatos em um vetor de strings, onde cada string tem tamanho máximo igual a 30. O programa deve repetidamente apresentar o nome dos candidatos e perguntar ao público (usuário) quem deve sair até que haja apenas três candidatos. Na fase final o público deve escolher quem dentre os três candidatos deve vencer o programa. Eu consegui fazer até a parte que o usuário informa os 8 nomes, mas eu não sei como remover o nome dos candidatos a cada iteração. Alguém pode me ajudar? #include<stdio.h> int main(){ char vetor1[30], vetor2[30], vetor3[30], vetor4[30]; char vetor5[30], vetor6[30], vetor7[30], vetor8[30]; int i; printf("Digite o primeiro candidato: "); scanf("%s", &vetor1); printf("Digite o segundo candidato: "); scanf("%s", &vetor2); printf("Digite o terceiro candidato: "); scanf("%s", &vetor3); printf("Digite o quarto candidato: "); scanf("%s", &vetor4); printf("Digite o quinto candidato: "); scanf("%s", &vetor5); printf("Digite o sexto candidato: "); scanf("%s", &vetor6); printf("Digite o setimo candidato: "); scanf("%s", &vetor7); printf("Digite o oitavo candidato: "); scanf("%s", &vetor8); printf("Quem dever sair?\n"); return 0; }

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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!