- Alora
- → Viewing Profile: Awards: Crooks
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,143
- Time Online23d 53m 25s
- Member Title Advanced Member
- Age Age Unknown
- Birthday Birthday Unknown
-
Gender
Not Telling
-
Location
Edgeville
-
Interests
Ragging
-
Clan
CSTEP