Meter – Tratamento e busca em arrays.

Segue um projeto que utiliza vários sistemas de buscas escrito em C.

METER.C

// Bibliotecas:
//	
//  interface = métodos para interface-usuário.

#include "stdio.h"
#include "stdlib.h"
#include "interface.h"
#include "time.h"
#include "strings.h"

// Capacidade total de numeros de Residencia
#define MAXRES 1000

// Estrutura que comportará informações sobre nome da rua (char25), numero da casa(int), n do medidor(int), e o consumo(float) da Residencia.

struct Residence {
	char street[10];
	int nHouse;
	int nMeter;
	float nMeasure;
} vecResidences[MAXRES]; 

// Selecionará qual tipo de busca será realizada
int opSearch = 0;

// Método de apoio ao Merge sort que intercala as arrays
void merged(int p,int q,int r){
	int i,j,k;
	float *w;
	
	w =  malloc((r-p)*sizeof(float));
	i = p;
	j = q;
	k = 0;
	
	while(i< q && j < r){
		if(vecResidences[i].nMeasure <= vecResidences[j].nMeasure)
		w[k++] = vecResidences[i++].nMeasure;
		else
		w[k++] = vecResidences[j++].nMeasure;
	}

	while(i<q) w[k++] = vecResidences[i++].nMeasure;
	while(j<r) w[k++] = vecResidences[j++].nMeasure;
	
	for(i=p;i<r;i++) vecResidences[i].nMeasure = w[i-p];
	free(w);
}

// Método de apoio ao Merge sort que intercala as arrays
void merge(int p,int q,int r){
	int i,j,k;
	float *w;
	
	w =  malloc((r-p)*sizeof(float));
	i = p;
	j = q;
	k = 0;
	
	while(i< q && j < r){
		if(vecResidences[i].nMeasure > vecResidences[j].nMeasure)
		w[k++] = vecResidences[i++].nMeasure;
		else
		w[k++] = vecResidences[j++].nMeasure;
	}

	while(i<q) w[k++] = vecResidences[i++].nMeasure;
	while(j<r) w[k++] = vecResidences[j++].nMeasure;
	
	for(i=p;i<r;i++) vecResidences[i].nMeasure = w[i-p];
	free(w);
}


// Metodo Merge Sort, divide os arrays no meio

void mergeSort(int p, int r){
	
	if(p < r-1){
		int q = (p+r)/2;
		mergeSort(p,q);
		mergeSort(q,r);
		merge(p,q,r);
	}
	
}

// Metodo Merge Sort, em modo decrescente

void mergeSortd(int p, int r){
	
	if(p < r-1){
		int q = (p+r)/2;
		mergeSort(p,q);
		mergeSort(q,r);
		merged(p,q,r);
	}
	
}

//Metodo Insert Sort
int insertSort(int typeP){
	int i,j;
	float x;
	
	if(typeP==1){
		
	for(j=1;i<MAXRES;j++){
		x = vecResidences[j].nMeasure;
		i=j-1;
		
		while((i>=0) && (vecResidences[i].nMeasure > x)){
			vecResidences[i+1].nMeasure = vecResidences[i].nMeasure;
			i=i-1;
		}
			vecResidences[i+1].nMeasure = x;
	}
	} else {
	for(j=1;i<MAXRES;j++){
		x = vecResidences[j].nMeasure;
		i=j-1;
		
		while((i>=0) && (vecResidences[i].nMeasure < x)){
			vecResidences[i+1].nMeasure = vecResidences[i].nMeasure;
			i=i-1;
		}
			vecResidences[i+1].nMeasure = x;
	}
	}
		
	
	return 1;
}



int bubbleSort(int typeP){
	int x=0,y =0;
	float aux;
	
	if(typeP == 1){
		for(x=0;x<MAXRES;x++){
			for(y=x+1;y<MAXRES;y++){
				if(vecResidences[x].nMeasure > vecResidences[y].nMeasure){
					aux = vecResidences[x].nMeasure;
					vecResidences[x].nMeasure = vecResidences[y].nMeasure;
					vecResidences[y].nMeasure = aux;
				}
			}
		}
    } else {
		for(x=0;x<MAXRES;x++){
			for(y=x+1;y<MAXRES;y++){
				if(vecResidences[x].nMeasure < vecResidences[y].nMeasure){
					aux = vecResidences[x].nMeasure;
					vecResidences[x].nMeasure = vecResidences[y].nMeasure;
					vecResidences[y].nMeasure = aux;
				}
			}
		}
	}
	return 1;
}




