Ir para conteúdo
Fórum Script Brasil

General Shepherd

Membros
  • Total de itens

    17
  • Registro em

  • Última visita

Posts postados por General Shepherd

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

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

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

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

  5. 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;
    }

  6. Olá amigos, estou fazendo um programa simples em c, oque estou tentando fazer é grava o conteudo da var frase no arquivo Texto.txt

    usei o cod assim:

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    
    void  main(){
    
          char frase[][200]={"Alguma frase"};
          int i;
           char *arquivo;
            FILE *fp;
         
          arquivo=("textos.txt");
          fp = fopen(arquivo,"w");
         
            for (i=0; i<2; i++){
             fputs("%s\n",sitelist[i],fp); //Imprime o conteúdo da var frase no arquivo c:\\Texto.txt
            }
         
          getch();
         
         
     }
    Alguém me da uma luz, porque esta dando erro fico grato.
    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

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

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

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

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

  11. Eae man, beleza. Par lidar com imagens eu gosto de usar a Allegro, é simples de trabalhar, mas nem por isso é fraca. Aqui tem um bom tutorial de como instalar. Depois é só aprender a usar as funções de carregamento de imagem e etc. O que é muito simples, tem tutorias na net sobre isso também. falou

    PS: o tutorial serve para o Code::Blocks.

  12. Acho que o erro ao qual ele se refere seria "Tal programa parou de funcionar...", não é? Se for isso, normalmente acontece quando você tenta acessar uma área de memória ao qual o programa não tem permissões e o S.O. mata o processo. Mas poste o código para que possamos te ajudar mais efetivamente. =D

×
×
  • Criar Novo...