Example #1
0
void ordenarP()
{
	int escolha;
	do {
		system("cls");
		printf("\nMenu Ordenar por preço\n");
		printf("\nEscolha o menu que pretende abrir.\n");

		printf("1. Crescente\n");
		printf("2. Decrescente\n");
		printf("0. Sair\n");
		printf("\nOpção: ");
		scanf("%d", &escolha);
		switch (escolha) {
		case 0: break;

		case 1: ordenarCrescente(1);
			break;

		case 2: ordenarDecrescente(1);
			break;

		default: printf("Insira um número de 0 a 3.\n");
			break;
		}
	} while (escolha != 0);
}
Example #2
0
void main(void)
{


	// Iniciliza a serial
	inicializarSerial();


	// USART out -> Introducao +  mensagem numero de Processos
  // obs: usamos um While(BusyUSART()) para cada envio para USART.
  // "###   Alocacao de Memoria - Worst Fit   ###"
  // "Entre com o Numero de Processos(Se > 5, em LOTE !!!): "
  printf("\t\t%S%S%S", msgInicial, CRLF, msgNumProcessos);
  while(BusyUSART());

  // USART in -> Le numero de Processos
  // função getInt() faz todo o trabalho de feedback ao usuario
  // ao digitar cada dígito, finalizando com ENTER.
	iNumProcessos = getInt();

  // USART out -> mensagem / in-> numero de BlocosDeMemoria
  // "Entre com o Numero de Blocos: "
  printf("%S",msgNumBlocos);
  while(BusyUSART());
  // USART in -> Le numero de Blocos
  iNumBlocos = getInt();



  if(iNumProcessos > 5) {
      //Ativa modo com iteração da entrada. trabalho em lote.

      // "Entre com um tamanho para TODOS os Processos: "
      printf("%S", msgTodosProcessos);
      while(BusyUSART());
      // Recebe tamanho de todos os processos.
      iTamTodosProcessos = getInt();

      //Itera atribuição de tamanho para cada posição
      // do vetor de tamanho de procesos.
      for(i=0;i<iNumProcessos;i++) tamProcessos[i] = iTamTodosProcessos;

      //Quebra de linha simples.
      printf("%S", CRLF); //new line
      while(BusyUSART());

      // "Entre com um tamanho para TODOS os Blocos: "
      printf("%S", msgTodosBlocos);
      while(BusyUSART());

      // Recebe tamanho para todos os Blocos.
      iTamTodosBlocos = getInt();
      // atribui tamanho para cada bloco.
      for(i=0;i<iNumBlocos;i++) {
          vBlocoMem[i].tamanho = iTamTodosBlocos;
          vBlocoMem[i].id = i+1;
        }

  } else {

         // Para até 5 Processos, diálogo é lançado
         // para definir cada proceso e bloco.

        // Introduz atribuição até 5 elementos.
        //"Entre com o tamanho dos Processos: "
        printf("%S%S", tamCadaProcesso, CRLF);
        while(BusyUSART());

        // iNumProcessos sempre <= 5
        for(i=0;i<iNumProcessos;i++) {
            // "Processo i: "
            printf("%S %d: ",processo, i+1);
            while(BusyUSART());
            // Atribui valor a partir do buffer.
            tamProcessos[i] = getInt();
        }

        // "Entre com o tamanho dos Blocos: "
        printf("%S%S",tamCadaBloco, CRLF);
        while(BusyUSART());

        for(i=0;i<iNumBlocos;i++) {
            // "Bloco i: "
            printf("%S %d: ",bloco, i+1);
            while(BusyUSART());
            // Atribui valores necessário para preencher struct.
            vBlocoMem[i].tamanho = getInt();
            vBlocoMem[i].id = i+1; // Início em 1.
        }
	}

    //## Fim de entrada, início da computação ##

    // Ordena vetor de Blocos de Memória de modo a ter
    // Maior posição na primeira posição.
    // %%%%% , %%%% , %%% , %% , %
    // obs: Desse ponto em diante creditamos o usuário
    // JoeVogel @ Github pela disponibilidade da lógica
    // usada em Java, que foi adaptada para C e depois PIC.
    ordenarDecrescente(vBlocoMem, iNumBlocos);

    // "ID Processo:     Tamanho:     ID Bloco:     Espaco no Bloco:     Espaco Restante: "
    printf("%S%S", cabecalho, CRLF);
    while(BusyUSART());

    // Para cada Processo
    for(i=0;i<iNumProcessos;i++) {

        // Percorre vetor de blocos a procura do maior espaço eestante após a alocação.
        // Melhor caso: Posição inicial conterá maior espaço após alocacção.
        // Pior cas0: Não há espaço para o Processo. Percorre todo o vetor de blocos.
        for(j=0;j<iNumBlocos;j++) {

            // Há espaço?
            if(vBlocoMem[j].tamanho >= tamProcessos[i]){
                // Imprime linha output
                // "1      250       1      300        50"
                printf("     %d              %d            %d               %d                    %d%S",i+1, tamProcessos[i], vBlocoMem[j].id, vBlocoMem[j].tamanho,
                       (vBlocoMem[j].tamanho - tamProcessos[i]),CRLF);
               while(BusyUSART());

                //Registra alteracao no tamanho do bloco
                vBlocoMem[j].tamanho -= tamProcessos[i];

                // Reordena o vetor de BlocosMem.
                ordenarDecrescente(vBlocoMem, iNumBlocos);
                break;
            }
        }

        // Não há espaço em nenhum bloco para aquele processo.
        // Confirma que chegou ao fim do vetor.
        if(j == iNumBlocos){
          // "5        20         IMPOSSIVEL ALOCAR"
          printf("     %d                    %d      %S%S",i+1, tamProcessos[i],impossivel, CRLF);
        }
    }

    //Encerra programa.
    printf("\r\n\r\n\r\n" );
    while(1);

}