Jump to content
Jeovane Carvalho

Buscar segunda posição de um vetor, quando deletado a posição 1 em c/ c++

Recommended Posts

Saudações senhoras (es), venho por meio desta pedir um help, pois tenho esse código que exibirei abaixo que esta funcionando 99%, mas só esta faltando um porém que ainda não consigo implementar, tipo:

Tenho esse código , um menu de nota de alunos, que insere, deleta, imprime e busca por código, até aí esta funcionando de boa, só que, por exemplo se eu cadastrar 2 alunos, um com a matrícula 1 e o outro com a matrícula 2, ele mostra normalmente na tela quando eu peço para listar , mas se eu deletar a matrícula 1 e deixar apenas a matrícula 2 , ele já não lista mais, e pelo que vi e li em vários fóruns é que teria que colocar um ponteiro, ou uma opção recursiva de uma função chamando ela mesma, e gostaria de saber como faço , e se preciso que ao deletar a matrícula 1, este espaço de memória ficará vazio e se tem como realocar a matrícula 2 para o espaço 1 da memória, pois mesmo eu fazendo o laço nessa variável ela não  busca a segunda cadastrada, segue o código:

A senha de acesso é 1

 

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#define SENHA 1
#define MAX 3
#ifndef COLORS_H
#define COLORS_H

#define foreground(color) FORE##color
#define background(color) BACK##color
#define style(style_) style_

/** Foreground Colors **/
#define FOREBLACK printf("\033[30m") 
#define FORERED printf("\033[31m") 
#define FOREGREEN printf("\033[32m") 
#define FOREYELLOW printf("\033[33m") 
#define FOREBLUE printf("\033[34m") 
#define FOREMARGENTA printf("\033[35m") 
#define FORECYAN printf("\033[36m") 
#define FOREWHITE printf("\033[37m") 
#define FORENORMAL_COLOR printf("\033[39m") 

/** Background Colors **/
#define BACKBLACK printf("\033[40m") 
#define BACKRED printf("\033[41m") 
#define BACKGREEN printf("\033[42m") 
#define BACKYELLOW printf("\033[43m") 
#define BACKBLUE printf("\033[44m") 
#define BACKMAGENTA printf("\033[45m") 
#define BACKCYAN printf("\033[46m") 
#define BACKWHITE printf("\033[47m") 
#define BACKNORMAL printf("\033[49m")

