Ir ao conteúdo
  • Cadastre-se

C++ Criar um procedure que trabalha com array


MUrisCuri

Posts recomendados

@arfneto  não visualizo o < >code no menu conforme abaixo. Por isso, copio e colo trechos de código sem formatação. Tenho que habilitar esse recurso na minha conta? 

image.thumb.png.077f5ee75cacd7eb794667f4de7c9a7a.png

 

Não sei se está correta a forma que respondo aos comentários. Eu clico no botão "Responder". 

 

Em 01/02/2021 às 00:23, arfneto disse:

public:

Array sort_array();

void sort_array(unsigned short);

 

private:

void bubble(short[], unsigned short);

 

Em 01/02/2021 às 00:23, arfneto disse:

bubble_sort() é private e assim pode usar nos dois casos...

 

Que critério leva a definir métodos private/public? Você afirmou que "bubble_sort() é private e assim pode usar nos dois casos..." bubble_sort() foi definido private com intuito de ficar protegido, já que o acesso a ele ocorreria através dos 2 métodos sort_array, ambos public?

 

Tenho dúvida sobre definição de critérios para visibilidade(public/private) aos métodos e propriedades da classe.

Link para o comentário
Compartilhar em outros sites

5 horas atrás, MUrisCuri disse:

não visualizo o < >code no menu conforme abaixo. Por isso, copio e colo trechos de código sem formatação. Tenho que habilitar esse recurso na minha conta? 

 


Acho que já te falei sobre isso. É um problema do software do forum. Às vezes esse botão ou algum outro some, o botão "responder" não funciona, coisas assim.  Tente de novo, saia da conta e entre de novo, abra com outro navegador, tente algo. É o que eu faço.

 

5 horas atrás, MUrisCuri disse:

Que critério leva a definir métodos private/public? Você afirmou que "bubble_sort() é private e assim pode usar nos dois casos..." bubble_sort() foi definido private com intuito de ficar protegido, já que o acesso a ele ocorreria através dos 2 métodos sort_array, ambos public?

 

Imagino que tenha lido a frase toda e não só esse pedaço que citou. Contando com o que eu já te expliquei, entenda que a conveniência define o que é público ou privado: se bubble_sort() for pública você não vai poder mudar a seu critério de bubble_sort() para insertion_sort() ou quick_sort() ou merge_sort() ou mesmo aquele Knuth-XXX que tentava usar no início e sobre o qual te perguntei várias vezes e você nunca respondeu.

 

Isso porque se mudar e tiver algum programa usando vai ter parar de funcionar...

 

Se você escreve uma classe é porque alguém vai usar. E não se quer ter funções não essenciais como públicas porque fica menos flexível a implementação e o uso.

 

 

 

 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, arfneto disse:

ou mesmo aquele Knuth-XXX que tentava usar no início e sobre o qual te perguntei várias vezes e você nunca respondeu.

Sobre isso, você afirmou que não seria uma boa ideia escrever um while dentro de outro. Então, reescrevi o código e adaptei ao seu programa, que, aliás, ficou bem didático e fácil de compreender.

void Array::knuth(short cel[], unsigned short n){
			bool swap;
			short temp;
			for ( unsigned short ind=0; ind<=n-1; ind+=1 ){
				while ( ind >= n-1 ) {
					if ( swap == 1 ){
						n-=1;
						swap = 0;
						ind=0;
					}
					else{
						break;
					}
				}
				if ( cel[ind] > cel[ind+1] ){
					temp = cel[ind];
					cel[ind] = cel[ind+1];
					cel[ind+1] = temp;
					swap = 1;
				}
	}
	return;	
}

 

Link para o comentário
Compartilhar em outros sites

17 minutos atrás, MUrisCuri disse:

Sobre isso, você afirmou que não seria uma boa ideia escrever um while dentro de outro. Então, reescrevi o código e adaptei ao seu programa, que, aliás, ficou bem didático e fácil de compreender.


Eu te perguntei mais de uma vez se estava tentando escrever algo como o descrito no livro, e qual algoritmo estava tentando implementar, já que o prof. Knuth sugere várias otimizações para vários métodos, mas não há um Knuth sort de fato. O volume 3 discute toda uma série de algoritmos de classificação e pesquisa. 

 

Como nunca respondeu eu te mostrei que poderia usar a própria ideia de encapsulamento e deixar o particular método de sort como private e assim poder trocar sem mexer nos programas que usam a classe. E como está estudando objetos de mostrei como usar polimorfismo em sort_array() para poder escolher sem mexer na classe se quer classificar a tabela de uma instância ou uma classificar gravando o resultado em uma tabela qualquer externa à classe.

 

Espero que agora tenha entendido a razão do método de classificação ser private.

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Em 04/03/2021 às 14:03, arfneto disse:

Eu te perguntei mais de uma vez se estava tentando escrever algo como o descrito no livro, e qual algoritmo estava tentando implementar, já que o prof. Knuth sugere várias otimizações para vários métodos, mas não há um Knuth sort de fato.

Pois é, na verdade o fluxograma (método "Knuth" - assim descrito pelo Prof. de lógica) foi desenvolvido em sala de aula. Num post aqui, não lembro o núm., anexei a imagem contendo o fluxograma. Tentei implementar o algoritmo pelo fluxograma e teste de mesa, e percebi que while dentro do for solucionou o algoritmo.

