Good morning. I have a problem solving a question of an issue here in college. Here's the question.
Theteachergavethesourcecode(following)
#include<stdio.h>#include<stdlib.h>#include<locale.h>#definedimencao10typedefstructcelula{int*endereco;intcont;inttam;}Celula;voidmenu();voidverifica(int*espaco);voidliberarEspaco(Celulavetor[]);voidinicializa(Celulavetor[]);voidcria_vetor(Celulavetor[],intposicao);voidinsere(Celulavetor[]);voidimprime(Celulavetor[]);voidimprimirIntercalado(Celulavetor[]);intmaiorTam(Celulavetor[]);intmain(){setlocale(LC_ALL,"Portuguese");
Celula vetor[dimencao];
int opcao;
inicializa(vetor); // Inicializa todo o vetor com valor NULL
menu();
scanf("\n%d", &opcao);
while(opcao != 0){
system("PAUSE");
system("cls");
switch(opcao){
case 1: insere(vetor); break;
case 2: liberarEspaco(vetor); break;
case 3: imprime(vetor); break;
case 4: imprimirIntercalado(vetor);
default: printf("\nValor inválido!\n"); break;
}
menu();
scanf("\n%d", &opcao);
}
return 0;
}
void menu(){
printf("********************* MENU *************************");
printf("\n*\tDigite uma das opções abaixo: *");
printf("\n*\tDigite 1 para inserir elementos no vetor. *");
printf("\n*\tDigite 2 para liberação de espaço no vetor.*");
printf("\n*\tDigite 3 para imprimir todo o vetor. *");
printf("\n*\tDigite 4 Imprimir intercalado inicial *");
printf("\n*\tDigite 0 para SAIR. *");
printf("\n----------------------------------------------------\n");
printf("Digite AQUI -> ");
}
void liberarEspaco(Celula vetor[]){
int espaco;
printf("Informe o vetor que deseja liberar: Faixa entre 1 - 10:");
printf(" -> ");
scanf("\n%d", &espaco);
verifica(&espaco);
if (vetor[espaco].endereco == NULL){
printf("\nVetor %d VAZIO não é possível liberar espaço !!!\n\n", espaco);
} else{
int i = 0;
for(i = 0; i < vetor[espaco-1].tam; i++)
free (vetor[espaco-1].endereco[i]);
}
}
void inicializa(Celula vetor[]){
int i;
for (i=0; i<dimencao; i++){
vetor[i].endereco = NULL;
}
}
void cria_vetor(Celula vetor[], int posicao){
int size;
printf("\nInforme o tamanho do vetor na posição %d: ", posicao);
scanf("\n%d",&size);
while(size <= 0){
printf("\nTamanho deve ser maior que zero !!! "); // validar a faixa
printf("\nInforme novamente -> ");
scanf("\n%d",&size);
}
vetor[posicao-1].endereco = (int *) malloc(size*sizeof(int));
vetor[posicao-1].cont = 0;
vetor[posicao-1].tam = size;
}
void insere(Celula vetor[]){
int posicao, num;
printf("\nQual posição você deseja inserir? Faixa entre 1 - 10: "); // validar a faixa
printf("-> ");
scanf("\n%d",&posicao);
verifica(&posicao);
if(vetor[posicao-1].endereco == NULL){
cria_vetor(vetor, posicao);
}
if(vetor[posicao-1].cont == vetor[posicao-1].tam) //verificar se o vetor endereço está cheio
printf("\nVetor %d está CHEIO !!! \n\n", posicao);
else{
printf("\nInforme o elemento: ");
printf("-> ");
scanf("\n%d",&num);
vetor[posicao-1].endereco[vetor[posicao-1].cont] = num;
vetor[posicao-1].cont++;
printf("\n");
}
}
void imprime(Celula vetor[]){
int i, j;
for(i=0; i<dimencao; i++){
if (vetor[i].endereco != NULL){
printf("\n------------");
printf("\nVetor %d", i+1);
printf("\n____________");
for(j=0; j<vetor[i].cont; j++)
printf("\n%d", vetor[i].endereco[j]);
printf("\n\n");
}else
printf("\nVetor %d VAZIO", i+1);
}
printf("\n\n");
}
void verifica(int *espaco){
while(*espaco < 1 || *espaco > 10){
printf("\nPosição do vetor não corresponde! Faixa entre 1 - 10: "); // validar a faixa
printf("\nInforme novamente -> ");
scanf("\n%d", &(*espaco));
}
}
int maiorTam(Celula vetor[]) {
int i = 0;
int maior = 0;
for(i = 0; i < dimencao; i++)
if(vetor[i].tam > maior)
maior = vetor[i].tam;
return maior;
}
void imprimirIntercalado(Celula vetor[]) {
int maior = maiorTam(vetor);
int i, ic = 0, j;
for(i = 0; i < maior; i++) {
for(j = 0; j < dimencao; j++)
if(vetor[j].endereco[0] != NULL)
if(vetor[j].endereco[ic] != NULL)
printf("%d ", vetor[j].endereco[ic]);
ic++;
}
}
Every time I try to run option 4, the program hangs.
If you can give me this strength, thank you. :)