Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <p18f4550.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <usart.h>
- #include <string.h>
- /*-------------------------------------
- * Bits de configuração do PIC18F4550
- *--------------------------------------*/
- // Oscilador e outras definicoes de registradores
- #pragma config FOSC = HS // (8 MHz)
- #pragma config IESO = OFF
- #pragma config PWRT = OFF
- #pragma config BORV = 3
- #pragma config WDT = OFF
- #pragma config WDTPS = 32768
- #pragma config MCLRE = OFF
- #pragma config LPT1OSC = OFF
- #pragma config PBADEN = OFF
- #pragma config STVREN = ON
- #pragma config LVP = OFF
- //Variáveis globais
- int pi,tam;
- char *cv;
- char escolha[1];
- char fim[3];
- int vetor[]= {95, 180, 34, 119, 11, 123, 62, 64};
- int a[]= {95, 180, 34, 119, 11, 123, 62, 64},b[9];// vetores auxuliares
- int d[9];
- /*Configura e habilita a comunicação serial*/
- void inicializarSerial()
- {
- OpenUSART( USART_TX_INT_ON &
- USART_RX_INT_ON &
- USART_ASYNCH_MODE &
- USART_EIGHT_BIT &
- USART_CONT_RX &
- USART_BRGH_HIGH,51);
- //putrsUSART("HELLO! ");
- }
- void imprime(){
- int j;
- for(j=0;j<9;j++){
- itoa(a[j],cv);
- putsUSART(cv);
- putrsUSART(" ");
- }
- putrsUSART("| ");
- //putrsUSART("\0");
- // getsUSART(inputstr,5);
- //getsUSART( inputstr, 5 );
- //putsUSART(inputstr);
- }
- void scan(int tam, int pi){
- int i,j, na = tam;
- int disk=pi; //loc da posição inicial
- int temp,max;
- int dloc=0; //loc do acesso no array
- for(i=0;i<na;i++){
- d[i]=vetor[i];
- }
- d[na]=disk;
- na=na+1;
- for(i=0;i<na;i++){ // Ordenação das entradas
- for(j=i;j<na;j++){
- if(d[i]>d[j]){
- temp=d[i];
- d[i]=d[j];
- d[j]=temp;
- }
- }
- }
- max=d[na];
- for(i=0;i<na;i++){ // acha a localização da posição inicial no array
- if(disk==d[i]) { dloc=i; break; }
- }
- for(i=dloc;i>=0;i--){
- itoa(d[i],cv);
- putsUSART(cv);
- putrsUSART(" ");
- }
- for(i=dloc+1;i<na;i++){
- itoa(d[i],cv);
- putsUSART(cv);
- putrsUSART(" ");
- }
- putrsUSART("| ");
- }
- void ssf(int tam, int pi){
- int deslocamento=0,n=tam,temp=0,menorDesl=0;
- int k=0,x=0,t=0,i=0,j=0; //variaveis auxiliares
- a[0]=pi;// posição 0 do vetor recebe posição inicial
- //passa vetor de entrada para vetor auxiliar, assim o vetor original não é modificado
- for(i=1;i<=n;i++){
- a[i]=vetor[i-1];
- }
- b[k++]=a[0];
- // organiza o vetor comparando a menor distancia entre a posição i e j
- // de acordo com que as posições são encontradas os numeros vão sendo armazenados no vetor b
- for(i=0;i<n;i++){
- menorDesl=10000;
- for(j=i+1;j<=n;j++){
- if(a[i]>a[j])
- deslocamento=a[i]-a[j];
- else
- deslocamento=a[j]-a[i];
- if(deslocamento<menorDesl){
- menorDesl=deslocamento;
- x=j;
- }
- }
- t+=menorDesl;
- temp=a[i+1];
- a[i+1]=a[x];
- a[x]=temp;
- b[k++]=a[i+1];
- }
- //imprime vetor saida
- imprime();
- }
- void main() {
- inicializarSerial();
- pi=35;
- tam=8;
- putrsUSART("Escolha o metodo:\n");
- putrsUSART("1-SSF 2-SCAN\n");
- getsUSART( escolha, 1 );
- if(escolha[0]=='1')
- scan(tam,pi);
- if(escolha[0]=='2')
- ssf(tam, pi);
- getsUSART( fim, 2 );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement