Jump to content

Ganhe $$$ escrevendo tutoriais para nós!


Foto

Ordenar vetor de nomes em C

c++




  • Faça login para responder
5 respostas neste tópico

#1 R4f43l_85

R4f43l_85
  • Participante
  • 2 mensagens

Publicado 29 June 2012 - 09:12 PM

Boa noite Galera, estou fazendo um trabalho para a facul, já desenvolvi todo o algoritmo porém na parte onde tenho que mostrar os nome em ordem alfabética, preciso ordenar um vetor que contem nome dentro. porém não esta dando certo, estou usando o metodo bolha com a função do C strcmp, mas não esta funcionando. agradeço. Segue abaixo o código que já desenvolvi.



/*O sistema deve permitir:
1. Registrar um número indeterminado de dados. Cada registo contém: NOME (máximo 40 caracteres), TIPO SANGUÍNEO (A, B, O) e FATOR RH (+ ou -).
2. Consultar em tela, conforme o tipo sanguíneo [A, B, O] e do fator RH [+, -] informados, todos os nomes das pessoas (em ordem alfabética) que possuem este tipo sanguíneo e fator RH.
O algoritmo termina quando o usuário digitar “n” na pergunta “Continua a consulta [s/n]? ”
Observação: validar as entradas, permitir apenas as letras e sinais indicados nesta especificação.
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h> //BIBLIOTECA PARA USAR STRING
#include <ctype.h> //BIBLIOTECA DA FUNÇÃO TOUPPER
#define MAX 100

struct REG_BANCO_SANGUE{

char nome[40];
char tipoSangue;
char fatorRh;

};


int main(void){

struct REG_BANCO_SANGUE banco[MAX];
int i=0,j,y,cont=0;
int tamanho;
char auxCad,auxPes,auxOrdenar,tipoSangueAux,fatorRhAux;
system("color 74");
printf(" BANCO DE SANGUE\n");

do{
printf("\nInforme o nome do doador.....................:");
fflush(stdin);
scanf("%s", &banco[i].nome);

cont++;

printf("\nInfome o tipo sanguineo do doador{O/A/B}.....:");
fflush(stdin);
scanf("%c", &banco[i].tipoSangue);

while(banco[i].tipoSangue != 'A' && banco[i].tipoSangue!= 'a' && banco[i].tipoSangue != 'B' && banco[i].tipoSangue != 'b' && banco[i].tipoSangue != 'O' && banco[i].tipoSangue != 'o'){

printf("Infome o tipo sanguineo do doador{O/A/B}.....:");
fflush(stdin);
scanf("%c", &banco[i].tipoSangue);
}

printf("Infome o fator RH do Sangue{+/-}..............:");
fflush(stdin);
scanf("%c", &banco[i].fatorRh);

while( banco[i].fatorRh != '+' && banco[i].fatorRh != '-'){
printf("Infome o fator RH do Sangue{+/-}..............:");
fflush(stdin);
scanf("%c", &banco[i].fatorRh);
}

i++;

printf("\nDeseja continuar cadastrando doadores?.:(S/N)\n");
auxCad = getch();

while(auxCad != 's' && auxCad != 'S' && auxCad != 'n' && auxCad != 'N'){
printf("\nDeseja continuar cadastrando doadores?.:(S/N)\n");
auxCad = getch();
}

}while(auxCad != 'n' && auxCad !='N');


for( i= 0; i<=cont; i++){
for( j= i+1; j<= cont; j++){
if(strcmp(banco[i].nome,banco[j].nome)<0){
auxOrdenar = banco[j].nome;
banco[i].nome = banco[j].nome;
banco[i].nome = auxOrdenar;

}
}
}

printf("\n\n------PREENCHA OS DADOS A SEREM PESQUISADOS-------\n\n");

do{

printf("\nInforme o tipo sanguineo{O/A/B}.....:");
fflush(stdin);
scanf("%s", &tipoSangueAux);

while(tipoSangueAux != 'A' && tipoSangueAux != 'a' && tipoSangueAux != 'B' && tipoSangueAux != 'b' && tipoSangueAux != 'O' && tipoSangueAux != 'o'){
printf("\nInforme o tipo sanguineo{O/A/B}.....:");
fflush(stdin);
scanf("%s", &tipoSangueAux);
}

printf("\nInforme o fator RH{+/-}..............:");
fflush(stdin);
scanf("%c", &fatorRhAux);

while(fatorRhAux != '+' && fatorRhAux != '-'){
printf("\nInforme o fator RH{+/-}..............:");
fflush(stdin);
scanf("%c", &fatorRhAux);
}

for(i=0; i<cont; i++){

if(banco[i].tipoSangue = tipoSangueAux && banco[i].fatorRh == fatorRhAux){
printf("\n %s", banco[i].nome);
}
else{
printf("\nNenhum item encontrado");
}
}

printf("\nDeseja continuar a consulta? (S/N)\n\n");
auxPes = getch();

while(auxPes != 's' && auxPes != 'S' && auxPes != 'n' && auxPes != 'N'){
printf("\nDeseja continuar cadastrando doadores?.:(S/N)\n\n");
auxPes = getch();
}

}while(auxPes != 'n' && auxPes != 'N');

system("pause");
}




#2 nickosoft

nickosoft

    Hardware Expert

  • Colaborador
  • 3378 mensagens

Publicado 30 June 2012 - 03:54 AM

strcmp retorna ==0 ou !=0(1) nao sei se esse if(strcmp(banco[i].nome,banco[j].nome)<0) cai em alguma condicao valida ou nao, acho q o retorno ser 0 ou 1 vai do compilador...
VB.Net & C#

#3 R4f43l_85

R4f43l_85
  • Participante
  • 2 mensagens

Publicado 30 June 2012 - 02:32 PM

/*O sistema deve permitir:
1. Registrar um número indeterminado de dados. Cada registo contém: NOME (máximo 40 caracteres), TIPO SANGUÍNEO (A, B, O) e FATOR RH (+ ou -).
2. Consultar em tela, conforme o tipo sanguíneo [A, B, O] e do fator RH [+, -] informados, todos os nomes das pessoas (em ordem alfabética) que possuem este tipo sanguíneo e fator RH.
O algoritmo termina quando o usuário digitar “n” na pergunta “Continua a consulta [s/n]? ”
Observação: validar as entradas, permitir apenas as letras e sinais indicados nesta especificação.
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h> //BIBLIOTECA PARA USAR STRING
#include <ctype.h> //BIBLIOTECA DA FUNÇÃO TOUPPER
#define MAX 500

struct REG_BANCO_SANGUE{

char nome[40];
char tipoSangue;
char fatorRh;

};


int main(void){

struct REG_BANCO_SANGUE teste[MAX];
int i=0,j,w,cont=0;
int tamanho;
char auxCad,auxPes,auxOrdenar,tipoSangueAux,fatorRhAux;
system("color 74");
printf(" BANCO DE SANGUE\n");

do{
printf("\nInforme o nome do doador.....................:");
fflush(stdin);
scanf("%s", &banco[i].nome);

cont++;

printf("\nInfome o tipo sanguineo do doador{O/A/B}.....:");
fflush(stdin);
scanf("%c", &banco[i].tipoSangue);

while(banco[i].tipoSangue != 'A' && banco[i].tipoSangue!= 'a' && banco[i].tipoSangue != 'B' && banco[i].tipoSangue != 'b' && banco[i].tipoSangue != 'O' && banco[i].tipoSangue != 'o'){

printf("Infome o tipo sanguineo do doador{O/A/B}.....:");
fflush(stdin);
scanf("%c", &banco[i].tipoSangue);
}

printf("Infome o fator RH do Sangue{+/-}..............:");
fflush(stdin);
scanf("%c", &banco[i].fatorRh);

while( banco[i].fatorRh != '+' && banco[i].fatorRh != '-'){
printf("Infome o fator RH do Sangue{+/-}..............:");
fflush(stdin);
scanf("%c", &banco[i].fatorRh);
}

i++;

printf("\nDeseja continuar cadastrando doadores?.:(S/N)\n");
auxCad = getch();

while(auxCad != 's' && auxCad != 'S' && auxCad != 'n' && auxCad != 'N'){
printf("\nDeseja continuar cadastrando doadores?.:(S/N)\n");
auxCad = getch();
}

}while(auxCad != 'n' && auxCad !='N');

for( w = 0; w<i-1; w++){
for( j= w+1; j<i; j++){
if(stricmp(banco[w].nome,banco[j].nome)==0){
auxOrdenar = banco[w];
banco[w] = banco[j];
banco[j] = auxOrdenar;

}
}
}

printf("\n\n------PREENCHA OS DADOS A SEREM PESQUISADOS-------\n\n");

do{

printf("\nInforme o tipo sanguineo{O/A/B}.....:");
fflush(stdin);
scanf("%s", &tipoSangueAux);

while(tipoSangueAux != 'A' && tipoSangueAux != 'a' && tipoSangueAux != 'B' && tipoSangueAux != 'b' && tipoSangueAux != 'O' && tipoSangueAux != 'o'){
printf("\nInforme o tipo sanguineo{O/A/B}.....:");
fflush(stdin);
scanf("%s", &tipoSangueAux);
}

printf("\nInforme o fator RH{+/-}..............:");
fflush(stdin);
scanf("%c", &fatorRhAux);

while(fatorRhAux != '+' && fatorRhAux != '-'){
printf("\nInforme o fator RH{+/-}..............:");
fflush(stdin);
scanf("%c", &fatorRhAux);
}

for(i=0; i<cont; i++){

if(banco[i].tipoSangue = tipoSangueAux && banco[i].fatorRh == fatorRhAux){
printf("\n %s", banco[i].nome);
}
else
printf("\nNenhum item encontrado");

}

printf("\nDeseja continuar a consulta? (S/N)\n\n");
auxPes = getch();

while(auxPes != 's' && auxPes != 'S' && auxPes != 'n' && auxPes != 'N'){
printf("\nDeseja continuar cadastrando doadores?.:(S/N)\n\n");
auxPes = getch();
}

}while(auxPes != 'n' && auxPes != 'N');

system("pause");
}



No momento da compilação esta acusando um de compatibilidade :

linha: 76 --error: imcompatible types in assignment
linha: 78 --error: imcompatible types in assignment


Obs: estou usando o CodeBlocks para compilar

abraço

#4 nickosoft

nickosoft

    Hardware Expert

  • Colaborador
  • 3378 mensagens

Publicado 30 June 2012 - 06:39 PM

não tem os numeros de linha aki :( nem compilador pra c eu tenho, mas lembro q o code block é legal, nativamente ele vem com um, mas pode ser mudado por uma lista enorme.....
eu usei muito no tempo da facul
VB.Net & C#

#5 veton100

veton100
  • Participante
  • 1 mensagens

Publicado 30 June 2012 - 11:10 PM

Podem ajudar como é feito esse sistema nesse site: Respostas

#6 nickosoft

nickosoft

    Hardware Expert

  • Colaborador
  • 3378 mensagens

Publicado 01 July 2012 - 08:32 AM

Podem ajudar como é feito esse sistema nesse site: Respostas

ja ouviu falar q programar vai da capacidade e conhecimento de cada um, se dominar alguma linguagem de programacao web você faz
asp, asp.net, php em qq uma dessas você consegue facilmente fazer.....
VB.Net & C#






Tópicos Relacionados Collapse


Tópicos com palavra-chave: c++





Ganhe $$$ escrevendo tutoriais para nós!