// Metodo select Sort
int selectSort(int typeP){
	float menor, temp;
	int i=0,z=0;
	
	
	if(typeP == 1){
		
	while(i<MAXRES){
		menor = vecResidences[i].nMeasure;
		z = i+1;
			while(z<MAXRES){
				if(vecResidences[z].nMeasure < menor){
					temp = vecResidences[z].nMeasure;
					vecResidences[z].nMeasure = menor;
					menor = temp;
				}
				z++;
			}
			vecResidences[i].nMeasure = menor;
			i++;		
	} } else {
	
	while(i<MAXRES){
		menor = vecResidences[i].nMeasure;
		z = i+1;
			while(z<MAXRES){
				if(vecResidences[z].nMeasure > menor){
					temp = vecResidences[z].nMeasure;
					vecResidences[z].nMeasure = menor;
					menor = temp;
				}
				z++;
			}
			vecResidences[i].nMeasure = menor;
			i++;		
	}	

	}
	return 1;
}


// Inicia a processamento da estrutura
int procStruct(int opS, int typeP){
	
	int error=0;
	
	switch (opS){
		case 1:
			error = selectSort(typeP);
			if(error != 1){
			printf("Erro ao processar SelectSort\n");
			system("PAUSE>null");
			}
			break;
		case 2:
			error = bubbleSort(typeP);
			if(error != 1){
			printf("Erro ao processar SelectSort\n");
			system("PAUSE>null");
			}
			break;
		case 3:
			error = insertSort(typeP);
			if(error != 1){
			printf("Erro ao processar InsertSort\n");
			system("PAUSE>null");
			}
			break;
		case 4:
			if(typeP = 1)
			mergeSort(0,MAXRES);
			else
			mergeSortd(0,MAXRES);
			break;
		default:
			printf("Processo nao concluido\n");
			system("PAUSE>null");
		
	}
	return 1;
}

// Inicia a array 
int startArray(struct Residence *vec){
	int i;
	
	for(i=0;i<MAXRES;i++){
	vec[i].nHouse = rand() % 1000;	
	vec[i].nMeter = rand() % 100;
	vec[i].nMeasure = (float)(rand() % 1000);
	
	}
		
return 1;
}

int main (){
	int i = 0, opt = 0, opS = 1;
	char opM;
	
	int error = startArray(vecResidences);
	if (error != 1){
		printf("Erro ao popular Array\n");
	}
	
	while (opt == 0){
	error = interfaceM(0, opS);
		
	if (error != 0)
		printf("Erro ao iniciar interface\n");
		
	fflush(stdin);	
	opM = getch();


	// Switch das opcoes apresentadas no User Interface.	
		switch (opM) { 
			case '1':
				error = 0;
				error = procStruct(opS, 1);
				opt = 1;
				if(error != 1)
					printf("Erro a processar Array em ordem crescente\n");
				break;
			case '2':
				error = 0;
				error = procStruct(opS, 2);
				opt = 1;
				if(error != 1)
					printf("Erro a processar Array em ordem decrescente\n");
				break;
			case 'A':
				opS = opS + 1;
				if(opS >= 5){
					opS = 1;
				}
				break;
			default: break;
		}

    }
	
	for(i=0;i<MAXRES;i++){
	printf("\n Rua Teste | %4d | %3d | %4.2f \n", vecResidences[i].nHouse, vecResidences[i].nMeter
									, vecResidences[i].nMeasure);
	}
	
	system("PAUSE>null");
	
	return 1;
}

Interface.h

int interfaceM(int, int);


