FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.091 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 07-05-2007, 8:54   #1 (permalink)
fabianoss
Membro Senior
 
Avatar de fabianoss
 
Registrado em: Jan 2004
Mensagens: 240
Reputação: 17 fabianoss está indo no caminho certo
Enviar mensagem via MSN para fabianoss
Padrão Algoritmo de ordenação em C

Bom-dia!

Mais uma vez abusando do ensinamento de vocês estou com um exercicio de ordenação fiz o código, mas estou com uma duvida:
O exercicio pede-se que entre com 5 nomes diferentes e faça um algoritmo de ordenação:

Código:
#include<stdio.h> int main() { int i,j; char nome[5]; char x; printf("Digite 5 nomes:"); for(i = 0; i < 5; i++) scanf("%s",&nome[i]); for(i = 0; i < 4; i++) { for(j = i + 0; i < 5; i++) { if(nome[i] > nome[j]) { x = nome[i]; nome[i] = nome[j]; nome[j] = x; } } } for(i = 0; i < 5; i++) printf("Nomes ordenados:%s\n",nome[i]); return(0); }
Quando o algoritmo fazer a troca x = nome[i], como declarei como char será que não terei problemas?

Mais uma vez grato!!!
__________________
Slackware 12 / Rwindows XP / Kurumin 7.0
Kernel:2.6.22.1

"Viver apenas um dia e ouvir um bom ensinamento é melhor do que viver um século sem conhecer tal ensinamento."
Buda.
fabianoss está offline   Responder com Quote
Antigo 07-05-2007, 9:44   #2 (permalink)
jofrelscalvet
Veterano
 
Avatar de jofrelscalvet
 
Registrado em: Jan 2007
Localização: Sampa
Mensagens: 1.269
Reputação: 30 jofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulhar
Padrão

Tô enferrujadissimo em C e nunca fui muito longe, mas vou PALPITAR.
char nome[5] normalmente significa que você está criando uma váriavel nome que pode ter 4 letras.
Porque? Em C o conceito de string é: "um vetor terminado por \0"
pra armazenar jofre em um vetor declarado:
char nome[10]
teriamos por exemplo
nome[0]='j'
nome[1]='o'
nome[2]='f'
nome[3]='r'
nome[4]='e'
nome[5]='\0'
nome[6]='w'
nome[7]='x'
nome[8]='y'
nome[9]='z'

Por isso você precisaria usar um vetor declarado como
char nomes[5][10].
e outro
char x[10]

No mais ACHO que seu programa ordenaria bonitinho 5 letras desde que não misturassemos maiusculas com minusculas.
__________________
Melhore o futuro do fórum: Diga se a dica funcionou ou conte-nos como conseguiu resolver a sua dúvida!
Se eu errar ou for pouco claro, reclame! Quando possivel eu tentarei melhorar.
jofrelscalvet está offline   Responder com Quote
Antigo 07-05-2007, 10:56   #3 (permalink)
gaco
Membro Senior
 
Registrado em: Sep 2004
Mensagens: 156
Reputação: 16 gaco está indo no caminho certo
Enviar mensagem via ICQ para gaco
Padrão

primeiro, pra ler uma string, eh scanf("%s",nome[i]), sem o &.
segundo, vc nao incrementou o j, soh inicializou.
nao sei se tem mais erros, nao analizei mto bem o codigo...
espero ter ajudado
t+
gaco está offline   Responder com Quote
Antigo 07-05-2007, 13:02   #4 (permalink)
jcferranti
Ubbergeek
 
Avatar de jcferranti
 
Registrado em: Jul 2004
Localização: Batatais/SP
Idade: 35
Mensagens: 4.245
Reputação: 199 jcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputaçãojcferranti tem uma fabulosa reputação
Enviar mensagem via ICQ para jcferranti Enviar mensagem via MSN para jcferranti Enviar mensagem via Skype para jcferranti
Padrão

a comparação nome[i] > nome[j] não irá funcionar tb.

para fazer uma comparação de strings em use a função strcmp(string1, string2) que lhe retorna um valor positivo, negativo ou zero de acordo com a comparação feita...
__________________
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
jcferranti está offline   Responder com Quote
Antigo 07-05-2007, 17:50   #5 (permalink)
jofrelscalvet
Veterano
 
Avatar de jofrelscalvet
 
Registrado em: Jan 2007
Localização: Sampa
Mensagens: 1.269
Reputação: 30 jofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulharjofrelscalvet tem muito do que se orgulhar
Padrão

Vou ser chato e xereta só pra ver se ainda me lembro de alguma coisa. Podem reclamar se for besteira minha.

nome[i] > nome[j] Vai funcionar se não houver mistura entre maiusculas e minusculas, isso por que ele vai comparar os códigos ASCII da letra nome[i] com o da nome[j], como as maiusculas estão ordenadas (entre 65 e 90) e as minusculas tambem (97 a 122) ...
__________________
Melhore o futuro do fórum: Diga se a dica funcionou ou conte-nos como conseguiu resolver a sua dúvida!
Se eu errar ou for pouco claro, reclame! Quando possivel eu tentarei melhorar.
jofrelscalvet está offline   Responder com Quote
Antigo 07-05-2007, 18:44   #6 (permalink)
fabianoss
Membro Senior
 
