Ir ao conteúdo

Posts recomendados

Postado

Bom dia! Estou com pequeno problema com meu código.

Estou criando um programa que seleciona um Grafo ou um Dígrafo e através do ponto de origem e do ponto de destino ele monta uma matriz colocando '1' onde corresponder o valor.

Porém não sei se minha lógica esta errada ou o que está acontecendo, já tentei de inúmeras formas, porém sem sucesso.

 

O funcionamento do programa é o seguinte, você seleciona se é um grafo ou um dígrafo, quando selecionado, o programa pede o numero de vertices e o numero de arestas do Grafo, assim que passado os valores, o programa em seguida pede o ponto de origem e o ponto de destino. Usei o if e else para identificar se o ponto de origem e o ponto de destino que esta no comando de repetição corresponde a sentença do if e se pertencer ele adiciona '1' se não ele adiciona '0'.

Porém não estou obtendo êxito, ou a matriz zera tudo, ou fica '1' espalhados.

 

Segue meu código.

 

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

main(){
	
	int result, vertice, arest;
	int i ,j, pOri, pDest, pi, matriz[i][j];
	
	printf("Matriz de grafos ou digrafos!");
	printf("\n\n Escolha: (1) Grafos (2) Digrafos :"); 
	scanf("%d", &result);
	
	
		if(result = 1){ //GRAFO
		
		printf("\nGRAFO NAO DIRECIONADO\n");
			printf("\nInsira o numero de VERTICES: "); // Numero de Vertices do Grafo, determina quantas linhas e colunas da matriz
			scanf("%d", &vertice);
			printf("\nInsira o numero de ARESTAS por VERTICES: "); // Numero de arestas (linhas de conexão com vertices)
			scanf("%d", &arest);
			
			
			for( pi=0 ; pi < arest; ++pi){ // Repete ponto de Origem e Destino de acordo com o numero de Arestas
				printf("\nPonto de Origem [%d]: ", pi+1);
				scanf("%d", &pOri);
				printf("\nPonto de Destino [%d]: ", pi+1);
				scanf("%d", &pDest);
						
				for(i = 0; i < vertice; i++) //Percorre a Matriz
					for(j = 0; j < vertice; j++){
						if(matriz[i][vertice] == matriz[pOri][vertice]){ // Verifica ponto de origem da matriz (Linha)
							if(matriz[i][j] == matriz[i][pDest]){ // Verifica ponto de destino da matriz (coluna)
								matriz[i][j] = 1;  //Adiciona 1 se for encontrado
							}
							else{
								matriz[i][j] = 0; //Adiciona 0 se não for encontrado
							}
						}
						else{
							matriz[i][j] = 0; //Adiciona 0 se não for encontrado
						}															
				}
			}
	}
		
			for(i = 0; i<vertice; ++i){ //Le a matriz 
				for(j = 0; j<vertice; ++j){
					printf("%3d", matriz[i][j]);
				}
				printf("\n");
		}
			

	
	getch();
	return 0;
}

 

  • Curtir 1
Postado

Não entendi o que você está tentando fazer no programa. Vai representar o grafo como uma matriz de adjacência? Está construindo um grafo ou checando/analisando o grafo?

 

Talvez fique mais claro se você der algum exemplo postando uma matriz de um grafo e o que o programa deve fazer.

  • Curtir 1
  • 1 ano depois...
Postado
Em 14/03/2017 às 01:53, faervict disse:

Bom dia! Estou com pequeno problema com meu código.

Estou criando um programa que seleciona um Grafo ou um Dígrafo e através do ponto de origem e do ponto de destino ele monta uma matriz colocando '1' onde corresponder o valor.

Porém não sei se minha lógica esta errada ou o que está acontecendo, já tentei de inúmeras formas, porém sem sucesso.

 

O funcionamento do programa é o seguinte, você seleciona se é um grafo ou um dígrafo, quando selecionado, o programa pede o numero de vertices e o numero de arestas do Grafo, assim que passado os valores, o programa em seguida pede o ponto de origem e o ponto de destino. Usei o if e else para identificar se o ponto de origem e o ponto de destino que esta no comando de repetição corresponde a sentença do if e se pertencer ele adiciona '1' se não ele adiciona '0'.

Porém não estou obtendo êxito, ou a matriz zera tudo, ou fica '1' espalhados.

 

Segue meu código.

 


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

