Jump to content


Crooks

Member Since 10 Dec 2016
Offline Last Active Oct 05 2023 07:57 PM
https://i.imgur.com/c00Ucpo.jpg Updated 14 Dec · 1 comments
***--

About Me

Unfortunately your curiousity has put you in great uncertainty.
~ #CSTEP Leader Crooks / Daily 

#include <stdio.h>
#include <stdlib.h>
 
/*int opcoesMenu();
void inserir();
void Listar2();
void Listar3();
void Listar4();
void insertion();
void excluir();
void aumentar();*/
 
 
typedef struct estrutura auxiliares;
struct estrutura{
  int* vAux;
  int tam;
  int check;
  int count;
  int* ordn;
};
int opcoesMenu(){
  int op;
  printf("\nESCOLHA UMA OPÇÃO:");
  printf("\n 1: Inserir novo elemento\n");
  printf(" 2: Lista elementos e tamanho das estruturas auxiliares\n");
  printf(" 3: Listar elementos ordenados por estrutura auxiliar\n");
  printf(" 4: Listar todos os elementos ordenados \n");
  printf(" 5: Excluir elemento\n");
  printf(" 6: Aumentar o tamanho de uma estrutura auxiliar\n");
  printf(" 7: Sair\n\n");
  scanf("%d", &op);
  return op;
}
 
void inserir(auxiliares vMain[]){
  int posit;
  int tam;
  int element;
  printf("\nDigite a posicao desejada da estrutura vMain, de 0 a 9:\n");
  scanf("%d", &posit);
  if(posit < 0 || posit > 9){
    while(posit < 0 || posit > 9){
      printf("posição inválida, digite outra: ");
      scanf("%d", &posit);
    }
  }
  if(vMain[posit].tam == 0){
    printf("Ops! Não existe estrutura auxiliar nessa posição. Crie uma! Digite o tamanho desejado: ");
    scanf("%d", &tam);
    while(tam < 0){
printf("tamanho inválido, digite outro: ");
scanf("%d", &tam);
}
    vMain[posit].vAux =(int* )malloc (tam * sizeof (int));
    vMain[posit].ordn = (int* )malloc (1 * sizeof (int));
    vMain[posit].tam = tam;
    vMain[posit].count = 0;
    printf("Vetor auxiliar de %d posicoes criado!!! \n\n", tam); 
  }
  else{
    printf("\n\nDigite o elemento a ser inserido(APENAS UM POR VEZ): ");
    scanf("%d", &element);
    printf("\n");
    for(int i = 0; i <= vMain[posit].tam; i++){
      if(vMain[posit].count == vMain[posit].tam){
        vMain[posit].check = 1;
        printf("Vetor cheio!");
        break;
      }
      
      if(vMain[posit].vAux[i] == 0 && vMain[posit].check == 0){
        vMain[posit].vAux[vMain[posit].count] = element;
        vMain[posit].count++;
        break;
      }
 
      
    }
  } 
 
}
  
void Listar2(auxiliares vMain[]){
  for(int i = 0; i < 10; i++){
      printf("\nAuxiliar %d: tam = %d\n", i, vMain[i].tam);
      if(vMain[i].count == 0){
        printf("estrutura vazia\n");
      }else{
        for(int j = 0; j < vMain[i].count; j++){
          if(vMain[i].check != 2){
              printf("%d ", vMain[i].vAux[j]);
          
            if(j == vMain[i].count){
              printf("\n");
            break;
            }
          }
          else printf("%d ", vMain[i].ordn[j]);
        }
    }
  }
}
void insertion(int array[], int tamanho) {
  int i, j, tmp;
  for (i = 1; i < tamanho; i++) {
    j = i;
    while (j > 0 && array[j - 1] > array[j]) {
      tmp = array[j];
      array[j] = array[j - 1];
      array[j - 1] = tmp;
      j--;
    }
  }
}
 
void Listar3(auxiliares vMain[]){ 
  for(int i = 0; i < 10; i++){
    printf("Auxiliar %d ordenado: \n", i);
    if(vMain[i].count !=0){
      vMain[i].ordn = (int *) realloc(vMain[i].ordn, vMain[i].count);
      for(int j = 0; j < vMain[i].count; j++){
        vMain[i].ordn[j] = vMain[i].vAux[j];
    } 
    insertion(vMain[i].ordn, vMain[i].count);
    vMain[i].check = 2;
    for(int n = 0; n < vMain[i].count; n++){
      if(vMain[i].count == 0){
        printf("estrutura vazia\n");
      }else{
      printf("%d ", vMain[i].ordn[n]);
      if(n == vMain[i].count -1 ){
        printf("\n");
        }
      }
      }
    }else{printf("Estruturavazia\n");}
  }
}
 