int interfaceM(int op, int opSe){
	
	system("cls");
	printf("------------------------------------------------------- Meter.c ---------\n");
	printf("\n");
	printf("\n");
	if (opSe == 1)
	printf(" |Selecao e Troca| - Distribuicao - Insercao - Intercalacao              \n");
	if (opSe == 2)
	printf(" Selecao e Troca - |Distribuicao| - Insercao - Intercalacao              \n");
	if (opSe == 3)
	printf(" Selecao e Troca - Distribuicao - |Insercao| - Intercalacao              \n");
	if (opSe == 4)
	printf(" Selecao e Troca - Distribuicao - Insercao - |Intercalacao|              \n");
	printf("\n");
	printf("A: para alternar metodo de busca.\n");
	printf("------------------------------------------------------- Meter.c ---------\n");
	printf("\n");
	printf(" 1- Ordenacao Crescente\n");
	printf(" 2- Ordenacao Decrescente\n");
	printf("\n");
	
	return 0;
		
	
}

VoeBem

Nesse artigo venho apresentar um pequeno sistema de gerenciamento de voo, que foi entregue como trabalho da faculdade.

/*  Voe Bem - sistema de gerenciamento de voos */
/*  Desenvolvido por Eduardo Bertin            */
/*  contato@eduardobertin.com.br               */
/*  www.eduardobertin.com.br                   */
/*                                             */
/*  ui.h : biblioteca user interface.          */
/*  core.h : gerenciamento de estruturas.      */
/*  data.h : arquivamento, banco de dados.     */
/*                                             */
/*---------------------------------------------*/

Ordenação de Matrizes em C

Devido a frustração em uma prova de c, sobre matrizes, trouxe a solução, esse programinha faz ordenação crescente e decrescente em uma matriz, por linha, coluna e diagonal (1 e 2).

Em breve estarei trazendo um programa no qual esse conceito é funcional:

 

// Eduardo Bertin
// www.eduardobertin.com.br
// Esse código foi feito inteiro do 0, sem nenhum script como base
//
// 1- Inserir matriz dinamica
// 2- Ordernar crescente e decrescente uma linha
// 3- Ordernar crescente e decrescente uma coluna
// 4- Ordernar crescente e decrescente a diagonal 1
// 5- Ordernar crescente e decrescente a diagonal 2
//
//

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"

void inserir_matriz(int, int);
void interfacem(int);
void ordena_matriz(int, int);

int matriz[50][50];
int imax_global = 0;
int jmax_global = 0;


void ordena_matriz(int ord,int ij){

int aux_matr = 0;

ij--;

		switch(ord){
			case 1:

				for(int i=0;i<imax_global;i++){

				for(int j=0;j<jmax_global;j++){
				
					if(matriz[ij][j] > matriz[ij][j+1] && matriz[ij][j+1] != 0){
					
						aux_matr = matriz[ij][j+1];
						matriz[ij][j+1] = matriz[ij][j];
						matriz[ij][j] = aux_matr;
					
					}
												
				}
			}

			interfacem(1);
			break;
			case 2:

				for(int i=0;i<imax_global;i++){

				for(int j=0;j<jmax_global;j++){
				
					if(matriz[ij][j] < matriz[ij][j+1] && matriz[ij][j+1] != 0){
					
						aux_matr = matriz[ij][j+1];
						matriz[ij][j+1] = matriz[ij][j];
						matriz[ij][j] = aux_matr;
					
					}
												
				}
			}

			interfacem(1);
			break;
			case 3:

				for(int i=0;i<imax_global;i++){

				for(int j=0;j<jmax_global;j++){
				
					if(matriz[j][ij] > matriz[j+1][ij] && matriz[j+1][ij] != 0){
					
						aux_matr = matriz[j][ij];
						matriz[j][ij] = matriz[j+1][ij];
						matriz[j+1][ij] = aux_matr;
					
					}
												
				}
			}

			interfacem(1);
			break;
			case 4:
				for(int i=0;i<imax_global;i++){

				for(int j=0;j<jmax_global;j++){
				
					if(matriz[j][ij] < matriz[j+1][ij] && matriz[j+1][ij] != 0){
					
						aux_matr = matriz[j][ij];
						matriz[j][ij] = matriz[j+1][ij];
						matriz[j+1][ij] = aux_matr;
					
					}
												
				}
			}

			interfacem(1);
			break;
			case 5:
				ij++;
				for(int teste=0;teste<imax_global;teste++){
				
					for(int i=0;i<imax_global;i++){

						for(int j=0;j<jmax_global;j++){
							if(ij == 1){
								if(matriz[i][j] > matriz[i+1][j+1] && matriz[i+1][j+1] != 0){
									if(i==j){
							
										aux_matr = matriz[i+1][j+1];
										matriz[i+1][j+1] = matriz[i][j];
										matriz[i][j] = aux_matr;
									}						
								}
							}		
							if(ij == 2){
								if(matriz[i][j] < matriz[i+1][j-1] && matriz[i+1][j-1] != 0){
										if((i+j)==(imax_global-1)){											
											aux_matr = matriz[i+1][j-1];
											matriz[i+1][j-1] = matriz[i][j];
											matriz[i][j] = aux_matr;
										}
														
								}
							}
						}
					}
				}
			interfacem(1);
			break;
			case 6:
				ij++;
				for(int teste=0;teste<imax_global;teste++){
				
					for(int i=0;i<imax_global;i++){

						for(int j=0;j<jmax_global;j++){
							if(ij == 1){
								if(matriz[i][j] < matriz[i+1][j+1] && matriz[i+1][j+1] != 0){
									if(i==j){
							
										aux_matr = matriz[i+1][j+1];
										matriz[i+1][j+1] = matriz[i][j];
										matriz[i][j] = aux_matr;
									}						
								}
							}		
							if(ij == 2){
								if(matriz[i][j] > matriz[i+1][j-1] && matriz[i+1][j-1] != 0){
										if((i+j)==(imax_global-1)){											
											aux_matr = matriz[i+1][j-1];
											matriz[i+1][j-1] = matriz[i][j];
											matriz[i][j] = aux_matr;
										}
														
								}
							}
						}
					}
				}
			interfacem(1);
			break;
		default:
			printf("Opcao errada\n");
			Sleep(2000);
			interfacem(1);
		break;
	
		}
}