main(){
	
	int result, vertice, arest;
	int i ,j, pOri, pDest, pi, matriz[i][j];
	
	printf("Matriz de grafos ou digrafos!");
	printf("\n\n Escolha: (1) Grafos (2) Digrafos :"); 
	scanf("%d", &result);
	
	
		if(result = 1){ //GRAFO
		
		printf("\nGRAFO NAO DIRECIONADO\n");
			printf("\nInsira o numero de VERTICES: "); // Numero de Vertices do Grafo, determina quantas linhas e colunas da matriz
			scanf("%d", &vertice);
			printf("\nInsira o numero de ARESTAS por VERTICES: "); // Numero de arestas (linhas de conexão com vertices)
			scanf("%d", &arest);
			
			
			for( pi=0 ; pi < arest; ++pi){ // Repete ponto de Origem e Destino de acordo com o numero de Arestas
				printf("\nPonto de Origem [%d]: ", pi+1);
				scanf("%d", &pOri);
				printf("\nPonto de Destino [%d]: ", pi+1);
				scanf("%d", &pDest);
						
				for(i = 0; i < vertice; i++) //Percorre a Matriz
					for(j = 0; j < vertice; j++){
						if(matriz[i][vertice] == matriz[pOri][vertice]){ // Verifica ponto de origem da matriz (Linha)
							if(matriz[i][j] == matriz[i][pDest]){ // Verifica ponto de destino da matriz (coluna)
								matriz[i][j] = 1;  //Adiciona 1 se for encontrado
							}
							else{
								matriz[i][j] = 0; //Adiciona 0 se não for encontrado
							}
						}
						else{
							matriz[i][j] = 0; //Adiciona 0 se não for encontrado
						}															
				}
			}
	}
		
			for(i = 0; i<vertice; ++i){ //Le a matriz 
				for(j = 0; j<vertice; ++j){
					printf("%3d", matriz[i][j]);
				}
				printf("\n");
		}
			

	
	getch();
	return 0;
}

Brother, entendi sua logica e sei o que você precisa, segue um codigo funcinando :

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

main(){
    inicio_programa:
    int result = 0;
    
    // Menu de escolha 
    printf("Matriz Adjacente de Grafos ou Digrafos!");
    printf("\n\n Escolha: (1) Grafos (2) Digrafos :"); 
    scanf("%d", &result);
            
        system("cls");
        
        // Condição de GRAFO ou DIGRAFO
        if( result == 1)
        {
            printf("\nGRAFO SELECIONADO\n ");
        }
        
        else{
            if (result == 2)
            {
                printf("\nDIGRAFO SELECIONADO\n ");
            }
            // se nenhuma opção for valida, gera um erro e volta o programa
            else{
                printf("\n %d NAO EH UMA OPCAO VALIDA. DIGITE UMA OPCAO VALIDA PARA CONTINUAR\n", result);
                system("pause");
                system("cls");
                goto inicio_programa;            
            }
        }
        
        // definição da variavel Vertice
        int i, j, x, a1, v1, POrig,PDest;
        printf("\nQuantidade de Vertices: ");
        scanf("%d", &v1);
        v1 = v1 + 1;
        int m[v1][v1]; // inicia matriz
        
        // inicia todos os pontos da matriz como "0"
        for(i = 0; i<v1; i++)
            for(j = 0; j<v1; j++)
                m[j] = 0;
                
        // implementa titulo de linha e coluna na matriz
                
        for(i = 0; i<v1; i++)
        {    m[0] = i;    }
        
        for(j = 0; j<v1; j++)
        {    m[0][j] = j;    }
        
        // Colocar pontos na matriz
        
        printf("\nQuantidade de Arestas: ");
        scanf("%d", &a1);
        
        for(x = 0; x < a1; x++) 
        {    
            ponto_origem:
                
            printf("\nVertice de Origem %d: ", x+1);
            scanf("%d", &POrig);
            
            if(POrig >v1-1) // verifica se vertice existe na matriz
            {
                printf("\nPosicao de Vertice de Origem nao existente");
                printf("\n\nInsira novamente\n\n");
                goto ponto_origem;
            }
            
            ponto_destino:
            
            printf("\nVertice de Destino %d: ", x+1);
            scanf("%d", &PDest);
            
            if(PDest >v1-1) // verifica se vertice existe na matriz
            {
                printf("\nPosicao de Vertice de Destino nao existente");
                printf("\n\nInsira novamente\n\n");
                goto ponto_destino;
            }
            
            switch(result) // define entre GRAFO e DIGRAFO usando a varialvel "result" definida no começo do programa
                {
                    case 1:  //GRAFO
                        m[POrig][PDest] = 1; 
                        m[PDest][POrig] = 1;
                        break;
                    case 2: //DIGRAFO
                        m[POrig][PDest] = 1;
                        break;
                }
        
        // print da matriz 
        for(i = 0; i<v1; i++) 
        {
            printf("\n");
            for(j = 0; j<v1; j++)
                printf("%d ", m[j]);
        }
        
        printf("\n\n");
        
        
    }
    getch();
    return 0;
}
 

  • Curtir 2
  • 11 meses depois...
Postado
Em 21/03/2018 às 19:12, Murilo Ferreira Rufino disse:

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

main(){
    inicio_programa:
    int result = 0;
    
    // Menu de escolha 
    printf("Matriz Adjacente de Grafos ou Digrafos!");
    printf("\n\n Escolha: (1) Grafos (2) Digrafos :"); 
    scanf("%d", &result);
            
        system("cls");
        
        // Condição de GRAFO ou DIGRAFO
        if( result == 1)
        {
            printf("\nGRAFO SELECIONADO\n ");
        }
        
        else{
            if (result == 2)
            {
                printf("\nDIGRAFO SELECIONADO\n ");
            }
            // se nenhuma opção for valida, gera um erro e volta o programa
            else{
                printf("\n %d NAO EH UMA OPCAO VALIDA. DIGITE UMA OPCAO VALIDA PARA CONTINUAR\n", result);
                system("pause");
                system("cls");
                goto inicio_programa;            
            }
        }
        
        // definição da variavel Vertice
        int i, j, x, a1, v1, POrig,PDest;
        printf("\nQuantidade de Vertices: ");
        scanf("%d", &v1);
        v1 = v1 + 1;
        int m[v1][v1]; // inicia matriz
        
        // inicia todos os pontos da matriz como "0"
        for(i = 0; i<v1; i++)
            for(j = 0; j<v1; j++)
                m[j] = 0;
                
        // implementa titulo de linha e coluna na matriz
                
        for(i = 0; i<v1; i++)
        {    m[0] = i;    }
        
        for(j = 0; j<v1; j++)
        {    m[0][j] = j;    }
        
        // Colocar pontos na matriz
        
        printf("\nQuantidade de Arestas: ");
        scanf("%d", &a1);
        
        for(x = 0; x < a1; x++) 
        {    
            ponto_origem:
                
            printf("\nVertice de Origem %d: ", x+1);
            scanf("%d", &POrig);
            
            if(POrig >v1-1) // verifica se vertice existe na matriz
            {
                printf("\nPosicao de Vertice de Origem nao existente");
                printf("\n\nInsira novamente\n\n");
                goto ponto_origem;
            }
            
            ponto_destino:
            
            printf("\nVertice de Destino %d: ", x+1);
            scanf("%d", &PDest);
            
            if(PDest >v1-1) // verifica se vertice existe na matriz
            {
                printf("\nPosicao de Vertice de Destino nao existente");
                printf("\n\nInsira novamente\n\n");
                goto ponto_destino;
            }
            
            switch(result) // define entre GRAFO e DIGRAFO usando a varialvel "result" definida no começo do programa
                {
                    case 1:  //GRAFO
                        m[POrig][PDest] = 1; 
                        m[PDest][POrig] = 1;
                        break;
                    case 2: //DIGRAFO
                        m[POrig][PDest] = 1;
                        break;
                }
        
        // print da matriz 
        for(i = 0; i<v1; i++) 
        {
            printf("\n");
            for(j = 0; j<v1; j++)
                printf("%d ", m[j]);
        }
        
        printf("\n\n");
        
        
    }
    getch();
    return 0;
}
 

Estou com problemas, quando vou executar aparece os seguintes erros.


46    22    C:\Users\Caio\Documents\Trabalho\Sem Título1.cpp    [Error] incompatible types in assignment of 'int' to 'int [v1]'
51    19    C:\Users\Caio\Documents\Trabalho\Sem Título1.cpp    [Error] incompatible types in assignment of 'int' to 'int [v1]'

 

Está dando erro nesta parte do código.

 



 // inicia todos os pontos da matriz como "0"
        for(i = 0; i<v1; i++)
            for(j = 0; j<v1; j++)
                m[j] = 0;
                
        // implementa titulo de linha e coluna na matriz
                
        for(i = 0; i<v1; i++)
        {    m[0] = i;    }
        
        for(j = 0; j<v1; j++)
        {    m[0][j] = j;    }
        

  • Amei 1
