Ir ao conteúdo
  • Cadastre-se

isrnick

Membros Plenos
  • Total de itens

    1.196
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

1.108

4 Seguidores

Informações gerais

  • Cidade e Estado
    Sao Paulo
  • Sexo
    Masculino
  1. Você incluiu a biblioteca stdlib.h? malloc, calloc, free, etc pertencem a biblioteca stdlib.h logo deve incluí-la.
  2. Não está ignorando, o problema é que está imprimindo mais linhas do que número de linhas limite do prompt, então a partir de um ponto a cada nova linha impressa as linhas mais antigas vão sendo removidas. Uma solução simples é não criar uma nova linha para cada número e caractere ASCII, imprima mais de 1 na mesma linha.
  3. isrnick

    C Sobre a Função For

    Pra deixar mais claro: for e while são intercambiáveis, ou seja, sempre pode substituir um pelo outro, escolher qual dos 2 usar é apenas uma questão de conveniência ou preferência, dependendo da situação simplesmente faz mais sentido usar um ou outro. No caso do seu ciclo for: int contador; int numero = 1; for (contador=1; contador <= 10; contador = contador+numero) { printf("%i\n", contador); } O ciclo while equivalente seria: int contador; int numero = 1; contador=1; while (contador <= 10) { printf("%i\n", contador); contador = contador+numero; } Note que a linha onde o contador é incrementado fica no final do ciclo while, isso porque como outras pessoas já mencionaram acima, o terceiro parâmetro do ciclo for só é executado após cada execução dos comandos listados dentro do ciclo. Nesse caso a conveniência de usar for ao invés de while é que todas operações referentes ao contador que controla o ciclo ficam na mesma linha (inicialização, condição de parada e incremento), ficando mais fácil detectar erros ou fazer ajustes caso necessário.
  4. Não costumo usar então não sei te indicar o que é melhor, mas buscando no google é fácil achar editor free (tem até um editor online).
  5. @Nachtwolf Nesse caso não tem mesmo opção, os dados nesses arquivos foram definidos pelo responsável por criar o programa, você poderia tentar abrir num programa visualizador e editor de hexadecimal e tentar decifrar o que cada bloco de dados contém, mas provavelmente não vai ser nada trivial.
  6. Esses programas e funções das extensões são muitos distintos entre si, praticamente não tem relação nenhuma um com o outro. Mas imagino que os arquivos que você possui com essas extensões vieram juntos e supostamente estão relacionados entre si, então nesse caso é provável que eles não pertençam a nenhum dessas 3 funções conhecidas para essas extensões.
  7. Nenhum dos 2 códigos usam Insertion Sort (ordenação por inserção). O primeiro código usa Selection Sort (ordenação por seleção), enquanto o segundo trata-se de Bubble Sort (ordenação por flutuação). Vou explicar o conceito de cada um desse 3 métodos de ordenação assumindo em todos os casos que deseja-se ordenar uma lista em ordem crescente (o respectivo nome do algoritmo já é uma boa dica de como eles se comportam): Selection Sort (ordenação por seleção): A partir da primeira posição da lista, para cada posição procura entre todos os itens restantes ainda não ordenados da lista qual é o de menor valor, este item encontrado com o menor valor é selecionado para ser movido para a posição atual, para isso o algoritmo faz a troca de posições do item da posição atual com o item de menor valor, assim conforme o algoritmo avança os itens de menor valor vão sendo movidos para cada posição da lista em sequência ficando em ordem crescente, e no fim a lista fica ordenada. Insertion Sort (ordenação por inserção): Percorre a lista, e a cada novo item da lista move o item para a posição tal que mantém todos os itens já analisados da lista ordenados em ordem crescente, para isso conforme necessário move todos os itens analisados anteriormente com valor maior que o item atual uma posição para a frente na lista, abrindo espaço para inserir o item atual na posição correta tal que mantém todos os itens já processados ordenados, quando o último item for inserido a lista estará ordenada. Bubble Sort (ordenação por flutuação): Percorre a lista várias vezes, comparando cada 2 itens consecutivos da lista, e trocando as posições dos itens se o primeiro item tiver valor maior que o segundo, então os números maiores são movidos para o fim da lista, e a cada vez que termina de percorrer a lista inteira o maior número da lista "flutua" para o fim da lista, e os números maiores vão sendo ordenados do fim da lista para o começo. Se percorrer a lista inteira e nenhuma troca for feita pode parar de percorre-la pois ela já está ordenada, ou então pode parar após percorrer N vezes uma lista com N itens pois essa é a quantidade máxima de vezes que precisa para ordenar todos os itens.
  8. isrnick

    C Bubble Sort em C

    Expliquei o que precisa corrigir nos comentários. (Código foi indentando usando https://www.tutorialspoint.com/online_c_formatter.htm ) #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int x[100],aux,i,j,qdeelementos; i=0; printf("Leitura da lista:\n"); do { printf(" \n [%d] :",i); scanf("%d",&x[i]); i++; } while ((x[i-1]) !=-99 && i<=100); // deveria ser i<100 pois o vetor x não tem índice 100 if (i>100) { // deveria ser i==100 ou i>=100 pela mesma razão qdeelementos=i; } else { qdeelementos= i-1; } printf("%d", qdeelementos); printf("\n============ lista inserida========= \n"); for(i=0; i<qdeelementos;) { printf("-%d",x[i]); i++; } for(i=0; i<qdeelementos; i++) { for(j=0; j<qdeelementos-1; j++) { if( x[j] > x[j+1]) { aux = x[j]; x[j] = x[j+1]; x[i+1] = aux; //O problema está aqui, deveria ser x[j+1] = aux; } } } for(i=0; i<=qdeelementos-1;) { printf("\n -%d",x[i]); i++; } getch(); return 0; }
  9. Como você ainda está começando a aprender C é melhor que sempre use { e } após comandos de controle de fluxo do programa, como for, if, while, etc, mesmo que dentro das chaves só exista 1 comando... E nunca vai ; no final da linha desses comandos (existem alguns poucos casos em que colocar ; nessas linhas é uma opção, e você ainda não chegou no ponto de usar isso, e não será o caso em lugar algum nesse exercício). (Mais pra frente quando já tiver mais prática poderá omitir as chaves quando houver apenas 1 comando, mas primeiro tem que aprender a fazer sempre com chaves. Alguns programadores até preferem sempre usar chaves para manter a consistência do código.) Ok, segue seu código com modificações, fiz apenas essas correções de sintaxe da linguagem C, colocando { e } nos devidos lugares (e removendo os ; onde não deveriam existir), mas não alterei o restante da lógica do seu programa: #include <stdio.h> #include <stdlib.h> int main () { int vet1[5]; int vet2[5], maior, menor, i,j, matriz; for (i=0; i<=4;i++){ printf ("Diga o valor do vetor %d -> ", i+1); scanf ("%d", &vet1[i]); // lê os dados } maior=0; // assume que o maior valor está na primeira posição for (i=1; i<=4;i++){ if (vet1[i] > vet1[maior]){ maior= i; // acha a posição do maior } } for (j=0;j<=4;j++){ menor=0; for (i=1;i<=4;i++){ if (vet1[i] < vet1[menor]){ menor= i; } } vet2[j] = vet1[menor]; vet1[menor] = vet1[maior]; } for (i=0; i<=4; i++){ printf ("%d \n", vet2[i]); // imprime os dados } return 0; } É importante você entender essa parte, note também que fica fácil entender o fluxo dos comandos com todas as chaves { } e com o código bem indentado.
  10. @Flávio Pedroza Em C bool, true e false são definidos da biblioteca stdbool.h, logo se vai usá-los deve incluí-la. (E não está usando as bibliotecas stdlib.h e string.h então não precisa incluí-las.) E aqui está o código do @Flávio Pedroza com apenas algumas modificações para apenas imprimir (escrever) os números não repetidos (não precisando do vetor auxiliar): #include <stdio.h> #include <stdbool.h> /* Leia um vetor com 20 numeros inteiros. Escreva os elementos do vetor eliminando ele- mentos repetidos. */ #define TAM 20 int main() { int vet[TAM], i,j; bool rept; //variavel auxiliar para indicar se existe numero repetido for (i=0; i<TAM; i++) { printf("Digite o %do valor: ", i+1); scanf("%d", &vet[i]); } for (i=0; i<TAM; i++) { rept = false; for (j = 0; j < i; j++) { if (vet[i] == vet[j]) { rept = true; //indica que o numero esta repetido break; } } if (!rept) { //apenas imprime os numeros nao repetidos printf("%d ", vet[i]); } } return 0; }
  11. Mas 0 também é um número inteiro... Ele diz que deve eliminar os repetidos na escrita, ou seja não precisa alterar o vetor, apenas não imprime o número novamente se já tiver impresso, pra isso poderia apenas fazer checar todos os números anteriores do vetor e ver se algum deles é igual ao número atual, se não encontrar nenhum igual então imprime o número atual.
  12. Tentou sem usar start? Colocando só o caminho do arquivo? Normalmente você abre o jogo através de um link? Tem algum parâmetro/configuração extra na linha de comando desse link? Se abrir o Speed.exe clicando nele no Explorer o jogo abre normalmente? Fora isso só consigo pensar em usar runas, que é pra rodar um programa com um usuário específico... Mas não deveria ser necessário.
  13. Seria algo assim: @ECHO OFF :ESPERA TASKLIST /FI "IMAGENAME eq notepad.exe" /FI "STATUS eq running" | FIND /I "notepad.exe" > NUL IF "%errorlevel%"=="1" GOTO ESPERA GOTO INICIO :INICIO TASKLIST /FI "IMAGENAME eq notepad.exe" /FI "STATUS eq running" | FIND /I "notepad.exe" > NUL IF "%errorlevel%"=="1" ( ECHO copiar pasta c:\pasta para d:\pasta aqui GOTO ESPERA ) GOTO INICIO Assumo que o script batch vai ficar sempre rodando, mas quer que ele faça apenas 1 backup quando o aplicativo (no meu exemplo "notepad.exe") está fechado, não infinitos backups, então fiz ele sempre esperar até a próxima vez que o programa abrir novamente após fazer uma cópia/backup.
  14. Não, a ideia é diferente, não fica fazendo divisões pra ver se os números são primos. No crivo de Eratóstenes inicialmente assume-se que todos os números no intervalo são primos (um vetor indica todos inicialmente como true), aí começando do primeiro primo conhecido, o 2, acha todos os múltiplos dele e elimina marcando como não-primos (muda a posição no vetor para false), aí segue até o próximo número após 2 que ainda consta como primo, que é 3, e marca todos os todos os múltiplos de 3 como não-primos, e segue para o próximo número que ainda consta como primo, que é 5, e assim por diante, continuando até chegar na raiz quadrada de 2 milhões que é o intervalo de números que desejamos identificar como primos ou não no nosso caso. Ele usa a característica de que um número só pode ser múltiplo de números primos que vieram antes dele, então conforme vai eliminando os múltiplos dos primos já encontrados, todos os números não-primos no intervalo até o próximo número primo já terão sido eliminados e identificados como tal, sobrando só o próprio próximo número primo corretamente identificado na seqüência. Dê uma lida no artigo da Wikipedia que dá mais detalhes de como o crivo de Eratóstenes funciona. adicionado 32 minutos depois Mas posso fazer uma modificação no algoritmo para eliminar os múltiplos de 2 primeiro separadamente, aí o incremento para encontrar os múltiplos dos outros números primos pode ser 2x o primo: #include <stdio.h> #include <stdbool.h> #include <math.h> int main() { bool primo[2000001] = {false}; int i, j, n, raizQuad; long long somaPrim; n = 2000000; for (i = 2; i <= n; i++){ primo[i] = true; } for (j = 2*2; j <= n; j += 2){ primo[j] = false; } raizQuad = (int) sqrt(n); for (i = 3; i <= raizQuad; i++){ if(primo[i]){ for (j = i*i; j <= n; j += 2*i){ primo[j] = false; } } } somaPrim = 0; for (i = 2; i <= n; i++){ if (primo[i]){ somaPrim += i; } } printf("%lld\n", somaPrim); return 0; }
  15. Segue outra solução que fiz, ainda mais eficiente, usando o crivo de Eratóstenes: https://pt.wikipedia.org/wiki/Crivo_de_Eratóstenes #include <stdio.h> #include <stdbool.h> #include <math.h> int main() { bool primo[2000001] = {false}; int i, j, n, raizQuad; long long somaPrim; n = 2000000; for (i = 2; i <= n; i++){ primo[i] = true; } raizQuad = (int) sqrt(n); for (i = 2; i <= raizQuad; i++){ if(primo[i]){ for (j = i*i; j <= n; j += i){ primo[j] = false; } } } somaPrim = 0; for (i = 2; i <= n; i++){ if (primo[i]){ somaPrim += i; } } printf("%lld\n", somaPrim); return 0; } O tempo de execução desse programa foi de 0.01s, o programa anterior que postei demora de 0.21s a 0.35s, mais de 20 vezes mais lento.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!