void Listar4(auxiliares vMain[]){
  int* Ordenados;
  int tamAll = 0, ordInc;
  for(int i = 0; i < 10; i++){
    if(vMain[i].tam != 0)
      tamAll += vMain[i].count;
  }
 
  Ordenados = (int *)malloc (tamAll * sizeof (int));
 
  for(int j = 0; j < 10; j++){ 
    for(int x = 0; x < vMain[j].count; x++){
       Ordenados[ordInc] = vMain[j].ordn[x];
      ordInc += 1;
    }
  }
 
  insertion(Ordenados, tamAll);
 
  printf("Todos os elementos ordenados: \n");
  for(int k = 0; k < tamAll; k++){
    printf("%d ", Ordenados[k]);
  }
  
 
 
 
}
 
void excluir(auxiliares vMain[]){
  int posit;
  int num;
  
  printf("Digite a posição desejada para exclusao: ");
  scanf("%d", &posit);
  while(posit < 0 || posit > 9){
    printf("posicao invalida, digite outra posicao");
    scanf("%d", &posit);
  }
  printf("\nDigite o numero a ser excluido: ");
  scanf("%d", &num);
 
 
  for (int i=0; i < vMain[posit].tam; i++){
    if (vMain[posit].vAux[i] == num){
      vMain[posit].vAux[i] = 0;
      printf("numero excluído");
      break;
    }
    else printf("numero não encontrado!");
  }
}
 
void aumentar(auxiliares vMain[]){
  int adicional;
  int posit;
  int aux;
 
  printf("Digite a posicao desejada com auxiliar existente: ");
  scanf("%d", &posit);
  while(vMain[posit].tam == 0){
    printf("Erro! Estrutura auxiliar não existente. Digite uma posição valida. ");
    scanf("%d", &posit);
    aux++;
    if(aux > 2){
      break;
    }
    
  }
  printf("\nDigite o tamanho extra para a estrutura: ");
  scanf("%d", &adicional);
 
  while(adicional < 0){
    printf("valor adicional invalido! digite um valor acima de 0");
    scanf("%d", &adicional);
  }
  
  if(vMain[posit].tam != 0){
    vMain[posit].tam = adicional + vMain[posit].tam;
  }
 
  vMain[posit].vAux = (int *) realloc(vMain[posit].vAux, vMain[posit].tam);
  //vMain[posit].ordn = (int *) realloc(vMain[posit].ordn, vMain[posit].tam);
  vMain[posit].check = 0;
  if(vMain[posit].tam == 0){
    printf("Nenhum vetor existente na posição. Nenhum aumento executado\n");
  }else{
  printf("Vetor aumentado para %d posicoes\n", vMain[posit].tam);}
  
 
}
 
void criaArquivo(FILE* arquivo, int tipo){
 
  if(tipo == 0){
  if((arquivo =fopen("arquivo.bin", "wb"))!=NULL){
  printf("Arquivo do tipo binario criado \n");
  }
    else{
    printf("Erro na criacao\n");
  }
}
else{
    if((arquivo =fopen("arquivo.txt", "w"))!=NULL){
      printf("Arquivo do tipo texto criado\n");
    }
    else printf("Erro na criacao\n");
  }
  fclose(arquivo);
  
}
 
/*void arqExiste(FILE* arquivo){
  if((arquivo = fopen("arquivo.bin", "rb"))!=NULL){//ARUQUIVO DO TIPO BINÁRIO 
    fseek(arquivo, 0, SEEK_END);
    if((ftell(arquivo))==0){
      printf("arquivo vazio\n");
    }
    else{
      printf("arquivo com dados\n");
      passaDados(vMain);
    }
  }
  else if((arquivo=fopen("arquivo.txt", "r"))!=NULL){//AQUIVO DO TIPO TEXTO
    fseek(arquivo, 0, SEEK_END);
    if((ftell(arquivo))==0){
      printf("arquivo vazio\n");
    }
    else{
      printf("arquivo com dados\n");
      passaDados(vMain);
    }
  }
}*/
 