Avatar de fabianoss
 
Registrado em: Jan 2004
Mensagens: 240
Reputação: 17 fabianoss está indo no caminho certo
Enviar mensagem via MSN para fabianoss
Padrão

Pessoal obrigado pela ajuda, preciso estudar mais a parte de strings em C, estou confuso não é como em outras linguagens que possuem variavel de tipo String, mas fiz em outros tipos e o algoritmo funcionou legal.
Que Buda ilumine a todos.
__________________
Slackware 12 / Rwindows XP / Kurumin 7.0
Kernel:2.6.22.1

"Viver apenas um dia e ouvir um bom ensinamento é melhor do que viver um século sem conhecer tal ensinamento."
Buda.
fabianoss está offline   Responder com Quote
Antigo 07-05-2007, 19:29   #7 (permalink)
jose_silva_neto
Ubbergeek
 
Avatar de jose_silva_neto
 
Registrado em: Aug 2002
Mensagens: 4.576
Reputação: 85 jose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputaçãojose_silva_neto tem uma fabulosa reputação
Padrão

Citação:
Postado Originalmente por fabianoss Ver Mensagens
Pessoal obrigado pela ajuda, preciso estudar mais a parte de strings em C, estou confuso não é como em outras linguagens que possuem variavel de tipo String, mas fiz em outros tipos e o algoritmo funcionou legal.
Que Buda ilumine a todos.
Boa noite,

Dê uma olhada no código abaixo, mas aviso que estou aprendendo a programar como você; com certeza está longe de ser um programa bem feito.

Código:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char** argv) { char** nomes; // vetor de strings int qtd; // quantidade de strings a serem comparadas int i,j; // contadores char* temp = (char*) malloc(50*sizeof(char)); printf("Quantos nomes deseja ordenar ? : "); scanf("%i",&qtd); nomes = (char**) malloc(qtd*sizeof(char*)); for(i = 0; i < qtd;++i) { printf("Entre com nome %i : ",i); nomes[i] = (char*) malloc(50*sizeof(char)); scanf("%s",nomes[i]); printf("\n"); } // Rotina de ordenação for(i = 1; i < qtd; i++) for (j = 0; j < qtd -1 ; j++) if(strcmp(nomes[j],nomes[j+1]) > 0) { strcpy(temp,nomes[j]); strcpy(nomes[j],nomes[j+1]); strcpy(nomes[j+1],temp); } free(temp); printf("Imprimindo os nomes ordenados\n"); for(i = 0; i < qtd;++i) printf("%s\n",nomes[i]); // liberando a memória alocada dinâmicamente for(i = 0; i < qtd;++i) free(nomes[i]); // liberando a memória alocada dinâmicamente free(nomes); return(0); }
Fique com Deus

Kali

Última edição por jose_silva_neto : 07-05-2007 às 19:39.
jose_silva_neto está offline   Responder com Quote
Antigo 07-05-2007, 19:58   #8 (permalink)
fabianoss
Membro Senior
 
Avatar de fabianoss
 
Registrado em: Jan 2004
Mensagens: 240
Reputação: 17 fabianoss está indo no caminho certo
Enviar mensagem via MSN para fabianoss
Padrão

Citação:
Postado Originalmente por kalicrates Ver Mensagens
Boa noite,

Dê uma olhada no código abaixo, mas aviso que estou aprendendo a programar como você; com certeza está longe de ser um programa bem feito.

Código:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char** argv) { char** nomes; // vetor de strings int qtd; // quantidade de strings a serem comparadas int i,j; // contadores char* temp = (char*) malloc(50*sizeof(char)); printf("Quantos nomes deseja ordenar ? : "); scanf("%i",&qtd); nomes = (char**) malloc(qtd*sizeof(char*)); for(i = 0; i < qtd;++i) { printf("Entre com nome %i : ",i); nomes[i] = (char*) malloc(50*sizeof(char)); scanf("%s",nomes[i]); printf("\n"); } // Rotina de ordenação for(i = 1; i < qtd; i++) for (j = 0; j < qtd -1 ; j++) if(strcmp(nomes[j],nomes[j+1]) > 0) { strcpy(temp,nomes[j]); strcpy(nomes[j],nomes[j+1]); strcpy(nomes[j+1],temp); } free(temp); printf("Imprimindo os nomes ordenados\n"); for(i = 0; i < qtd;++i) printf("%s\n",nomes[i]); // liberando a memória alocada dinâmicamente for(i = 0; i < qtd;++i) free(nomes[i]); // liberando a memória alocada dinâmicamente free(nomes); return(0); }
Fique com Deus

Kali
Imagina quando você se tornar um programador então , mas valeu pelo código tem algumas coisas complexas como ponteiros, alocação de memórias e tal que estou aprendendo ainda, mas em breve estarei postando algum código assim como você fez.Excelente meu nobre amigo, funcionou perfeitamente mais uma vez meu muito obrigado.
__________________
Slackware 12 / Rwindows XP / Kurumin 7.0
Kernel:2.6.22.1

"Viver apenas um dia e ouvir um bom ensinamento é melhor do que viver um século sem conhecer tal ensinamento."
Buda.
fabianoss está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 6:34.