Foram vistos em aula: 1) Knuth (Bubble sort) ou método da bolha; 2) método da bolha modificado (Prof. Cabral); e 3) método Shell (Donald Shell - 1965) - troca intercalada. Foram vistos também 5 métodos sort: Shell - Metzner; combsort - Lacey (1997); contagem comparativa; shake sort; e split sort. 

Pretendo implementar todos em C++. Fiquei curioso com uma obs que anotei no meu caderno: para um núm. grande de registros, o método de Knuth é o mais adequado devido ao tempo de execução que é bem menor.  Quero testar isso, e comparar os métodos.

 

Em 04/03/2021 às 14:03, arfneto disse:

Como nunca respondeu eu te mostrei que poderia usar a própria ideia de encapsulamento e deixar o particular método de sort como private e assim poder trocar sem mexer nos programas que usam a classe.

"poder trocar sem mexer nos programas que usam a classe." Você se refere à possibilidade de trocar o próprio método bubble?

 

Em 04/03/2021 às 14:03, arfneto disse:

classificar a tabela de uma instância

Isso ocorre em

novo.array[i] = array[i];
bubble(novo.array, novo.size);
return novo;

?

Compreendi o passo-a-passo nos arquivos. Mas ainda não está tão claro pra mim, porque definir um método como private/public. Poderia explicar novamente, talvez com algum outro exemplo?  Swap é private?

Link para o comentário
Compartilhar em outros sites

6 horas atrás, MUrisCuri disse:

Tentei implementar o algoritmo pelo fluxograma e teste de mesa, e percebi que while dentro do for solucionou o algoritmo

 

Os algoritmos vão funcionar com qualquer tipo de loop. Basta adequar o comando à lógica do algoritmo

 

6 horas atrás, MUrisCuri disse:

"poder trocar sem mexer nos programas que usam a classe." Você se refere à possibilidade de trocar o próprio método bubble?

 

Qualquer coisa que seja private. Métodos ou variáveis. Nessa classe se a única coisa pública é sort_array() em suas versões, é claro que pode usar qualquer método de sort dentro da classe sem ter que mexer nos programas que usam a classe. É a noção de encapsulamento.

 

6 horas atrás, MUrisCuri disse:

Compreendi o passo-a-passo nos arquivos. Mas ainda não está tão claro pra mim, porque definir um método como private/public. Poderia explicar novamente, talvez com algum outro exemplo?  Swap é private

 

Esse exemplo foi criado a partir de seu problema para mostrar esses conceitos. É tão bom ou ruim quanto qualquer outro: a lógica do problema vai dizer o que deve ser private ou public.

 

Em geral se quer o mínimo public para garantir flexibilidade na implementação. E segurança no uso. Se o array for public por exemplo qualquer programa pode, depois do sort, alterar valores direto no vetor, introduzindo uma preocupação que pode ser evitada

Link para o comentário
Compartilhar em outros sites

OFF-TOPIC

Em 04/03/2021 às 09:25, arfneto disse:

É um problema do software do forum. Às vezes esse botão ou algum outro some, o botão "responder" não funciona, coisas assim.  Tente de novo, saia da conta e entre de novo, abra com outro navegador, tente algo. É o que eu faço.

Criei um tópico há um tempo, me disseram que o problema do botão Code não aparecer é relacionado com a resolução da tela, e realmente, porque deixo o zoom da página em 125% pra conseguir ler:

image.png.c2251e3d0263163f1e0466acd6d6cffe.png

Se deixo em 100%, todas as opções aparecem:

image.png.15a246af675c9c59a753cb89dd9eb9f6.png

Link para o tópico:

Se esse não é o caso de vocês, então deve ser problema do software mesmo 🤪

 

Isso do botão Responder não funcionar também acontece comigo, mas daí eu uso o scroll e volta a funcionar, e se não funcionar, recarrego a página :)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

arfneto, a forma mais eficiente de implementar outros mecanismos de classificação dos números armazenados nos vetores, inclusive em ordem decrescente, seria criando métodos para cada forma de classificação? ou seria possível organizar esses métodos private dentro de um único método public, e de alguma forma chamar cada um no main.cpp?

Link para o comentário
Compartilhar em outros sites

Em geral não se quer esses métodos como públicos para poder mudar sem riscos, como já te expliquei.

 

Em relação à ordem de classificação o caminho mais simples é o mesmo que C e C++ usam para o sort(): o usuário da classe passa uma função que compara dois elementos, e isso 

  • torna o sort genérico porque não precisa saber nada sobre os dados
  • torna tudo mais flexível porque num registro complicado se pode classificar uma hora por CPF outra por nome outra por CEP....
	void qsort(
	    void* base, size_t num, size_t size,
	    int (*compar)(const void*,const void*)
	);

 

Veja o qsort() em C++ como é...

Link para o comentário
Compartilhar em outros sites

arfneto, já iniciei a estudar C++ pelo livro de Bjarne Stroustrup, "Princípios e Práticas de Programação com C++". Muito bom! Obrigado! Esse foi o único livro desse autor traduzido ao português que achei. Até 1º de abril, https://br1lib.org/ estão disponibilizando acesso a livros gratuitamente, bastando efetuar doação.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, MUrisCuri disse:

arfneto, já iniciei a estudar C++ pelo livro de Bjarne Stroustrup, "Princípios e Práticas de Programação com C++". Muito bom! Obrigado! Esse foi o único livro desse autor traduzido ao português que achei. Até 1º de abril, https://br1lib.org/ estão disponibilizando acesso a livros gratuitamente, bastando efetuar doação.

 

Ele criou a linguagem então de todo modo qualquer coisa em C++ já vai ter algo a ver com ele :) 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!