Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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..

Compartilhar este post


Link para o post
Compartilhar em outros 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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou escrevendo um Sistema Java Web e quando clico no Botão Salvar, o Java acusa esse erro:

      ERROR: Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null
       
      Já tentei de várias formas resolver esse problema, mas não estou conseguindo.

      Por favor, alguém pode me ajudar identificar a origem e resolver o problema acima ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou enfrentando um problema que não consigo entender.

      Após Instalar o MySql versão 8.0.36, funciona corretamente realizando as conexões.

      O problema é:
      ---[ após reiniciar o micro, o MySql não faz as conexões.
      --[ tenta localizar este arquivo, mas não acha: my.ini
       
      Onde localizo ou configuro este arquivo na Pasta MySql ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, preciso de ajuda em Relação a Instalar o Jasper Reports no Eclipse, pois a opção de Eclipse Marketplace, não encontra para instalar.
       
      Já tentei de todas as formas mas não consegui, alguém conhece alguma rotina explicando este procedimento ?
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amantes da informática.
       
      Saudações.
       
      Estou usando o Eclipse Mars versão 4.5.0  e o 4.5.2, acredito que deva ter versões mais novas. 
      Sou novato em JAVA e estou encontrando alguns problema em Instalação de alguns plugins, como por exemplo:
       
      1) quando tento instalar o JBoss Tools através do Eclipse Marteplace, o Eclipse não o encontra na lista de plugins.
      2) se tento instalar através do Install New Software, abaixa alguns arquivos, mas também não instala o JBoss.
      3) se abro o site e arrasto o download para a área de trabalho do Eclipse, também não instala o JBoss.
       
      Caros amigos, existe outra alguma forma de instalar o JBoss Tools no Eclipse e como seria ?
       
      Grato,
       
      Cesar
       
       
    • Por josenilson
      Olá pessoal !
       
      Estou tentando rodar um projeto de um jogo na minha maquina porem o mesmo pede para adicionar o log4cxx 0.10.0, realizei pesquisas na internet a respeito mas até agora nada, Encontre para baixar nesse site https://logging.apache.org/log4cxx/1.0.0/download.html porem não sei se devo instalar ele no windows porque ao exportar ele no projeto as depêndencias que precisam dele ficam informando o erro log4cxx.logger.h no such file or directory. a linguagem que estou usando e C++
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.