/** Style **/
#define BRIGHT printf("\033[1m")
#define DIM printf("\033[2m")
#define NORMAL printf("\033[22m")
#define RESETALL printf("\033[0m")
#define UNDERLINE printf("\033[4m")
#define BLINKSLOW printf("\033[5m")
#define BLINKRAPID printf("\033[6m")
#define ITALIC printf("\033[3m")
#define NEGATIVE printf("\033[7m")
#endif /* COLORS_H */




	//CONSTRUTOR DE VARIÁVEIS
	struct cadastro
	{
	int matricula;
	char aluno[50];
	char disciplina1[50];
	char disciplina2[50];
	char disciplina3[50];
	float nota1;
	float nota2;
	float nota3;
	float nota4;
	float nota5;
	float nota6;
	float nota7;
	float nota8;
	float nota9;
	int codaux[20];
	int vazio;
	int cod;
	
		
	};

	struct cadastro registros[MAX];
	
	void flush_in(){ 
	int ch;
	while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){} 
	}
	void gotoxy (int x, int y);
	//Funçoes que serao usadas
	void cadastrar(int cod, int pos);
	
	//Funçao para consulta
	void listar( void );
	
	//Funçao para consulta
	void consultar( void );
	
	//Funçao para exibir relatorio
	int relatorio( void );
	
	//Função para verificar posição
	int verifica_pos( void );
	
	//Função para verificar codigo
	int verifica_cod( int cod );
	
	//Função para verificar posição do codigo
	int verifica_pos( void );

	//Função para excluir cadastro
	void zerar( void );
		
	//Função para excluir cadastro
	void excluir( void );
	
	//FUNÇÃO DO MAIN QUE CHAMA TODAS AS FUNÇÕES
	int  main(void){
    system ("color 1f");
  	int op = 0,senha=SENHA,posicao, matricula, retorno;
   	printf("#########               SISTEMA DE NOTAS DE ALUNOS:               ##############\n\n ");
	
	do
	{
	printf ("\t\t     ----------------------------------\n");
	printf ("\n\t\t\t   INSIRA A SUA SENHA : ");
	fflush(stdin);
  
    scanf ("%d",&senha);
    if(senha!=SENHA)
	{
		system ("color 1E");
   	printf("\n\n\t\t\t Senha incorreta. Tente Novamente !\n\n");
                   printf("\t\t    ");system("pause");
    system("cls");
  

	}
	}
	while(senha!=SENHA);
	
	while(op!=5){
	system("cls");
	printf ("\t\t\t *** MENU DE NOTAS DE ALUNO: ***\n\n ",setlocale(LC_ALL,""));
	printf ("\n\n\n\t\t\t  DIGITE UMA OPÇÃO ABAIXO: \n\n\n\n ",setlocale(LC_ALL,""));
	printf ("\t\t\t -----------------------------\n",setlocale(LC_ALL,""));
	printf ("\t\t\t| 1 - Matrícula do Aluno      |\n",setlocale(LC_ALL,""));
	printf ("\t\t\t| 2 - Listar todos os Alunos  |\n",setlocale(LC_ALL,""));
	printf ("\t\t\t| 3 - Pesquisar por Matrícula |\n",setlocale(LC_ALL,""));
	printf ("\t\t\t| 4 - Excluir Aluno           |\n",setlocale(LC_ALL,""));
	printf ("\t\t\t| 5 - Sair                    |\n",setlocale(LC_ALL,""));
	printf ("\t\t\t -----------------------------\n",setlocale(LC_ALL,""));
	scanf ("%d", &op); 
	switch(op)
    {
	case 1: // FUNÇÃO VERIFICA A MATRÍCULA AO CADASTRAR
    {
    posicao=verifica_pos();
    
	if ( posicao !=2)
    {

    printf("\n\t\t  Digite o número da matrícula para o aluno : ");
    scanf("%d",&matricula);
	fflush(stdin);

    retorno = verifica_cod( matricula);

    if ( retorno == 1 )
	{
	
    cadastrar( matricula, posicao );
    }else{
	
    printf("\n\t\tEste número de Matrícula já existe. Tente Outro !\n\n");
    printf("\t\t    ");system("pause\n\n");
    }

	}else
	
    printf("\n\n\t\t     Não é possível realizar mais cadastros !\n\n");
    printf("\t\t    ");system("pause\n\n");
	break;

    }

    case 2: // LISTAR
    
	{
    listar();
    break;    
    
	}
    
    case 3:// CONSULTAR
    {
    consultar();
    break;
    }
    
    case 4:// EXCLUIR
    {
    excluir();
    system ("pause");
    break;    
    }
	 // SAIR
    case 5:
    {
    
	printf("\n\n\t\t           Saindo do Sistema - Tchau");
    getchar();
    printf("\t\t    ");return 0;
    break;
    }
    
	default :// OPÇÃO INVÁLIDA
    printf("\n\t\t         Opcão Inválida\n\n",setlocale(LC_ALL,""));
    printf("\t\t    ");system("pause\n\n");
    break;
   
    }
    }
    getchar();

    }//Final da Função Verifica se a matrícula ja esta sendo usada
    //FIM DO MAIN


   // FUNÇAO CADASTRAR
    void cadastrar( int cod, int pos )
    {
    pos = verifica_pos();

    registros[pos].cod = cod;

	
	printf("\n\t\t  Digite Nome do Aluno: ");
    scanf("%s",&registros[pos].aluno);
    
    
	printf("\n\t\t  Digite a 1º  Disciplina : ");
    scanf("%s",&registros[pos].disciplina1);
    flush_in();
    printf("\n\t\t  Nota do 1º Bimestre: ");
	scanf("%f",&registros[pos].nota1);
    fflush(stdin);
    printf("\n\t\t  Nota do 2º Bimestre: ");
    scanf("%f",&registros[pos].nota2);
    fflush(stdin);
    printf("\n\t\t  Nota do 3º Bimestre: ");
    scanf("%f",&registros[pos].nota3);
	
	printf("\n\t\t  Digite a 2º Disciplina : ");
    scanf("%s",&registros[pos].disciplina2);
    fflush(stdin);
    printf("\n\t\t  Nota do 1º Bimestre: ");
	scanf("%f",&registros[pos].nota4);
    fflush(stdin);
    printf("\n\t\t  Nota do 2º Bimestre: ");
    scanf("%f",&registros[pos].nota5);
    fflush(stdin);
    printf("\n\t\t  Nota do 3º Bimestre: ");
    scanf("%f",&registros[pos].nota6);
    
    printf("\n\t\t  Digite a 3º Disciplina :  ",setlocale(LC_ALL,""));
    scanf("%s",&registros[pos].disciplina3);
    fflush(stdin);
    printf("\n\t\t  Nota do 1º Bimestre: ",setlocale(LC_ALL,""));
	scanf("%f",&registros[pos].nota7);
    fflush(stdin);
    printf("\n\t\t  Nota do 2º Bimestre: ",setlocale(LC_ALL,""));
    scanf("%f",&registros[pos].nota8);
    fflush(stdin);
    printf("\n\t\t  Nota do 3º Bimestre: ",setlocale(LC_ALL,""));
    scanf("%f",&registros[pos].nota9);
    

    registros[pos].vazio = 1;

    printf("\n\t\t  Cadastro Realizado com Sucesso!\n\n",setlocale(LC_ALL,""));
    
    printf("\t\t    ");system("pause"); 


    } //Final da Função Cadastrar


   // FUNÇAO LISTAR DADOS
    void listar(void)
    {
   
    int i,cod,posicao,pos,total;
    setlocale(LC_ALL," ");
    

    pos = verifica_pos();
   
   
    if (cod>MAX)
    {
    	 system("cls");	
    printf("\nRESULTADO DA BUSCA: \n");
    printf("\nForam encontrado (s) o total de :");
    for(i=0; i<pos; i++){
    total=pos;
    
    }
    printf(" %d Aluno (s) :\n",total);
    printf("________________________________________________\n\n");
	}
    	
    
 
    if (pos>=1)
    {

    for (i=0; i<pos; i++ )
    {
	printf("\n\t |Matrícula : %d\n",registros[i].cod);
	printf("\n\t |Nome do Aluno é: %s\n" ,registros[i].aluno);
	
	printf("\n\t |Disciplina : %s\n",registros[i].disciplina1);
	printf("\n\t |Nota do 1º Bimestre: %.1f\t",registros[i].nota1);
	printf("\n\t |Nota do 2º Bimestre: %.1f\t",registros[i].nota1);
	printf("\n\t |Nota do 3º Bimestre: %.1f\n",registros[i].nota3);
	
	printf("\n\t |Disciplina : %s\n",registros[i].disciplina2);
	printf("\n\t |Nota do 1º Bimestre: %.1f\t",registros[i].nota4);
	printf("\n\t |Nota do 2º Bimestre: %.1f\t",registros[i].nota5);
	printf("\n\t |Nota do 3º Bimestre: %.1f\n",registros[i].nota6);
	
	printf("\n\t |Disciplina : %s\n",registros[i].disciplina3);
	printf("\n\t |Nota do 1º Bimestre: %.1f\t",registros[i].nota7);
	printf("\n\t |Nota do 2º Bimestre: %.1f\t",registros[i].nota8);
	printf("\n\t |Nota do 3º Bimestre: %.1f\n",registros[i].nota9);
	printf("___________________________________________________\n\n");

    } 
    
	}else{

    if (pos<=0)
	{

	printf("\n\n\t\t\t Não existe Aluno cadastrado !\n\n");
                   printf("\t\t    ");system("pause");
                   return;
	getchar();
    } 

	}
    
    printf("\t\t    ")/system("pause");
    }//Final da Função Listar


    //FUNÇÃO CONSULTAR  DADOS
    void consultar( void )
    {
    int cont = 0, cod,posicao, retorno,codaux;
   
    printf("\n\n\t\t\tEntre com o número de Matrícula : ",setlocale(LC_ALL,""));
    scanf("%d",&cod);


    while ( cont <=2)
    {

    
    if (registros[cont].cod==cod)
    {
    if (registros[cont].vazio==1)
    { 
    system("cls");
    printf("\nRESULTADO DA BUSCA: \n\n");
    printf("_____________________________________________\n\n");
    printf("\nMatrícula : %d\n",registros[cont].cod);
    printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno);
	
	printf("\nDisciplina : %s\n",registros[cont].disciplina1);
	printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1);
	printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1);
	printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3);
	
	printf("\nDisciplina : %s\n",registros[cont].disciplina2);
	printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4);
	printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5);
	printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6);
	
	printf("\nDisciplina : %s\n",registros[cont].disciplina3);
	printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7);
	printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8);
	printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9);
   
   
    printf("\n\n");
	system ("pause");
	break;

    }

	}
        
    cont++;

    }
    if (registros[cont].vazio==0)
    {
		
    printf("\n\t\t  Esta Matrícula não existe. Tente novamente !\n\n",setlocale(LC_ALL,""));
    printf("\t\t    ")/system("pause");

    }
    
    }   //Final da Função Consultar Dados


  	 //FUNÇÃO VERIFICA POSIÇÃO
    int verifica_pos( void )
    {
    int cont = 0;
    while ( cont <=MAX)
    {
    if ( registros[cont].vazio == 0 )
    return(cont);
	cont++;
    }

    return(-1);

    }//Final da verifica Posição



    int zerar(int cod)  
    {
    int cont;

    for ( cont = 0; cont <= MAX; cont++ )
    registros[cont].vazio = 0;
    }



     //FUNÇÃO VERIFICA CÓDIGO
    int verifica_cod( int cod )
    {
    int cont = 0;
	while ( cont <= MAX )
    {
    if ( registros[cont].cod == cod )
    return(0);

    cont++;
    }

    return(1);

    }//Final da Função Verifica Código


    //FUNÇÃO EXCLUIR
    void excluir( void )
    {
    int cod, cont = 0;
    char resp;

    printf("\n\t     Entre com o código do registro que deseja excluir :",setlocale(LC_ALL,""));
    scanf("%d", &cod );

    while ( cont <= MAX)
    {

    if ( registros[cont].cod == cod )
    { // FALTOU

    if ( registros[cont].vazio == 1 )
    {
    	printf("\n\n\nRESULTADO DA BUSCA: \n\n");
        printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[cont].cod);
		printf("**********************************************\n\n");
	    printf("\nMatrícula : %d\n",registros[cont].cod);
	    printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno);
		
		printf("\nDisciplina : %s\n",registros[cont].disciplina1);
		printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1);
		printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1);
		printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3);
		
		printf("\nDisciplina : %s\n",registros[cont].disciplina2);
		printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4);
		printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5);
		printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6);
		
		printf("\nDisciplina : %s\n",registros[cont].disciplina3);
		printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7);
		printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8);
		printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9);
              
        getchar();

        printf("\nDeseja realmente excluir ? S/N:");
        scanf("%c",&resp);

        if ( ( resp == 'S' ) || ( resp == 's' ) )
        {
        	
	    registros[cont].cod=0;
	    registros[cont].aluno[50]=0;
		registros[cont].disciplina1[50]=0;
		registros[cont].nota1=0;
		registros[cont].nota1=0;
		registros[cont].nota3=0;
		registros[cont].disciplina2[50]=0;
	    registros[cont].nota4=0;
		registros[cont].nota5=0;
		registros[cont].nota6=0;	
		registros[cont].disciplina3[50]=0;
		registros[cont].nota7=0;
		registros[cont].nota8=0;
		registros[cont].nota9=0;
        registros[cont].vazio=0;	        
	    printf("\nExclusão feita com sucesso\n\n");
	        
	        
	
	     
		   break;
          }
        else
        {
            if ( ( resp == 'N' ) || ( resp == 'n' ) )
            {
            printf("Exclusão cancelada!\n");
            break;
            }
        }

    }

    }

    cont++;

    if ( cont > 2)
    printf("\n\n\t\t    Código não encontrado . Tente Outro !\n");

    }
    printf("\n\t\t  ");return;system("pause"); 
    system("cls");

    }//Final da Função Excluir

  Desde já eu agradeço o espaço..

