-
Posts
10 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Emerson2156547384729849
-
-
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; }
- 1
-
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; }
- 1
-
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; }
- 1
-
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 7exemplo 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; }
- 1
-
#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.
-
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; }
- 1
-
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; }
- 1
-
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.
- 1
-
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;
}
- 1
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
Pegar valores de um vetor
em C/C#/C++
Postado
@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