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 Elizandro Veloso
      Preciso de ajuda em um projeto, esse projecto , precisa alterar, guardar as fichas, como  faço para alterar, guardar etc ?
       
      switch(menu) { case 'c': case 'C': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha de Componentes\n"); printf("-----------------------------------------------------------\n"); componente = inserirComponente(componente); break; case 'p': case 'P': printf("\n-----------------------------------------------------------\n"); printf("\t\t Posto de Trabalho\n"); printf("-----------------------------------------------------------\n"); posto = inserirPostoTrabalho(posto); break; case 'f': case 'F': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha de Funcionário\n"); printf("-----------------------------------------------------------\n"); funcionario = inserirFuncionario(funcionario); break; case 'o': case 'O': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha das Operações\n"); printf("-----------------------------------------------------------\n"); operacao = inserirOperacao(operacao); break; case 'e': case 'E': printf("\n-----------------------------------------------------------\n"); printf("\t\t Ficha de Empresa\n"); printf("-----------------------------------------------------------\n"); empresa = inserirEmpresa(empresa); break; case 's': case 'S': printf("\n-----------------------------------------------------------\n"); printf("\t\t Obrigado e volte sempre\n"); printf("-----------------------------------------------------------\n"); break; default: printf("\n---------------------------------------------------------------\n"); printf("\t\t A instruçao inserida não existe no Menu!!\n\n\t\t Aguarde para digitar novamente...\n"); printf("-----------------------------------------------------------------\n"); sleep(4); system("cls"); } }while(menu != 'S' && menu != 's');
       
    • By Thiago Ladislau
      Bom dia gostaria de compartilhar um erro que vem ocorrendo há muito tempo na empresa em que trabalho. Porem nunca foi identificada a causa origem do mesmo, Isso ocorre de forma aleatória não tem data nem hora, acontece de repente. Sendo obrigado ao 'fechamento forçado' do sistema que pode gerar problemas na base. Em anexo imagem do Erro.   Grato
    • By TkCode
      Estou tentando desenvolver um código para calcular o valor final de custas de imoveis.
      Exemplo: Entro com um valor de R$50.000,00. Tem o ITBI que é 2% sob os R$50.000,00 + o valor de custas que é o valor de uma tabela (essa tabela tem valores que de R$0,01 até R$17.800,90 é uma valor, e assim sucessivamente)
       
      Então teria que calcular os 2% (do valor informado) + o valor da tabela, dando um resultado final com o valor total (2%+ValorTabela).
       
      Alguem teria como me dar uma dica de como resolver isso?
      Desde já agradeço!
    • By roberson abalaid
      #include <stdio.h>
      #include <stdlib.h>
      int arr[3][5];
      int main(){
          
          printf("Favor inserir os dados...\n");
          
          for(int i = 0; i < 3; i++){
              for(int j = 0; j < 5; j++){
                  scanf("%d", &arr[j]);
              }
          }
          
            printf("os valores inseridos foram...\n");
          
          for(int i = 0; i < 3; i++){
              for(int j = 0; j < 5; j++){
                  printf("  %d  ", arr[j]);
              }
              printf("\n");
          }
          return 0;
      }
×

Important Information

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