void passaDados(auxiliares vMain[], int tipoArq){//PEGA DADOS DO ARQUIVO
  FILE* arquivo;
 
  if(tipoArq == 0){
    arquivo = fopen("arquivo.bin", "rb");
    for(int indice = 0; indice< 10; indice++){//tamanho e contador atual do conteúdo dos vetores e seus respectivos auxiliares
      fscanf(arquivo, "%d %d\n", vMain[indice].tam, vMain[indice].count);//
      for(int indiceAux = 0; indiceAux < vMain[indice].count; indiceAux++){
        fscanf(arquivo, "%d\n", vMain[indice].vAux[indiceAux]);
      }
    }
    fclose(arquivo);
    printf("Dados recuperados!\n");
 
  }else{
    arquivo = fopen("arquivo.txt", "r");
    for(int indice = 0; indice< 10; indice++){//tamanho e contador atual do conteúdo dos vetores e seus respectivos auxiliares
      fscanf(arquivo, "%d %d\n", vMain[indice].tam, vMain[indice].count);//
      for(int indiceAux = 0; indiceAux < vMain[indice].count; indiceAux++){
        fscanf(arquivo, "%d\n", vMain[indice].vAux[indiceAux]);
      }
    }
    fclose(arquivo);
    printf("Dados recuperados!\n");
  }
 
 
  
}
 
void armazena(auxiliares vMain[], int tipoArq){//COLOCA DADOS NO ARQUIVO
  FILE* arquivo;
 
  if(tipoArq == 0){
    arquivo = fopen("arquivo.bin", "wb");
    for(int indice = 0; indice< 10; indice++){//tamanho e contador atual do conteúdo dos vetores e seus respectivos auxiliares
      fprintf(arquivo, "%d %d\n", vMain[indice].tam, vMain[indice].count);//
      for(int indiceAux = 0; indiceAux < vMain[indice].count; indiceAux++){
        fprintf(arquivo, "%d\n", vMain[indice].vAux[indiceAux]);
      }
    }
    fclose(arquivo);
    printf("Dados salvos!");
 
  }else{
    arquivo = fopen("arquivo.txt", "w");
    for(int indice = 0; indice< 10; indice++){//tamanho e contador atual do conteúdo dos vetores e seus respectivos auxiliares
      fprintf(arquivo, "%d %d\n", vMain[indice].tam, vMain[indice].count);//
      for(int indiceAux = 0; indiceAux < vMain[indice].count; indiceAux++){
        fprintf(arquivo, "%d\n", vMain[indice].vAux[indiceAux]);
      }
    }
    fclose(arquivo);
    printf("Dados salvos!");
  }
 
 
}
 
 
 
 
 
 
   
 
int main(void){
 
auxiliares vMain[10] = {0, 0, 0, 0, 0};
int op = 0; 
int sair = 0;
int tipoArq;
FILE* arquivo;
 
  if((arquivo = fopen("arquivo.txt", "r")) == NULL || ((arquivo = fopen("arquivo.bin", "rb")) == NULL) ){
  printf("Arquivo inexistente\n");
    printf("Escolha o tipo de arquivo a ser criado: 0 - binário | 1 - texto: ");
    scanf("%d", &tipoArq);
    while(tipoArq < 0 || tipoArq > 1){
    printf("opção invalida, digite outra opção");
    scanf("%d", &tipoArq);
  }
    criaArquivo(arquivo, tipoArq);
    
  }
  else{
    if((arquivo = fopen("arquivo.txt", "r")) != NULL){
      tipoArq == 1;
      passaDados(vMain, tipoArq);
    }
    else if((arquivo = fopen("arquivo.bin", "rb")) != NULL ){
      tipoArq == 0;
      passaDados(vMain, tipoArq);
    }
  }
  
 
 
 
while(!sair){
  
  op = opcoesMenu();
  
  switch(op){
 
    case 1:{
      inserir(vMain);
      break;
    }
 
    case 2:{
      Listar2(vMain);
      break;
    }
 
    case 3:{
      Listar3(vMain);
      break;
    }
 
    case 4:{
      Listar4(vMain);
      printf("\n");
      break;
    }
    
    case 5:{
      excluir(vMain);
      break;
    }
 
    case 6:{
      aumentar(vMain);
      break;
    }
    
    case 7:{
      printf("Finalizando o programa\n");
      sair = 1;
      armazena(vMain, tipoArq);
      for(int i = 0; i < 10; i++){
        free(vMain[i].vAux);
      }
      break;
    }
 
    return 1;
 
 
 
 
 
 
    }
  }
}

Community Stats


  • Group User
  • Active Posts 238
  • Profile Views 2,142
  • Time Online23d 53m 25s
  • Member Title Advanced Member
  • Age Age Unknown
  • Birthday Birthday Unknown
  • Gender
    Not Telling Not Telling
  • Location
    Edgeville
  • Interests
    Ragging
  • Clan
    CSTEP

Game Activity

  • Photo
    Crooks has completed the Cyclopes collection log entry!
    Nov 20, 2020 4:57 pm
  • Photo
    Crooks has reached level 99 in Slayer!
    Dec 15, 2018 8:44 am
  • Photo
    Crooks received 1 x Monkey tail as a drop! (Kill #67)
    Dec 15, 2018 8:06 am