Ir para conteúdo

Recommended Posts

Programa está inserindo normalmente, mais não está ordenando e nem mostrando os itens ordenados. 

 

obs1: Usando bubblesort

obs2: ordenando primeiro por nome e depois por idade

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct lista
{
	int qtd;
	struct Aluno * inicio;
}lista;

typedef struct Aluno
{
	char nome[30];
	int idade;
	struct Aluno * prox;
}Aluno;

lista * aloca_lista();
Aluno * aloca_aluno();
int inserir(lista *l, char * nome, int idade);
void  mostrar(lista *l);

int main()
{
	char aux[30];
	int i,aux2,aux3,aux4,tam=3,pass,trocou;
	Aluno * aluno[3];
	lista * l1;
	l1 = aloca_lista();
	aux4 = l1->inicio;
	
	int idade;
	char nome[30];
	
	for(i=0; i<3; i++)
	{
		printf("\nDigite o nome do aluno[%d]: ",i+1);
		fflush(stdin);
		gets(nome);
		printf("\nDigite o numero: ");
		fflush(stdin);
		scanf("%d",&idade);
		inserir(l1,nome,idade);
	}
	
	trocou = 1;
	
	for(pass=0; pass<tam-1 && trocou==1; pass++)
	{
		trocou = 0;
		
		for(i=0; i<tam-pass-1; i++)
		{
			if(strcmp(aluno[i]->nome,aluno[i+1]->nome) == 0)
			{
				if(aluno[i]->idade > aluno[i+1]->idade)
				{
					aux2 = aluno[i]->idade;
					aluno[i]->idade = aluno[i]->prox->idade;
					aluno[i]->prox->idade = aux2;
				
					strcpy(aux,aluno[i]->nome);
					strcpy(aluno[i]->nome,aluno[i+1]->nome);
					strcpy(aluno[i+1]->nome,aux);
					trocou = 1;
				}
			}
			else if(strcmp(aluno[i]->nome,aluno[i+1]->nome)>0)
			{
				aux3 = aluno[i]->idade;
				aluno[i]->idade = aluno[i+1]->idade;
				aluno[i+1]->idade = aux3;
				
				strcpy(aux,aluno[i]->nome);
				strcpy(aluno[i]->nome,aluno[i+1]->nome);
				strcpy(aluno[i+1]->nome,aux);
				trocou = 1;
			}
		}
	}
	

	printf("\nmostrando:\n\n");
	
	mostrar(l1);
	
	return 0;
}

lista * aloca_lista()
{
	lista * novo;
	novo = (lista*)malloc(sizeof(lista));
	novo->qtd = 0;
	novo->inicio = NULL;
	return novo;	
}

Aluno * aloca_aluno()
{
	Aluno * novo;
	novo = (Aluno*)malloc(sizeof(Aluno));
	novo->idade = 0;
	strcpy(novo->nome," ");
	novo->prox = NULL;
	return novo;
}

int inserir(lista *l,char * nome, int idade)
{
	Aluno * novo, * aux;
	novo = aloca_aluno();
	novo->idade = idade;
	strcpy(novo->nome,nome);
	
	if(l->inicio == NULL)
	{
		l->inicio = novo;
	}
	else
	{
		aux = l->inicio;
		while(aux->prox != NULL)
		{
			aux = aux->prox;
		}
		aux->prox = novo;
	}
	l->qtd++;
	return 1;
}

void mostrar(lista *l)
{
	Aluno * aux;
	aux = l->inicio;
	while (aux != NULL)
	{
		printf("\nNome: %s",aux->nome);
		printf("\nIdade: %d",aux->idade);
		aux = aux->prox;
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por anderx
      Prezados, boa tarde.
       
      Eu estou fazendo um programa em C que o usuário digite uma sequencia de caracteres e imprima somente valores numéricos e também mostrar os seus respectivos valores correspondentes a tabela ASC. Eu utilizei dois vetores , um para receber os caracteres e um outro para copiar apenas os valores numéricos, mas eu não estou conseguindo transferir somente os valor numéricos para o outro vetor. Alguém tem alguma dica de como posso transferir somete os números ? O código abaixo: 
       
      #include <stdio.h>
      #include <string.h>
      int main () {
      char str1[30] ={0};
       int str2[30];
      int i=0;
      scanf ("%s",str1);
      for(i=0; i<strlen(str1);i++) {
        str1*=1;
      str2=str1;

      printf("%c : : %d\n",str2,str2);
      }
          return 0;
      }
       
    • Por Jonathacsantos
      Boa tarde, sou novo na programação, comecei por conta própria e agora estou com um pequeno problema, meu programa depende de uma pasta criada pra executar um .exe que fica dentro de uma outra pasta, sendo que eu preciso que ele leia o .exe independente de onde ele fica instalado, vou mostrar uma parte do código para tentar explicar 
      private void AcessRemo_Click(object sender, EventArgs e) { foreach ( var process in Process.GetProcessesByName("TeamViewer")) { process.Kill(); } Process.Start("C:\\Teste\\suporteremoto.exe"); ele fecha um teamviewer em execução e executa uma versão especifica do teamviewer, sendo que nos meus testes funciona pq eu tenho essa pasta ai chamada teste, mas o programa instala em Program Files, sendo que se for 64, ele vai pra Program Files (x86), dai gostaria de fazer ele ler, tipo um [LocalPath] , mas não sei como , se alguem puder me ajudar ou me da uma luz eu agradeço muito.
    • Por EduardoLenz
      Olá, pessoal,
       
      Mexo com microcontroladores, antigamente com PIC e agora com ARM (plataforma LPCXpresso). 
      Ambos utilizam a linguagem C. 
       
      Meu problema é o seguinte: Preciso converter um caractere que vem da UART (porta de comunicação). No PIC havia uma função pronta para tal, no ARM não. 
       
      O caractere chega assim, por exemplo: P123 (tudo junto), e eu queria separar em:
      dado_recebido[]={'P', '1', '2', '3'}; 
      Para poder utilizar um switch 
      switch(dado_recebido[0])
      {
      case 'P':....
      }
       
      alguém tem alguma ideia de como posso fazer a conversão? 
       
      Agradeço desde já. 
    • Por cauai
      Olá,
      Eu estou tentando criar uma lista de vendedores que irão receber o contato de clientes através do meu site. É uma plataforma wordpress, porém tenho completo acesso ao código php.
      Até agora, só achei maneiras de enviar para múltiplos e-mails, como cópia, ou separando por departamento à escolha do cliente, utilizando o Contact Form 7, o que não é meu desejo.
      Quero algo como isso:
       
      Não sei se o Contact Form 7 me permitiria algo desse tipo, ou se teria mesmo que fazer pelo php. Mas aceito ajuda para ambos os casos.
    • Por lucasrodrigues
      Estou com esse problema ao tentar vincular uma tabela do MySql a um DataSet. Utilizo o MySqlConnector 8.0.13, MySql-For-VisualStudio 1.2.8.

×

Informação importante

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