Ir para conteúdo
Fórum Script Brasil

luizasilval

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Posts postados por luizasilval

  1. Preciso de um codigo em C do caminho minimo usando o algoritmo de Dijkstra, achei um na internet, ta funcionando direitinho, so q queria mudar ele pra poder escolher meu alvo e ele falar o caminho ate ele. Porque por ex, se eu coloco 4 vertices, ele pede certo o peso das arestas q eu ligar entres os 4 e da o caminho delas, mas não me pede meu alvo, porque posso querer saber o caminho da 2 para a 4, mas tambem posso querer da 1 para a 4. alguém PFVR SABE MUDAR?

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    #define FLSH gets(l)

    int destino, origem, vertices = 0;
    int custo, *custos = NULL;

    void dijkstra(int vertices,int origem,int destino,int *custos)
    {
       int i,v, cont = 0;
       int *ant, *tmp;
       int *z;     /* vertices para os quais se conhece o caminho minimo */
       double min;
       double dist[vertices]; /* vetor com os custos dos caminhos */


       /* aloca as linhas da matriz */
       ant = calloc (vertices, sizeof(int *));
       tmp = calloc (vertices, sizeof(int *));
       if (ant == NULL) {
          printf ("** Erro: Memoria Insuficiente **");
          exit(-1);
       }

       z = calloc (vertices, sizeof(int *));
       if (z == NULL) {
          printf ("** Erro: Memoria Insuficiente **");
          exit(-1);
       }

       for (i = 0; i < vertices; i++) {
          if (custos[(origem - 1) * vertices + i] !=- 1) {
             ant = origem - 1;
             dist = custos[(origem-1)*vertices+i];
          }
          else {
             ant= -1;
             dist = HUGE_VAL;
          }
          z=0;
       }
       z[origem-1] = 1;
       dist[origem-1] = 0;

       /* Laco principal */
       do {

          /* Encontrando o vertice que deve entrar em z */
          min = HUGE_VAL;
          for (i=0;i<vertices;i++)
             if (!z)
                if (dist>=0 && dist<min) {
                   min=dist;v=i;
                }

          /* Calculando as distancias dos novos vizinhos de z */
          if (min != HUGE_VAL && v != destino - 1) {
             z[v] = 1;
             for (i = 0; i < vertices; i++)
                if (!z) {
                   if (custos[v*vertices+i] != -1 && dist[v] + custos[v*vertices+i] < dist) {
                         dist = dist[v] + custos[v*vertices+i];
                      ant =v;
                      }
                  }
          }
       } while (v != destino - 1 && min != HUGE_VAL);

       /* Mostra o Resultado da busca */
       printf("\tDe %d para %d: \t", origem, destino);
       if (min == HUGE_VAL) {
          printf("não Existe\n");
          printf("\tCusto: \t- \n");
       }
       else {
          i = destino;
          i = ant[i-1];
          while (i != -1) {
          //   printf("<-%d",i+1);
             tmp[cont] = i+1;
             cont++;
             i = ant;
          }

          for (i = cont; i > 0 ; i--) {
             printf("%d -> ", tmp[i-1]);
          }
          printf("%d", destino);

          printf("\n\tCusto:  %d\n",(int) dist[destino-1]);
       }
    }

    void limpar(void)
    {
         printf("{FONTE}33[2J"); /* limpa a tela */
         printf("{FONTE}33[1H"); /* poe o curso no topo */
    }

    void cabecalho(void)
    {
        limpar();
       printf("Implementacao do Algoritmo de Dijasktra\n");
       printf("Comandos:\n");
       printf("\t d - Adicionar um Grafo\n"
               "\t r - Procura Os Menores Caminhos no Grafo\n"
               "\t CTRL+c - Sair do programa\n");
       printf(">>> ");
    }

    void add(void)
    {
       int i, j;

       do {
          printf("\nInforme o numero de vertices (no minimo 2 ): ");
          scanf("%d",&vertices);
       } while (vertices < 2 );

       if (!custos)
          free(custos);
       custos = (int *) malloc(sizeof(int)*vertices*vertices);
       for (i = 0; i <= vertices * vertices; i++)
          custos = -1;

       printf("Entre com as Arestas:\n");
       do {
          do {
             printf("Origem da aresta (entre 1 e %d ou '0' para sair): ", vertices);
             scanf("%d",&origem);
          } while (origem < 0 || origem > vertices);

          if (origem) {
             do {
                printf("Destino da aresta (entre 1 e %d, menos %d): ", vertices, origem);
                scanf("%d", &destino);
             } while (destino < 1 || destino > vertices || destino == origem);

             do {
                printf("Custo (positivo) da aresta do vertice %d para o vertice %d: ",
                      origem, destino);
                scanf("%d",&custo);
             } while (custo < 0);

             custos[(origem-1) * vertices + destino - 1] = custo;
          }

       } while (origem);
    }

    void procurar(void)
    {
       int i, j;

       /* Azul */
       printf("{FONTE}33[36;1m");
       printf("Lista dos Menores Caminhos no Grafo Dado: \n");

       for (i = 1; i <= vertices; i++) {
          for (j = 1; j <= vertices; j++)
             dijkstra(vertices, i,j, custos);
          printf("\n");
       }

       printf("<Pressione ENTER para retornar ao menu principal>\n");
       /* Volta cor nornal */
       printf("{FONTE}33[m");
    }

    int main(int argc, char **argv) {
       int i, j;
       char opcao[3], l[50];

       do {

           cabecalho();
          scanf("%s", &opcao);

          if ((strcmp(opcao, "d")) == 0) {
             add();
          }
          FLSH;

          if ((strcmp(opcao, "r") == 0) && (vertices > 0) ) {
             procurar();
             FLSH;
          }

       } while (opcao != "x");

       printf("\nAte a proxima...\n\n");

       return 0;
    }

    562a77b63fecc_Sem_ttulo1.thumb.png.5cdb5562a77c1d6479_Sem_ttulo2.thumb.png.a7f77

    Creditos ao dono do codigo acima q n sei quem é.

  2. preciso fazer uma função para calcular a 4 potencia de uma matriz de ordem 100, chamando a função que faz a matriz quadrado abaixo:

     

    void quadrado (int mat[ ] [100], int quadmat [ ] [100]
    {
    int i,j,k;
    for (i=0 ; i<100 ; i++)
    {
    for (j=0 ; j<100 ; j++)
    {
    for (k=0 ; k<100 ; k++)
    {
    quadmat [ i ] [ j ] += mat [ i ] [ k ] * mat [ k ] [ j ];
    }
    }
    }

  3. preciso fazer um codigo em C que tem uma variavel estruturada com 3 membros (xi,yi) que são pontos. outra variavel estruturada tem 3 membros que são distancias
    escrever uma funcao e os struct para calcular as distancias entre os pontos. Fiz o codigo abaixo mas ta dando erro, to combilando com o code blocks e fazendo o main para testar:

     

    #include <stdio.h>
    #include <math.h>

    struct ponto{
    int x1,y1;
    int x2,y2;
    int x3,y3;
    };
    typedef struct ponto pontos;

    struct distancia{
    int dist1;
    int dist2;
    int dist3;
    };
    typedef struct distancia dist;

    dist calc_dist (pontos *p1, pontos *p2, pontos *p3){
    float dist1=0, dist2=0, dist3=0;
    dist1 = (sqrt(pow(*p1->x1 - *p2->x2,2)) + (pow(*p1->y1 - *p2->y2,2))); //distancia p1 a p2
    dist2 = (sqrt(pow(*p2->x2 - *p3->x3,2)) + (pow(*p2->y2 - *p3->y3,2))); //distancia p2 a p3
    dist3 = (sqrt(pow(*p1->x1 - *p3->x3,2)) + (pow(*p1->y1 - *p3->y3,2))); //distancia p1 a p3
    printf("\nDistancia do p1 ao p2: %f",dist1);
    printf("\nDistancia do p2 ao p3: %f",dist2);
    printf("\nDistancia do p1 ao p3: %f",dist3);
    }

    main (){
    pontos p1,p2,p3;
    dist dist1,dist2,dist3;
    printf("\nDigite valor para o p1 (x1,y1):\n");
    scanf("%d %d", %x1,&y1);
    printf("\nDigite valor para o p2 (x2,y2):\n");
    scanf("%d %d", %x2,&y2);
    printf("\nDigite valor para o p3 (x3,y3):\n");
    scanf("%d %d", %x3,&y3);
    printf("\nP1:(%d,%d) , P2:(%d,%d) , P3:(%d,%d)\n", x1,y1,x2,y2,x3,y3);
    }

    Sem título.png

  4. alguém PELO AMOR DE DEUS sabe fazer alguns desses exercicios em MATLAB?

    Desenvolver programas em linguagem Matlab para:

    1. Ler do teclado um número inteiro N sendo 1 ≤ N indicando quantos termos da serie de Fibonacci devem ser mostrados na tela. Na serie os dois primeiros termos são 1 e o seguinte é a soma dos dois anteriores. Exemplo com n = 5: 1, 1, 2, 3, 5

    2. Fazer uma função para gerar uma tabela de conversão de temperaturas de 1 a 100 de 0,5 em 0,5 graus da escala Celsius-C para a escala Fahrenheit – F, segundo a fórmula F=(9C/5)+32.

    3. Calcular a área de figuras geométricas (triângulo, quadriláteros - quadrado, retângulo, losango, trapézio-, círculo, área lateral de um cilindro regular) de acordo com opção do usuário do programa. O programa deve perguntar quais os dados necessários e em seguida chamar uma função para cada cálculo de área correspondente a opção escolhida.

    4. Ler um número decimal inteiro n positivo do teclado e chamar uma função recursiva para que mostrar o numero binário correspondente usando o algoritmo de divisão por 2 até quociente zero.

    5. Ler as coordenadas de dois pontos e calcular: distancia entre eles e a inclinação da reta.

    6. Ler a ordem M de uma matriz quadrada e gerar uma matriz Matm x m, contendo números aleatórios no intervalo [10, 20]. Determinar: quantos pares, quantos impares, media geral, quantos acima da media e quantos abaixo da media.

    7. Ler M e N respectivamente o numero de linhas e de colunas de uma matriz A (máximo 10x10). Ler dados do teclado e preencher a matriz A m x n. Gerar uma matriz B a partir de A, acrescentando mais uma coluna a direita contendo a soma dos pares de cada linha.

    8. Escrever um programa para ler o numero de linhas e de colunas de duas matrizes (máximo 10x10) e em seguida os valores das matrizes A e B pelo teclado elemento por elemento. As duas matrizes devem ter o mesmo tamanho. Calcular e mostrar a matriz C como soma das duas matrizes usando as estruturas de repetição. Comparar com o calculo do Matlab X =A+B;

    9. Escrever um programa para ler o numero de linhas e de colunas de duas matrizes (máximo 10x10) e em seguida os valores das matrizes A e B pelo teclado elemento por elemento. O numero de colunas de A deve ser igual ao de linhas de B. Calcular e mostrar a matriz C como produto das duas matrizes usando as estruturas de repetição. Comparar com o calculo do Matlab X =A*B;

  5. alguém PELO AMOR DE DEUS sabe fazer alguns desses exercicios em MATLAB?

    Desenvolver programas em linguagem Matlab para:

    1. Ler do teclado um número inteiro N sendo 1 ≤ N indicando quantos termos da serie de Fibonacci devem ser mostrados na tela. Na serie os dois primeiros termos são 1 e o seguinte é a soma dos dois anteriores. Exemplo com n = 5: 1, 1, 2, 3, 5

    2. Fazer uma função para gerar uma tabela de conversão de temperaturas de 1 a 100 de 0,5 em 0,5 graus da escala Celsius-C para a escala Fahrenheit – F, segundo a fórmula F=(9C/5)+32.

    3. Calcular a área de figuras geométricas (triângulo, quadriláteros - quadrado, retângulo, losango, trapézio-, círculo, área lateral de um cilindro regular) de acordo com opção do usuário do programa. O programa deve perguntar quais os dados necessários e em seguida chamar uma função para cada cálculo de área correspondente a opção escolhida.

    4. Ler um número decimal inteiro n positivo do teclado e chamar uma função recursiva para que mostrar o numero binário correspondente usando o algoritmo de divisão por 2 até quociente zero.

    5. Ler as coordenadas de dois pontos e calcular: distancia entre eles e a inclinação da reta.

    6. Ler a ordem M de uma matriz quadrada e gerar uma matriz Matm x m, contendo números aleatórios no intervalo [10, 20]. Determinar: quantos pares, quantos impares, media geral, quantos acima da media e quantos abaixo da media.

    7. Ler M e N respectivamente o numero de linhas e de colunas de uma matriz A (máximo 10x10). Ler dados do teclado e preencher a matriz A m x n. Gerar uma matriz B a partir de A, acrescentando mais uma coluna a direita contendo a soma dos pares de cada linha.

    8. Escrever um programa para ler o numero de linhas e de colunas de duas matrizes (máximo 10x10) e em seguida os valores das matrizes A e B pelo teclado elemento por elemento. As duas matrizes devem ter o mesmo tamanho. Calcular e mostrar a matriz C como soma das duas matrizes usando as estruturas de repetição. Comparar com o calculo do Matlab X =A+B;

    9. Escrever um programa para ler o numero de linhas e de colunas de duas matrizes (máximo 10x10) e em seguida os valores das matrizes A e B pelo teclado elemento por elemento. O numero de colunas de A deve ser igual ao de linhas de B. Calcular e mostrar a matriz C como produto das duas matrizes usando as estruturas de repetição. Comparar com o calculo do Matlab X =A*B;

×
×
  • Criar Novo...