void inserir_matriz(int imax, int jmax){

	imax_global = imax;
	jmax_global = jmax;
	
	fflush(stdin);
	system("cls");
	printf("--------------------------------------------------------------------\n");
	printf("Digite os numeros da matriz:\n");

	for(int i=0;i<imax;i++){
		
		for(int j=0;j<jmax;j++){

			printf("Digite a posicao [%d][%d]:", i, j);
			scanf("%d", &matriz[i][j]);
			
		
		}
		printf("\n");
	
	}

	interfacem(0);

}

void interfacem(int opc){
	
	fflush(stdin);
	system("cls");
	int opc_case0;
	int opc_case1;
	int opc_fc;

	switch(opc){
	
	case 0:
		printf("-----------------------------------by edubertin-------------\n");
		printf("Matrizes 5x5\n\n");
		printf("1- Inserir Matriz\n");
		printf("2- Ordenar Matriz\n");
		printf("Digite a opcao desejada:\n");
		scanf("%d", &opc_case0);

			switch(opc_case0){
				case 1:
				inserir_matriz(5,5);
				break;
				case 2:
				if(imax_global != 0){
				interfacem(1);
				} else {
				printf("Voce necessita inserir a matriz\n");
				Sleep(2000);
				interfacem(0);				
				}
				break;
				default:
					interfacem(0);
				break;
			}
	break;	
	case 1:
		printf("------------------------------------------------\n");
		for(int i=0;i<imax_global;i++){
			
			
			for(int j=0;j<jmax_global;j++){
			
				printf("|  %d  |", matriz[i][j]);
			
			}
		
			printf("\n");
				
		}
		
		printf("------------------------------------------------\n");
		printf("1- Ordernar crescente uma linha\n");
		printf("2- Ordernar decrescente uma linha\n");
		printf("3- Ordernar crescente uma coluna\n");
		printf("4- Ordernar decrescente uma coluna\n");
		printf("5- Ordernar crescente diagonal\n");
		printf("6- Ordernar decrescente diagonal\n");
		printf("Escolha sua opcao:");
		scanf("%d", &opc_case1);
		
		switch(opc_case1){
		
			case 1:
				printf("Qual linha?:\n");
				scanf("%d", &opc_fc);
				ordena_matriz(1,opc_fc);
			break;
			case 2:
				printf("Qual linha ?:\n");
				scanf("%d", &opc_fc);
				ordena_matriz(2,opc_fc);
			break;
			case 3:
				printf("Qual coluna?\n");
				scanf("%d", &opc_fc);
				ordena_matriz(3,opc_fc);
			break;
			case 4:
				printf("Qual coluna?\n");
				scanf("%d", &opc_fc);
				ordena_matriz(4,opc_fc);
			break;
			case 5:
				printf("Qual diagonal?\n");
				scanf("%d", &opc_fc);
				ordena_matriz(5,opc_fc);
			break;
			case 6:
				printf("Qual diagonal?\n");
				scanf("%d", &opc_fc);
				ordena_matriz(6,opc_fc);
			break;
			default:
				interfacem(1);
				printf("Opcao errado\n");
			break;

		
		}

		system("pause");


	break;
	default:
		system("cls");
		printf("Opcao errada\n");
		Sleep(1000);
		interfacem(1);
	break;
		
	}

}