Postado

@Justiceiro741     esses erros das linhas 46 e 51 é porque você usa uma matriz que tem que ter duas dimensões , e  nessas linhas você está usado apenas uma dimensção , então seu código com algumas modificações poderia ficar assim ,  e está rodando mas creio que o resultado não seja o que você espera ,  provável que precisa consertar mais alguma coisa .  :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(){
    int result;
    inicio_programa:
    result = 0;
    // Menu de escolha
    printf("Matriz Adjacente de Grafos ou Digrafos!");
    printf("\n\n Escolha: (1) Grafos (2) Digrafos :");
    scanf("%d", &result);
    system("cls");
    // Condição de GRAFO ou DIGRAFO
    if( result == 1){
        printf("\nGRAFO SELECIONADO\n ");
    }
    else{
        if (result == 2){
            printf("\nDIGRAFO SELECIONADO\n ");
        }
        // se nenhuma opção for valida, gera um erro e volta o programa
        else{
            printf("\n %d NAO EH UMA OPCAO VALIDA. DIGITE UMA OPCAO VALIDA PARA CONTINUAR\n", result);
            system("pause");
            system("cls");
            goto inicio_programa;
        }
    }
    // definição da variavel Vertice
    int i, j, x, a1, v1, POrig,PDest;
    printf("\nQuantidade de Vertices: ");
    scanf("%d", &v1);
    v1 = v1 + 1;
    int m[v1][v1]; // inicia matriz
    // inicia todos os pontos da matriz como "0"
    for(i = 0; i<v1; i++)
        for(j = 0; j<v1; j++)
            m[i][j] = 0;
    // implementa titulo de linha e coluna na matriz
    for(i = 0; i<v1; i++){
        m[i][0] = i;
    }
    for(j = 0; j<v1; j++){
        m[0][j] = j;
    }
    // Colocar pontos na matriz
    printf("\nQuantidade de Arestas: ");
    scanf("%d", &a1);
    for(x = 0; x < a1; x++){
        ponto_origem:
        printf("\nVertice de Origem %d: ", x+1);
        scanf("%d", &POrig);
        if(POrig >v1-1){ // verifica se vertice existe na matriz
            printf("\nPosicao de Vertice de Origem nao existente");
            printf("\n\nInsira novamente\n\n");
            goto ponto_origem;
        }
        ponto_destino:
        printf("\nVertice de Destino %d: ", x+1);
        scanf("%d", &PDest);
        if(PDest >v1-1){ // verifica se vertice existe na matriz
            printf("\nPosicao de Vertice de Destino nao existente");
            printf("\n\nInsira novamente\n\n");
            goto ponto_destino;
        }
        switch(result){ // define entre GRAFO e DIGRAFO usando a varialvel "result" definida no começo do programa
        case 1:  //GRAFO
            m[POrig][PDest] = 1;
            m[PDest][POrig] = 1;
            break;
        case 2: //DIGRAFO
            m[POrig][PDest] = 1;
            break;
        }
        // print da matriz
        for(i = 0; i<v1; i++){
            printf("\n");
            for(j = 0; j<v1; j++)
                printf("%d ", m[i][j]);
        }
        printf("\n\n");
    }
    printf("      Tecle !\n\n");
    getch();
    return 0;
}

 

  • Curtir 1
Postado
1 hora atrás, devair1010 disse:

@Justiceiro741     esses erros das linhas 46 e 51 é porque você usa uma matriz que tem que ter duas dimensões , e  nessas linhas você está usado apenas uma dimensção , então seu código com algumas modificações poderia ficar assim ,  e está rodando mas creio que o resultado não seja o que você espera ,  provável que precisa consertar mais alguma coisa .  :


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(){
    int result;
    inicio_programa:
    result = 0;
    // Menu de escolha
    printf("Matriz Adjacente de Grafos ou Digrafos!");
    printf("\n\n Escolha: (1) Grafos (2) Digrafos :");
    scanf("%d", &result);
    system("cls");
    // Condição de GRAFO ou DIGRAFO
    if( result == 1){
        printf("\nGRAFO SELECIONADO\n ");
    }
    else{
        if (result == 2){
            printf("\nDIGRAFO SELECIONADO\n ");
        }
        // se nenhuma opção for valida, gera um erro e volta o programa
        else{
            printf("\n %d NAO EH UMA OPCAO VALIDA. DIGITE UMA OPCAO VALIDA PARA CONTINUAR\n", result);
            system("pause");
            system("cls");
            goto inicio_programa;
        }
    }
    // definição da variavel Vertice
    int i, j, x, a1, v1, POrig,PDest;
    printf("\nQuantidade de Vertices: ");
    scanf("%d", &v1);
    v1 = v1 + 1;
    int m[v1][v1]; // inicia matriz
    // inicia todos os pontos da matriz como "0"
    for(i = 0; i<v1; i++)
        for(j = 0; j<v1; j++)
            m[i][j] = 0;
    // implementa titulo de linha e coluna na matriz
    for(i = 0; i<v1; i++){
        m[i][0] = i;
    }
    for(j = 0; j<v1; j++){
        m[0][j] = j;
    }
    // Colocar pontos na matriz
    printf("\nQuantidade de Arestas: ");
    scanf("%d", &a1);
    for(x = 0; x < a1; x++){
        ponto_origem:
        printf("\nVertice de Origem %d: ", x+1);
        scanf("%d", &POrig);
        if(POrig >v1-1){ // verifica se vertice existe na matriz
            printf("\nPosicao de Vertice de Origem nao existente");
            printf("\n\nInsira novamente\n\n");
            goto ponto_origem;
        }
        ponto_destino:
        printf("\nVertice de Destino %d: ", x+1);
        scanf("%d", &PDest);
        if(PDest >v1-1){ // verifica se vertice existe na matriz
            printf("\nPosicao de Vertice de Destino nao existente");
            printf("\n\nInsira novamente\n\n");
            goto ponto_destino;
        }
        switch(result){ // define entre GRAFO e DIGRAFO usando a varialvel "result" definida no começo do programa
        case 1:  //GRAFO
            m[POrig][PDest] = 1;
            m[PDest][POrig] = 1;
            break;
        case 2: //DIGRAFO
            m[POrig][PDest] = 1;
            break;
        }
        // print da matriz
        for(i = 0; i<v1; i++){
            printf("\n");
            for(j = 0; j<v1; j++)
                printf("%d ", m[j]);
        }
        printf("\n\n");
    }
    getch();
    return 0;
}

 

O código que você me enviou deu certo, porém contem muito erros no resultado, comecei a utilizar o código do @faervict, solucionei um dos problemas do resultado, porém não está chegando no resultado que desejo....
Teria como você me ajudar @devair1010 ?

  • Obrigado 1
Postado
10 minutos atrás, devair1010 disse:

@Justiceiro741      qual o objetivo do código , o que você precisa que ele mostre no resultado ?  

O intuito é o mesmo, fazer um software que gere uma matriz de adjacência de um grafo ou digrafo, onde o usuário que irá escolher a opção se é grafo ou digrafo e também fornecer os dados das arestas e vértices.

O meu professor deu um exemplo de saída que o programa irá retornar.

Deixei o Exemplo  e o resultado do programa anexado.

 

WhatsApp Image 2019-02-24 at 21.51.55.jpeg

soft.png

  • Curtir 1
Postado

@Justiceiro741     que bom que deu certo , não sei nada sobre matriz de adjacência e nem sobre grafos e dígrafos , mas estava faltando colocar  a outra dimensão da matriz na hora de imprimir o resultado final , lá na linha 80  :

// print da matriz
for(i=0; i<v1; i++){
    printf("\n");
    for(j=0; j<v1; j++)
        printf("%d ",m[i][j]);/* aqui precisa das duas dimensões  */
    }
    printf("!\n\n");
}
printf("       Tecle !\n\n");

 

  • Amei 1
Postado
6 minutos atrás, devair1010 disse:

@Justiceiro741     que bom que deu certo , não sei nada sobre matriz de adjacência e nem sobre grafos e dígrafos , mas estava faltando colocar  a outra dimensão da matriz na hora de imprimir o resultado final , lá na linha 80  :


// print da matriz
for(i=0; i<v1; i++){
    printf("\n");
    for(j=0; j<v1; j++)
        printf("%d ",m[i][j]);/* aqui precisa das duas dimensões  */
    }
    printf("       Tecle !\n\n");
}

 

Ah sim, igual a alteração que você tinha realizado na primeira vez, porém lá na primeira parte.

Obrigado pela ajuda, de verdade mesmo.

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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