Ir ao conteúdo
  • Cadastre-se

Gabriel_Moro

Membro Pleno
  • Posts

    102
  • Cadastrado em

  • Última visita

Tudo que Gabriel_Moro postou

  1. int a=12, b=34, i, v[b]; for(i=0;i<b;i++){ v[i]=a*i; }
  2. acho que tua maior duvida é referente a isso... acho que facilitaria se tu lesse como uma string de 4 posições, passando as 2 primeiras posições para uma variável auxiliar, e em seguida usando a função a=atoi(aux) para converte-la para int para a variável a, depois faça o mesmo para para as 2 ultimas posições
  3. Gabriel_Moro

    linguagemC

    diga qual a sua duvida e poste o código que tu já fez....
  4. vetores de tamanhos grandes tipo 1000000 não é possível criar normalmente int v[1000000] mas com o malloc independente do valor isso é possível porém como malloc mexe com a memoria do computador, o limite máximo de espaço que tu pode usar vai ser a memória disponível do computador
  5. sim, existe como delimitar um tamanho por exemplo... #include <stdio.h> #include <stdlib.h> int main(void) { setbuf(stdout,NULL); int tam; printf("Digite tamanho:"); fflush(stdin); scanf("%i",&tam); int *v=(int *)(malloc(tam*sizeof(int))); for(int i=0;i<tam;i++){ printf("Digite valor:"); fflush(stdin); scanf("%i", &(*(v+i))); } printf("\nVetor:\n"); for(int i=0;i<tam;i++){ printf("%i\t",*(v+i)); } return EXIT_SUCCESS; } eu leio um valor x e aloco memoria com base nele...
  6. na verdade com apenas sizeof(int) tu esta dizendo pro malloc que quer um espaço de memória de 1 int, com 10*sizeof(int) tu esta dizendo ao malloc que quer um espaço de 10 int a sintaxe correta é ponteiro = (int *)malloc (10*sizeof (int)); também é possível fazer assim ponteiro = (int *)malloc (sizeof (v[ 10 ]));
  7. Gabriel_Moro

    Linguagem C

    crie um contador para cada vogal ou um vetor de 5 posições (para ser o contador) zere os contadores teste a frase da posição inicial ate a final (tem que saber o tamanho da frase) então se encontra uma vogal 'a' soma para aquele contador como tu quer saber só sobre as vogais (não sei se tu quer contabilizar as que forem maiúsculas), transforme todas as maiúsculas em minusculas e trabalhe só com letras minusculas
  8. Como eu encontro um termo de uma lista organizada como na foto SETOREL *achaSet(char st[30], SETOREL *inicio) { SETOREL *setEss = NULL; if (inicio == NULL) return NULL; if (strcmp(inicio->dadoS.setor, st) == 0) { setEss = inicio; } else { setEss = achaSet(st, inicio->nHierar); setEss = achaSet(st, inicio->mHierar); } return setEss; } SETOREL *achaSetor(char st[30]) { SETOREL *setEss; setEss = achaSet(st, inicio); return setEss; }
  9. Gabriel_Moro

    Pilha e Fila

    poste o código que tu já fez para podermos ver...
  10. Crie um post novo com a tua duvida, e já diga qual a estrutura de dados pretende usar...
  11. #include <stdio.h> #include <stdlib.h> int soma(int i, int *v, int s); int main(int argc, char *argv[]) { int j, vet[3], s=0; int i=2; printf("Digite 3 numeros inteiros: "); for(j=0; j<3; j++){ scanf("%d", &vet[j]); fflush(stdin); } printf("O somatorio dos numeros é: %d", soma(i,vet, s)); return 0; } int soma(int i, int *v, int s){ if (i == -1) return s; else{ s+=*(v+i); soma(i-1,v, s); } } fiz correções no teu código...
  12. int soma(int vet[3], int i, int soma){ if(i==3) return soma; else{ soma+=vet[i]; i++; soma(vet, i, soma); } } eu faria assim...
  13. LOL, consegui implementar corretamente o LRU por alguma razão desconhecida a logica que eu botei como comentário não funciona separaEndereco(tamanhoC, cache, info, palavraC, conjuntoC, rotuloC, i); int r1, r2; //ok=0; //for(l=0;l<32;l++){ // if(rotuloC[i][l]==rotuloTeste[j][l]){ // ok++; // } //} r1=binDec(info.bitsRotulo, tam, rotuloTeste, j); r2=binDec(info.bitsRotulo, tamanhoC, rotuloC, i); cont++; //if(ok==info.bitsRotulo){ if(r1==r2){ foi=1; *acerto=1; }
  14. resolvi este problema de interferência transformando a matriz string em matriz inteiros, mas se alguém souber como funciona uma LRU aceito uma ajuda... cache 5.rar
  15. Gabriel_Moro

    algorítmos

    são 2 funções 1-criptografa e outra 2-descriptografa? como tu retorna a string gerada? por parametro ou por retorno? //dica: trabalhe com strings crie um vetor alfabeto{a...z} crie um vetor alfaencriptado{1...}
  16. tu tem o código em portugol feito? se tiver poste ele...
  17. for(i=0;i<1000;i++){ if(q==0){ num[q]=v[i]; cont[q]++; q++; }else{ achou=0; j=0; while(j<q && achou==0){ if(num[j]==v[i]){ achou=1; cont[j]++; }else j++; } if(achou==0){ num[q]=v[i]; cont[q]++; q++; } } } a lógica que eu usei foi essa, tente compreende-la
  18. Gabriel_Moro

    função

    fiz algumas anotações que vai te ajudar arrumar, e uma observação, use parâmetros para se comunicar com as funções, porque elas precisam se comunicar umas com as outras //sem parâmetros teu código não vai rodar main.rar
  19. int valor=1000, jedi=1000, forca=1000; int n=6; int total=0, i; forca*= 2; total+=forca; jedi+= 1000; total+=jedi; for (i=2 ; i <n ; i++ ) { if (i % 2 != 0) { forca*= 2; total+=forca; } else { jedi+= 1000; total+=jedi; } } como tu quer fazer os dois primeiros ciclos fora do for ficaria assim... adicionado 4 minutos depois faltou somar total e i é < porque tu tirou dois ciclos então ciclo 0 1 2 3 (total 4 ciclos, dois foram feitos fora do for)
  20. teste o código que eu coloquei (teste como esta estruturado), ao testa-lo obtive 11000 use i<n o total para funcionar é necessário que seja 1 só com essa lógica todos os ciclos são feitos no for
  21. int valor=1000, jedi=1000, forca=1000; int n=4; int total=0, i; for (i=0 ; i <n ; i++ ) { if (i % 2 != 0) { forca*= 2; total+=forca; } else { jedi+= 1000; total+=jedi; } } todo o esquema esta no total...
  22. O esboço da cache esta pronto, então comecei a implementar as politicas de substituição comecei pela LRU que estou tendo dificuldades, fiz a cache como uma matriz, se o endereço não existe na cache acho a posição adequada e coloco o endereço correto nela, mas na matriz esta aparecendo um monte de lixo depois do endereço #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <conio.h> #define tamanhoTeste 100 #define tamanhoOficial 51200 typedef struct informacao { int bitsPalavra; int numeroLinhasConjunto; int tamanhoCache; int bitsTamanhaoLinha; int bitsTamanhoCache; int bitsConjunto; int bitsRotulo; int politicaEscrita; int politicaSubstituicao; } INFO; typedef struct estatisticas { int hit; int miss; int leiturasCache; int escritasCache; } ESTAT; INFO lerInfomacao() { int aux, aux2; INFO info; info.tamanhoCache = 0; info.bitsTamanhoCache = 0; info.bitsPalavra = 0; info.bitsTamanhaoLinha = 0; info.numeroLinhasConjunto = 0; info.bitsConjunto = 0; info.bitsRotulo = 0; info.politicaEscrita = 0; info.politicaSubstituicao = 0; printf("Digite o tamanho da memoria cache (KB): "); scanf("%d", &info.tamanhoCache); fflush(stdin); aux = info.tamanhoCache; while (aux > 1) { aux /= 2; info.bitsTamanhoCache++; } info.bitsTamanhoCache += 10; printf("Digite o tamanho da linha (BYTES): "); scanf("%d", &aux); fflush(stdin); while (aux > 1) { aux /= 2; info.bitsPalavra++; } info.bitsTamanhaoLinha = info.bitsTamanhoCache - info.bitsPalavra; printf("Digite o numero de linhas por conjunto: "); scanf("%d", &info.numeroLinhasConjunto); fflush(stdin); aux = (pow(2, info.bitsTamanhaoLinha)); aux2 = aux / info.numeroLinhasConjunto; while (aux2 > 1) { aux2 /= 2; info.bitsConjunto++; } info.bitsRotulo = 32 - (info.bitsConjunto + info.bitsPalavra); do { printf( "\n1-Write-through\n2-Write-back\nDigite qual politica de escrita deseja utilizar: "); scanf("%d", &info.politicaEscrita); fflush(stdin); if (info.politicaEscrita < 1 || info.politicaEscrita > 2) printf("Opção invalida!"); } while (info.politicaEscrita < 1 || info.politicaEscrita > 2); do { printf( "\n1-LFU (Least Frequently Used)\n2-LRU (Least Recently Used)\n3-Aleatória\nDigite qual politica de escrita deseja utilizar: "); scanf("%d", &info.politicaSubstituicao); fflush(stdin); if (info.politicaSubstituicao < 1 || info.politicaSubstituicao > 3) printf("Opção invalida!"); } while (info.politicaSubstituicao < 1 || info.politicaSubstituicao > 3); return info; } char *hexBin(INFO info, int tam, char enderecoHexaTeste[10]) { char nibble[32]; static char enderecoBinarioTeste[32]; int k; strcpy(enderecoBinarioTeste, ""); for (k = 0; k < 8; k++) { strcpy(nibble, ""); switch (enderecoHexaTeste[k]) { case '0': strcpy(nibble, "0000"); break; case '1': strcpy(nibble, "0001"); break; case '2': strcpy(nibble, "0010"); break; case '3': strcpy(nibble, "0011"); break; case '4': strcpy(nibble, "0100"); break; case '5': strcpy(nibble, "0101"); break; case '6': strcpy(nibble, "0110"); break; case '7': strcpy(nibble, "0111"); break; case '8': strcpy(nibble, "1000"); break; case '9': strcpy(nibble, "1001"); break; case 'a': strcpy(nibble, "1010"); break; case 'b': strcpy(nibble, "1011"); break; case 'c': strcpy(nibble, "1100"); break; case 'd': strcpy(nibble, "1101"); break; case 'e': strcpy(nibble, "1110"); break; case 'f': strcpy(nibble, "1111"); break; } strcat(enderecoBinarioTeste, nibble); } enderecoBinarioTeste[32] = '\0'; return enderecoBinarioTeste; } void separaEndereco(char enderecoBinario[30], INFO info, char palavra[info.bitsPalavra], char conjunto[info.bitsConjunto], char rotulo[info.bitsRotulo]) { strcpy(rotulo, ""); strcpy(conjunto, ""); strcpy(palavra, ""); int i, j = 0, k = 1; for (i = 0; i < 32; i++) { if (k == 1) { if (j < info.bitsRotulo && k == 1) { rotulo[j] = enderecoBinario[i]; j++; } else { rotulo[j] = '\0'; j = 0; k = 2; } } if (k == 2) { if (j < info.bitsConjunto && k == 2) { conjunto[j] = enderecoBinario[i]; j++; } else { conjunto[j] = '\0'; j = 0; k = 3; } } if (k == 3) { if (j < info.bitsPalavra && k == 3) { palavra[j] = enderecoBinario[i]; j++; } else { palavra[j] = '\0'; j = 0; k = 0; } } } palavra[info.bitsPalavra] = '\0'; } int binDec(int bits, char coisa[bits]) { int coi = 0, i = bits - 1, j = 0; while (j < bits) { if (coisa[j] == '1') { coi += pow(2, i); } i--; j++; } return coi; } int inicioConjuntoCache(INFO info, char conjunto[info.bitsConjunto]) { int conj = binDec(info.bitsConjunto, conjunto); int linhaCacheAcessada = conj * info.numeroLinhasConjunto; return linhaCacheAcessada; } void politicaLRU(INFO info, int linhaCacheAcessada, int tamanhoC, char cache[tamanhoC][32], char enderecoBinarioTeste[30], int LRU[tamanhoC]) { int i = linhaCacheAcessada, pos, achou = 0; int menor = LRU[linhaCacheAcessada]; while (i < (linhaCacheAcessada + info.numeroLinhasConjunto) && achou == 0) { if (strcmp(cache[i], "")==0) { strcpy(cache[i], enderecoBinarioTeste); achou=1; }else i++; //if(LRU[i]<menor){ //menor=LRU[i]; //pos=i; //} //i++; } cache[i][32]='\0'; //strcpy(cache[i], enderecoBinarioTeste); //strcpy(cache[pos], enderecoBinarioTeste); /*for (i = linhaCacheAcessada; i < linhaCacheAcessada + info.numeroLinhasConjunto; i++) { if (strcmp(cache[i], "#") != 0) { if (LRU[i] < menor) { menor = LRU[i]; pos = i; } } else { strcpy(cache[i], enderecoBinarioTeste); pos = -1; break; } } if (pos != -1) { strcpy(cache[pos], enderecoBinarioTeste); }*/ } void verificaLinhaRotuloCache(INFO info, int linhaCacheAcessada, int tamanhoC, char cache[tamanhoC][32], char palavraTeste[info.bitsPalavra], char conjuntoTeste[info.bitsConjunto], char rotuloTeste[info.bitsRotulo], int LRU[tamanhoC], int *acerto, char enderecoBinarioTeste[30]) { int i; char rotuloC[info.bitsRotulo]; char conjuntoC[info.bitsConjunto]; char palavraC[info.bitsPalavra]; *acerto = 0; for (i = linhaCacheAcessada; i < linhaCacheAcessada + info.numeroLinhasConjunto; i++) { separaEndereco(cache[i], info, palavraC, conjuntoC, rotuloC); if (strcmp(rotuloC, rotuloTeste) == 0) { *acerto = 1; } else { LRU[i]++; } } if (*acerto == 0) { if (info.politicaSubstituicao == 2) { politicaLRU(info, linhaCacheAcessada, tamanhoC, cache, enderecoBinarioTeste, LRU); } } /*while (i < i + numeroLinhasConjunto && achou == 0 && i < tamanhoC) { if(strcmp()) printf("RotuloC: %s Rotulo MP: %s\n",rotuloC, rotulo); if (strcmp(rotuloC, rotulo) == 0) achou = 1; else { LRU[i]++; i++; } } if (achou == 1) { hit++; } else { miss++; if (politicaSubstituicao == 2 && linhaCacheAcessada<tamanhoC) { substituiLRU(tamanhoC, cache, numeroLinhasConjunto, enderecoBinario, linhaCacheAcessada, LRU); } }*/ } void leArquivo(INFO info) { int op; int tam; FILE *f; do { printf( "\n1-Teste.cache\n2-Oficial.cache\nEscolha qual arquivo deseja usar: "); scanf("%d", &op); fflush(stdin); if (op < 1 || op > 2) printf("Opção invalida!\n"); } while (op < 1 || op > 2); switch (op) { case 1: tam = tamanhoTeste; f = fopen("teste.cache", "r"); break; case 2: tam = tamanhoOficial; f = fopen("oficial.cache", "r"); break; } char enderecoHexaTeste[tam][10], tipoOperacaoTeste[tam][10], dado[10]; int i, k = 0, j = 0; for (i = 0; i < (tam * 2); i++) { fgets(dado, sizeof(dado), f); if (i % 2 == 0) { strcpy(enderecoHexaTeste[k], dado); k++; } else { strcpy(tipoOperacaoTeste[j], dado); j++; } } fclose(f); char palavraTeste[info.bitsPalavra]; char conjuntoTeste[info.bitsConjunto]; char rotuloTeste[info.bitsRotulo]; char *enderecoBinarioTeste; int tamanhoC = (pow(2, info.bitsConjunto) * info.numeroLinhasConjunto); char cache[tamanhoC][32]; int LRU[tamanhoC]; int linhaCacheAcessada; int acerto; ESTAT estat; estat.hit = 0; estat.miss = 0; for (i = 0; i < tamanhoC; i++) { LRU[i] = 0; } for (i = 0; i < tamanhoC; i++) { strcpy(cache[i], ""); } for (i = 0; i < tam; i++) { enderecoBinarioTeste = hexBin(info, tam, enderecoHexaTeste[i]); separaEndereco(enderecoBinarioTeste, info, palavraTeste, conjuntoTeste, rotuloTeste); linhaCacheAcessada = inicioConjuntoCache(info, conjuntoTeste); verificaLinhaRotuloCache(info, linhaCacheAcessada, tamanhoC, cache, palavraTeste, conjuntoTeste, rotuloTeste, LRU, &acerto, enderecoBinarioTeste); if (acerto == 1) { estat.hit++; } else { estat.miss++; } //printf("endB: %s R: %s C: %s P: %s lA: %d\n", enderecoBinarioTeste, // rotuloTeste, conjuntoTeste, palavraTeste, linhaCacheAcessada); } for (i = 0; i < tamanhoC; i++) { printf("EndC: %s\n", cache[i]); } printf("H: %d M:%d\n", estat.hit, estat.miss); } int main(void) { setbuf(stdout, NULL); INFO info; info = lerInfomacao(); leArquivo(info); return EXIT_SUCCESS; } os dados que eu uso para testar são tamanho cache 8, tamanho linha 16, linha por conjunto 2 o arquivo de endereços usado é esse (para poder posta-lo tirei a extensão .cache) cache.txt
  23. tu não pode usar o mesmo índice para passar pelo va e pelo vb int va[5],vb[5], você[10], i, j=0, k=0; for(i=0;i<10;i++){ if(i%2==0){ você[i]=va[j]; j++; }else{ você[i]=vb[k]; k++; } } adicionado 3 minutos depois o for de mostra não pode estar dentro do for que esta
  24. tu não aplicou a logica corretamente tu tem um vetor de 1000 números gerados randomicamente de 0 a 149, quer dizer que só há 150 números diferentes o resto se repete, então v[1000], v2[150], v3[150], v2 guarda o numero lido no v, v3 que sempre esta na mesma posição do v2 conta quantas vezes o numero lido no v se repete no v2 faltou o include < time.h > faltou alguns índices nos vetores esse for é i < 1000 //vetor vai ate 1000 não esta estruturado adequadamente os for são 4 for independentes um do outro 1° gera valores do v 2° zera v3 contador 3°logica onde tu verifica os valores //+- como expliquei no outro post //dentro desse for é importante que tu use o while para verificar o v com v2 juntamente com uma variável logica poque essa variável interrompe o while na posição correta 4° mostra o v2 e v3 lembre-se que quando tu começa a verificação o v2 e o v3 não possuem valores inseridos, então utilize uma variável quantidade que tu incrementa a medida que valores são inseridos no v2

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!