Share this post


Link to post
Share on other sites

Não manjo de C, mas me recordo de uma função chamada 'free' pra liberar o espaço da memória, e depois mudar os elementos pra posição -1

Tipo, você tem o array 

1 2 3 4 5

remove o 3

1 2 x 4 5

Ai você puxa o 4 pro lugar do 3 e o 5 pro lugar do 4

1 2 4 5

 

https://stackoverflow.com/questions/17080077/deleting-a-node-from-a-queue

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By pachecok
      Estou iniciando em programação e tenho um trabalho em C que devo:
       
      Construir um programa que leia uma matriz 7x7 de inteiros.
      Após a leitura, calcular o somatório apenas dos elementos abaixo destacados da matriz lida.
      Mostre, os elementos destacados e o somatório.
       
      A soma deve ser entre as posições da matriz refentes a imagem em anexo. 
      É esta a dificuldade que eu encontrei, não sei os passos para realizar esta soma em específico então provavelmente a minha tentativa abaixo foi bizarra. 
       
      Alguém poderia me ajudar? Agradeço desde já. 
       
      #include<stdio.h> #include<conio.h> #define linha 7 #define coluna 7 int main (void ) { int i, j, matriz[linha][coluna], result, soma; printf ("\nDigite valor para os elementos da matriz\n\n"); for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("\nElemento[%d][%d] = ", i, j); scanf ("%d", &matriz[ i ][ j ]); } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("%i", matriz[i][j]); } printf("\n"); } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ result=result+matriz[i][j]; } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ soma=soma+matriz[3][3]+matriz[4][2]+matriz[4][3]+matriz[4][4]+matriz[5][1]+matriz[5][2]+matriz[5][3]+matriz[5][4]+matriz[5][5]+matriz[6][0]+matriz[6][1]+matriz[6][2]+matriz[6][3]+matriz[6][4]+matriz[6][5]+matriz[6][6]; } } printf("\n\nA soma de todos valores da matriz: %d\n", result); printf("\n\nA soma dos valores solicitados: %d\n", soma); }  

    • By Lauts
      programa
      {
          inclua biblioteca Matematica
          
          funcao inicio()
          {
              inteiro hom=0, mul=0, rsim=0, rnao=0, rhsim=0, rmsim=0, n, t=4
              real psim, pnao
              caracter sexo, resp
              (n == t)
          {
              leia ("Informe o Sexo: ", sexo)
              leia ("Gostou do produto (S/N): ", resp)
              se (sexo =='1')
              {
                  hom = hom + 1
                  se (resp == '1')
              {
                  rmnao = rmnao + 1
              }
              }
              senao
              {
                  se (sexo == '2')
              {
                  mul = mul + 1
                  se (resp == '2')
              {
                  rhsim = rhsim + 1    
              }    
              }
              }
                  se (resp == '1')
              {
                  rsim = rsim +1            
              }
                  senao
              {
                  se (resp == '2')
              {
                  rnao = rnao +1
              }
              }
          n = n  + 1
          }
              psim = 100 * (rmsim / t)
              pnao = 100 * (rhnao / t)
          }
              escreva ("Quantidade de pessoas que responderam sim: ", rsim)
              escreva ("Quantidade de pessoas que responderam não: ", rnao)
              escreva ("Porcentagem de mulheres que responderam sim: ", psim)
              escreva ("Porcentagem de homens que responderam não: ", pnao)
      }
    • By Kvalo
      estou tentando fazer um programa que verifique 3 valores e informe o maior, o menor e se forem iguais! oq ta errado 
       
      #include<stdio.h>
      #include<stdlib.h>
      #include<locale.h>
      int main()
      {
          setlocale(LC_ALL,"Portuguese");
          int maior,menor;
          float a,b,c;
          printf("\n\tDigite 3 valores: \n");
          scanf("%f%f%f",&a,&b,&c);
          if (a>b&&a>c)
          {
              maior=a;
          }
          else{}
          if (b>a&&b>c)
          {
              maior=b;
          }
          else{}
          if(c>a&&c>b)
          {
              maior=c;
          }
          if (a<b&&a<c)
          {
              menor=a;
          }
          else{}
          if(b<a&&b<c)
          {
              menor=b;
          }
          else{}
          if(c<a&&c<b)
          {
              menor=c;
          }
          else{}
          if (a==b&&b==c&&a==c)
          {
              printf("\n\tValores iguais\n\n");
          }
          else{}
          printf("\n\tO maior é: %d\n\tO menor é: %d\n\n",maior,menor);
          system("pause");
          return 0;
      }
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.