int main()
{

	interfacem(0);


	return 0;
}

Strings e Moda

Um programinha em c que fiz para estudar a manipulação de string e moda

 

 

// Eduardo Bertin
// http:\\www.eduardobertin.com.br
// Contador de Strings: Iniciando com o basico.
// 1- fase: Fazer User interface. (pronto)
// 2- fase: implementar contagem de letras. (pronto)
// 3- fase: implementar contagem de palavras. (pronto)
// 4- fase: implementar moda exibindo qual do char mais exibido. (pronto)
// 5- fase: implementar moda com estastistica em ordem alfabeticas utilizando um array dentro de struct. (pronto)
// 6- fase: implementar moda com estastistica em ordem de vezes.(implementando)
// 7- fase: Criar painel com informações de menor e maior numero de vezes por letra e palvras.(implementando)
//----------------------------------------------------------------------------------------------------------------
// Versão Beta
// Estudos sobre Strings e Moda
//----------------------------------------------------------------------------------------------------------------
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#include "stdio.h"


// Definindo funções

void interf();
void contadorLetra();
void contadorPalavra();
void modaLetras();
void modaStat();


// Variaveis globais
char texto[200];


// Moda entre letras com estatistica
// Irá exibir quais letras foram usadas no texto e quantas vezes ela
// foi repetida. eu usei 256 para poder conver int em char e char em int
// ou seja na posição que eu guardar as vezes essa posicao convertida em
// em char será a própria letra, evitando o uso de 2 array.
void modaStat(){

	struct letras{
		int vezes[256];   // 256 posições
	} letr;

	int modaCont = 0, modaRef= 0;
	char rtn;
	
	system("cls");
	fflush(stdin);

	for(int i = 0;i<256;i++)
	{
		letr.vezes[i] = 0;  // zerando todas posições
	}

	printf("-----------------------------------------------------\n");
	printf("Digite o texto de no maximo 200 letras:\n(Enter para terminar)\n");
	gets(&texto[0]);


	for (int i=0;i<strlen(texto);i++)
	{
		
		for(int j=0;j<strlen(texto); j++)
		{

				if(texto[i] == texto[j]){
					modaCont++;
		     }
		}
		
		letr.vezes[(int)texto[i]] = modaCont;   // Ficará letr.vezes[numerodaletraemascii] = modaCont
		modaCont = 0;
		
	}
	printf("\n");
	printf("-----------------------------------------------------\n");

	for (int i = 0;i<256; i++){
		
		if(letr.vezes[i] != 0){
		printf("Letra \"%c\" , %d vezes.\n", (char)i, letr.vezes[i]);  // Ficará Letra convertida pelo char i e a posicao de i.
		}
	}
	printf("-----------------------------------------------------\n");
	printf("\n(Deseja denovo ? s/n)");
	gets(&rtn);
	
	switch (rtn){

	case 's':
		modaStat();
	case 'S':
		modaStat();
	default:
	    interf();
		
	}
}


