General Shepherd
Membros-
Total de itens
17 -
Registro em
-
Última visita
Sobre General Shepherd
General Shepherd's Achievements
0
Reputação
-
Eaí galera, eu tenho um trabalho para fazer na faculdade que consiste em implementar e medir o tempo de execução de diversas funções de ordenação... Quando eu estava implementando o quicksort me surgiu uma duvida: como eu escolho o pivô? Há algum crtério para determinar qual elemento será o pivo? Obrigado PS: O vetor a ser ordenado é uma string.
-
Eu não entendi direito a sua pergunta, mas se você quiser voltar ao entrar em um if, pode usar o do while, +- assim: bool var = false; do{ ... if(...) var=true; ... }while(var==false); Nesse caso ele ficará num loop até que a condição do if seja satisfeita, quando o if for satisfeito, logo em seguida o do while também será. Ou você pode usar o goto, mas é altamente recomendado que você não o faça. Ficaria +- assim: loop: if(...) goto loop; Nesse caso, se ele entrar no if, ele retornará ao marcador "loop:" Explique melhor o seu raciocínio para podermos ajudar melhor...
-
Problemas com a função "do while"
pergunta respondeu ao Wesley Vinicius de General Shepherd em C, C++
Vocês 2 esqueceram o mais básico. Incrementar as variáveis a e b a cada loop. E a condição do for está errada ;D Acho que desse jeito deve funcionar: #include <stdio.h> #include <stdlib.h> int main(){ int a, b, d; printf("Digite um numero: "); scanf("%d", &a); printf("\nDigite outro numero: "); scanf("%d", &b); printf("\nDigite o limite: "); scanf("%d", &d); if(a>d || b>d) printf("\n\nVáriáveis maiores que o limite. Impossivel continuar!\n"); else for(;a <= d || b <= d; a++, b++) printf("Soma de a + b = %d\n", a + b); system("pause"); return 0; } Eu fiz o seguinte: 1)Removi o #include <string.h>, visto que era desnecessário; 2)Para diminuir o tamanho do codigo como foi pedido, removi as chaves e printf's desnecessários; 3)Consertei o for. Não havia necessidade da variavel "i", nem mesmo da variável "c"... Só não entendi o seguinte em relação ao algoritmo: O programa para quando o "a" ou o "b" chegam ao limite, ou quando a soma dos dois chega ao limite? Anyway... o programa que eu fiz para quando alguma das variáveis, "a" ou "b", chega ao limite "d". Não testei o codigo, se tiver algum erro, avise ;D -
Você terá que declarar a matriz dinamicamente, usando malloc(). Esse código gera uma matriz dinâmica m x n float **Alocar_matriz_real (int m, int n) { float **v; /* ponteiro para a matriz */ int i; /* variavel auxiliar */ if (m < 1 || n < 1) { /* verifica parametros recebidos */ printf ("** Erro: Parametro invalido **\n"); return (NULL); } /* aloca as linhas da matriz */ v = (float **) calloc (m, sizeof(float *)); if (v == NULL) { printf ("** Erro: Memoria Insuficiente **"); return (NULL); } /* aloca as colunas da matriz */ for ( i = 0; i < m; i++ ) { v[i] = (float*) calloc (n, sizeof(float)); if (v[i] == NULL) { printf ("** Erro: Memoria Insuficiente **"); return (NULL); } } return (v); /* retorna o ponteiro para a matriz */ } Se quiser aumentar o tamanho da matriz posteriormente você deve usar o realloc. Não se esqueça de liberar a matriz ao termino do programa: float **Liberar_matriz_real (int m, int n, float **v) { int i; /* variavel auxiliar */ if (v == NULL) return (NULL); if (m < 1 || n < 1) { /* verifica parametros recebidos */ printf ("** Erro: Parametro invalido **\n"); return (v); } for (i=0; i<m; i++) free (v[i]); /* libera as linhas da matriz */ free (v); /* libera a matriz */ return (NULL); /* retorna um ponteiro nulo */ } Os código podem parecer complicados no inicio, procure algum livro que explique mais detalhadamente, assim você irá entender melhor ;D
-
Programa de lista simplesmente encadeada não compila...
pergunta respondeu ao zorkim de General Shepherd em C, C++
Você está com problema na linkagem das bibliotecas pelo jeito. O programa está correto. Compilei aqui de boa no CodeBlocks. Esse mesmo erro já aconteceu comigo, mas não tenho certeza qual é o motivo, tente reinstalar o Dev ;D -
Muita gente comete esse mesmo erro. O Switch executa o que esta no bloco correspondente à opção e tudo o que vem abaixo também. A menos que se utilize o break.
-
1° Caso: Sim 2° e 3° casos: São funções que retornam um ponteiro do tipo especificado. A 1° retorna um ponteiro para uma variável do tipo CampoMinado, enquanto a 2° retorna um ponteiro para int.
-
Bastava testar se era zero antes de testar se era par ou impar: int verifica(int a){ //Se for zero if(a==0) return -1; //Se for par... if(a % 2 == 0) return 0; //Se for impar... else if(a%2==1) return 1; }
-
Vamos por partes: 1°) não entendi porque você criou uma matriz de char ao inve do vetor em char frase[][200]={"Alguma frase"}; use somente char frase[200]="Alguma frase"; 2°) Não declare char *arquivo à menos que você use alocação dinamica. Você não está criando uma string e sim um ponteiro para um char. Use: char arquivo[20]; ou char *arquivo=(char *)malloc(20*sizeof(char)); lembrando de dar um free(arquivo) no final do programa caso use a segunda opção. 3°) Não há a necessidade dos parenteses em arquivo=("textos.txt"); 4°) for (i=0; i<2; i++){ fputs("%s\n",sitelist[i],fp); //Imprime o conteúdo da var frase no arquivo c:\\Texto.txt } Aqui esta o maior problema (ou problemas). Primeiro, perceba que o seu for vai de 0 a 1, ou seja, (se funcionasse)imprimiria a string 2 vezes. Segundo, você não tem nenhuma variavel "sitelist", voce tem a string "frase". Terceiro, não use %s no fputs, ponha apenas a string que deseja imprimir. Uma forma melhor de fazer essa impressao seria: fputs(frase,fp); Perceba que o for nem é necessario Uma dica pra você que esta começando. Procure ler sobre as funcoes e seu parametros antes de usa-las. E também aprenda a interpretar as informações de erro que os compiladores fornecem, uma vez que você saiba o que cada uma diz, você consegue resolver os erros por si mesmo. EDIT: Não é necessario o #include conio.h para esse seu programa
-
Não entendi muito bem... você quer ordenar um vetor do tipo struct data? se for isso é simples for(i=0; i<MAX; i++){ for(j=i; j<MAX; j++){ if(strcmp(dados[i].nome,dados[j].nome) == 1){ strcpy(str_aux,dados[j].nome); strcpy(dados[j].nome,dados[i].nome); strcpy(dados[i].nome,str_aux); // aux=dados[j].idade; dados[j].idade=dados[i].idade; dados[i].idade=aux; } } } Sendo que "MAX" é o tamanho do vetor, "dados" é o seu vetor e "str_aux" e "aux" são uma string auxiliar e uma variavel auxiliar, respectivamente. Lembrando que esse codigo ordena por nome, para ordenar por idade, mude a condição do if :D
-
Programação C - Exercícios Matriz Vetor - Como resolver?
pergunta respondeu ao bustamante de General Shepherd em C, C++
main(){ int vet[15], i, j, aux; //Insira os elementos no vetor for(i=0; i<15; i++){ for(j=i; j<15; j++){ if(vet[i] > vet[j]){ //Ordena o vetor aux = vet[i]; vet[i] = vet[j]; vet[j] = vet[i]; } } } for(i=0; i<15; i++) printf("%d\t\a", vet[i]); } #define TAM 5 void cria_vetor(int *vet, int mat[TAM][TAM]){ int i, j, aux=0; for(i=0; i<TAM; i++){ for(j=0; j<TAM; j++){ aux+=mat[i][j]; } vet[i]=aux; aux=0; } } main(){ int vet[TAM], mat[TAM][TAM]; //Insira valores na matriz cria_vetor(vet, mat); return 1; } OBS: Se quiser um tamanho de matriz diferente, mude apenas o define -
Obrigado pela ajuda :D
-
Para a gravação uso o fprintf...
-
Eae galera, o negócio é o seguinte, eu estou fazendo um trabalho para a faculdade e, em um dado momento, eu crio um arquivo com alguns dados do programa, mas eu não quero q o usuário possa alterar esse arquivo a não ser q o faça através do programa. Mas o problema é q se o usuario abrir o arquivo com o bloco de notas por exemplo, ele verá todo o conteúdo do mesmo, o que eu não quero q aconteça. Há alguma maneira de não permitir q o usuário abra o arquivo, ou, se abrir, não mostre os caracteres claramente? Tentei gravar no arquivo em binário, mas mesmo assim os caracteres ainda aparecem...
-
Como salvar uma matriz char(ex:8x8) num arquivo?
pergunta respondeu ao shiroyamacah de General Shepherd em C, C++
Só complementando, não há necessidade de ser em binário, basta usar o mesmo for que você usaria para imprimir a matriz na tela, mas ao invés de printf("%d", mat[j]), use fprintf(arq, "%d", mat[j]), onde "arq" é o seu arquivo, e "mat" a matriz. Ficaria + ou - assim: for(i=0; i<linhas; i++){ for(j=0; j<colunas; j++){ fprintf(arq, "%d", mat[i][j]); //Grava os digitos, caso a matriz não seja de inteiros, apenas mude o %d por %c... etc } fprintf(arq,"\n"); //Dá quebra de linha } para ler aí já é mais complicado um pouco, mas não é um bicho de 7 cabeças while(!feof(arq)){ //executa o while enquanto ainda houverem linhas à serem lidas fscanf(mat[i][j],"%d", arq); //Caso seja uma matriz de string, mude para fgets j++; if(j==colunas-1) //Onde "colunas", é o numero de colunas da matriz i++; } não testei esse ultimo codigo, ppor isso não garanto o seu funcionamento. Existem varias maneiras de se ler matriz de um arquivo, de uma procurado no google q voce encontrará bastante material. ;D