// Moda entre as letras
// Moda e qual letra mais se repetiu no texto
// São dois for com um contador, lembrando que essa função ainda
// não funciona empate, provavelmente ficará o ultimo como maior
void modaLetras()
{
	int modaCont = 0, modaRef= 0;
	char modaLetra[20] = "";
	char rtn;
	
	system("cls");
	fflush(stdin);

	printf("-----------------------------------------------------\n");
	printf("Digite o texto de no maximo 200 letras:\n(Enter para terminar)\n");
	gets(&texto[0]);


	for (int i=0;i<strlen(texto);i++)             // Para pegar todas as strings
	{
		
		for(int j=0;j<strlen(texto); j++)         // Para comparar todas as strings
		{
			if(texto[i] == texto[j]){             // Se ambos for igual guarda o numero
					modaCont++;
		     }
		}
		
		if(modaCont > modaRef){
		modaRef = modaCont;	                      // Se for a maior guarda ou vai para outra
		modaLetra[0] = texto[i];

		}
		modaCont = 0;
		
	}
	printf("\n");
	printf("-----------------------------------------------------\n");
	printf("Repetiu %d vezes a letra \"%c\".(Deseja denovo ? s/n)", modaRef, modaLetra[0]);
	gets(&rtn);
	
	switch (rtn){

	case 's':
		modaLetras();
	case 'S':
		modaLetras();
	default:
	    interf();
		
	}

}

// Contador de palavras
// Essa função procura todos os espaços se supõe quantas palavras são.
// No final incremento a contaPalavra para ficar o mais realistico.
void contadorPalavra(){

	int contaPalavra = 0;
	char rtn;
	system("cls");
	fflush(stdin);

	printf("-----------------------------------------------------\n");
	printf("Digite o texto de no maximo 200 letras:\n(Enter para terminar)\n");
	gets(&texto[0]);
	
	for (int i=0;i<strlen(texto);i++)
	{
		if(texto[i] == ' '){      // a cada espaço, incrementa a variável
			contaPalavra++;		 
		}

	}
	
	contaPalavra++; // faz mais um incremento para a palavra do final.
	
	printf("\n");
	printf("-----------------------------------------------------\n");
	printf("Seu texto possui %d palavras. (Deseja denovo ? s/n)", contaPalavra);
	gets(&rtn);
	
	switch (rtn){  // switch para voltar
	case 's':
		contadorPalavra();
	case 'S':
		contadorPalavra();
	default:
	    interf();
		
	}
}

// Contador de Letra 
// Função que le todos os caracteres digitados, retira os espaços
// e conta quantas letras tem
void contadorLetra(){

	int contaLetra = 0;
	char rtn;
	system("cls");
	fflush(stdin);

	printf("-----------------------------------------------------\n");
	printf("Digite o texto de no maximo 200 letras:\n(Enter para terminar)\n");
	gets(&texto[0]);
	
	for (int i=0;i<strlen(texto);i++)
	{
		if(texto[i] != ' '){   // Para não contar os espaços
			contaLetra++;
		}
	}
	
	printf("\n");
	printf("-----------------------------------------------------\n");
	printf("Seu texto possui %d letras. (Deseja denovo ? s/n)", contaLetra);
	gets(&rtn);
	
	switch (rtn){  // switch para voltar

	case 's':
		contadorLetra();
	case 'S':
		contadorLetra();
	default:
	    interf();
		
	}

}

// interf - User interface do programa
void interf()
{
		int opc = 0;
		system("cls");
		fflush(stdin);

		// Interface
		printf("-----------------------------------------------------\n");
		printf("-                                                   -\n");
		printf("-                                                   -\n");
		printf("-  1- Contador de Letra                             -\n");
		printf("-  2- Contador de Palavras                          -\n");
		printf("-  3- Moda Entre as Letras                          -\n");
		printf("-  4- Moda com estatistica                          -\n");
		printf("-                                                   -\n");
		printf("-                                                   -\n");
		printf("------------------------------------by edubertin-----\n");
		printf("Selecione a opcao desejada:");
		scanf("%d", &opc);

		// Switch para chamar as funções
		switch(opc){

		case 1:
			contadorLetra();
			break;
		case 2:
			contadorPalavra();
			break;
		case 3:
			modaLetras();
			break;
		case 4:
			modaStat();
		default:
			interf();
		}
}

// Main - inicialização do programa
int main()
{
		system("cls");
		fflush(stdin);
		interf();  // chama interface
		return 0;
}

// Eduardo Bertin - www.eduardobertin.com.br