Jump to content

qsort de estruturas


polska

Recommended Posts

Boas pessoal, estava a tentar ordenar uma estrutura mediante o seu valor size, com o qsort, mas não sei como colocar na função compara...

eu pensei nisto:

struct ex{
int size, inicio, fim;
}noCover[200];

int compara(const void *a, const void *b)
{
   struct ex *c, *d;
   c = noCover[*a].size;
   d = noCover[*b].size;

   return(*(int*)c-*(int*)d);
}

Mas dá erro no [*a] e [*b], dizendo " expression must be a pointer to complete a object type ", secalhar estou a fazer uma grande trapalhada, xD, mas enfim.. Alguém me pode ajudar?

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

int compara(const void *a, const void *b)
{
 const struct ex *c, *d;   // temporary variable
 c = a;                    // convert and assign
 d = b;                    // convert and assign
 return c->size - d->size; // compare struct members
}
Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

int compara(const void *a, const void *b)
{
 const struct ex *c, *d;   // temporary variable
 c = a;					// convert and assign
 d = b;					// convert and assign
 return c->size - d->size; // compare struct members
}

c = a; // convert and assign

d = b; // convert and assign

error C2440: '=' : cannot convert from 'const void *' to 'const ex *'

xD

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

c = a; // convert and assign

d = b; // convert and assign

error C2440: '=' : cannot convert from 'const void *' to 'const ex *'

xD

compila com um compilador de C em vez de C++

  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Não tenho :s , uso o ultimate da microsoft e só compila C++ . Posso é tentar no Mingw .

Eu instalei o Eclipse mas não consegui criar um projecto direito, simplesmente aquilo se eu escolhesse por exemplo ambiente de trabalho, o projecto era criado lá, e tudo o que continha o projecto era o que eu tinha mesmo no ambiente, ou seja, eu apagava o projecto, apagava o ambiente de trabalho xD

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

para tirares o erro faz o seginte:

int compara(const void *a, const void *b)
{
 const struct ex *c, *d;   // temporary variable
 c = (const struct ex*)a;										// convert and assign
 d = (const struct ex*)b;										// convert and assign
 return c->size - d->size; // compare struct members
}

Tens que ter atencao que estas a programar em C++ e nao em C, por isso tenta por na seccao correcta.

EDIT: Em C++ nao e' necessario o struct no static cast

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

para tirares o erro faz o seginte:

int compara(const void *a, const void *b)
{
 const struct ex *c, *d;   // temporary variable
 c = (const struct ex*)a;										// convert and assign
 d = (const struct ex*)b;										// convert and assign
 return c->size - d->size; // compare struct members
}

Tens que ter atencao que estas a programar em C++ e nao em C, por isso tenta por na seccao correcta.

EDIT: Em C++ nao e' necessario o struct no static cast

Estou mesmo a programar em C, o compilador compila, o problema são mesmo casos destes... Vou ter de arranjar um compilador para C, sugeres algum? Eu se calhar tentava o eclipse outra vez, mas sugeres algum?

Retirou o erro e compilou, mas deu erro na função qsort, deu erro ao aceder a uma posição inválida ;/ .

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Estou mesmo a programar em C, o compilador compila, o problema são mesmo casos destes... Vou ter de arranjar um compilador para C, sugeres algum? Eu se calhar tentava o eclipse outra vez, mas sugeres algum?

O eclipse e' uma IDE e nao um compilador, para windows uso o MinGW e programo no CodeBlocks, mas isso e' a IDE que gostas mais. O eclipse nao uso, porque tenho que ver se arranjo algum curso para aprender a fazer alguma coisa com ele 😄 Ainda falam que o Visual Studio e' complicado 🙂

EDIT:

Retirou o erro e compilou, mas deu erro na função qsort, deu erro ao aceder a uma posição inválida ;/ .

E' o problema dos static_cast, escondem os erros, ja que estas a usar o VS, usa o debugger para descubrir o problema

EDIT2:

No meu corre direito :/

#include <vector>
#include <stdio.h>
//#include <algorithm>
#include <map>
#include <windows.h>
#include <iostream>
#include <stdlib.h>



struct ex{
int size, inicio, fim;
}noCover[200];

int compara(const void *a, const void *b)
{
 const struct ex *c, *d;   // temporary variable
 c = (const ex*)a;  // convert and assign
// printf("c = %d\n",c->size);
 d = (const ex*)b;  // convert and assign
 //printf("d = %d\n",d->size);
 return c->size - d->size; // compare struct members
}

int main()
{

   for(int i=199;i>=0;i--)
   {
    noCover[i].size=199-i;
   }

   qsort(noCover,200,sizeof(ex),compara);

   for(int i=0;i<200;i++)
    printf("%d\n",noCover[i].size);
}

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

O eclipse e' uma IDE e nao um compilador, para windows uso o MinGW e programo no CodeBlocks, mas isso e' a IDE que gostas mais. O eclipse nao uso, porque tenho que ver se arranjo algum curso para aprender a fazer alguma coisa com ele 😄 Ainda falam que o Visual Studio e' complicado 🙂

EDIT:

E' o problema dos static_cast, escondem os erros, ja que estas a usar o VS, usa o debugger para descubrir o problema

EDIT2:

No meu corre direito :/

#include <vector>
#include <stdio.h>
//#include <algorithm>
#include <map>
#include <windows.h>
#include <iostream>
#include <stdlib.h>



struct ex{
int size, inicio, fim;
}noCover[200];

int compara(const void *a, const void *b)
{
 const struct ex *c, *d;   // temporary variable
 c = (const ex*)a;  // convert and assign
// printf("c = %d\n",c->size);
 d = (const ex*)b;  // convert and assign
 //printf("d = %d\n",d->size);
 return c->size - d->size; // compare struct members
}

int main()
{

for(int i=199;i>=0;i--)
{
	noCover[i].size=199-i;
}

qsort(noCover,200,sizeof(ex),compara);

for(int i=0;i<200;i++)
	printf("%d\n",noCover[i].size);
}

Tens sempre a edição da PROGRAMAR com um tutorial de programação android no eclipse xDD

Fogo eu acho que vou começar a programar só em context ou notepad++ e executo em linha de comandos xD !

Qual a diferença exacta de IDE e compilador? O code blocks é um IDE e dá para compilar não é? xD

(IDE's para C? tou lixado 😄 )

Eu vou ver se conssigo correr no mingw

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Tens sempre a edição da PROGRAMAR com um tutorial de programação android no eclipse xDD

Vou ter que ver isso 🙂

Fogo eu acho que vou começar a programar só em context ou notepad++ e executo em linha de comandos xD !

Qual a diferença exacta de IDE e compilador? O code blocks é um IDE e dá para compilar não é? xD

(IDE's para C? tou lixado 😄 )

Eu vou ver se conssigo correr no mingw

IDE= Integrated Development Enviroment

Compilador = Traduz codigo escrito em byte code(e' o que o PC percebe), exemplos sao: GCC, MinGW, VC, etc.

IDE e' programa que tu editas/ fazes os programas, por exemplo o VisualStudio, Eclipse, Notepad++ sao IDE, muitas das vezes a IDE vem com compiladores.

Compilador e' o que faz o programa funcionar num OS.

O notepad tambem seria uma IDE se colorisse o Codigo 😄

  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

IDE= Integrated Development Enviroment

Compilador = Traduz codigo escrito em byte code(e' o que o PC percebe), exemplos sao: GCC, MinGW, VC, etc.

IDE e' programa que tu editas/ fazes os programas, por exemplo o VisualStudio, Eclipse, Notepad++ sao IDE, muitas das vezes a IDE vem com compiladores.

Compilador e' o que faz o programa funcionar num OS.

Percebido, thanks 😄

O notepad tambem seria uma IDE se colorisse o Codigo 😄

E colore xDD, no notepad++ tens um menu em cima que diz linguagem, é só escolher :b ....

Eu tenho um fascinio pelos editores de texto normal, principalmente pello gdit do ubuntu, mas não sei porquê, mesmo 😄

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

E colore xDD, no notepad++ tens um menu em cima que diz linguagem, é só escolher :b ....

Eu tenho um fascinio pelos editores de texto normal, principalmente pello gdit do ubuntu, mas não sei porquê, mesmo 😄

Tava a falar do Notepad do windows 😄

O Notepad++ e' a IDE que gosto mais para programar em PHP, claro se nao tiver acesso ao DreamWeaver 😄

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Tava a falar do Notepad do windows 😄

O Notepad++ e' a IDE que gosto mais para programar em PHP, claro se nao tiver acesso ao DreamWeaver 😄

ahahahah, certo xD

Eu só não uso muito editores normais porque gosto mais dos breakpoints do que dos printf's, mas era bom começar a largar o vício 😄

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Eu só não uso muito editores normais porque gosto mais dos breakpoints do que dos printf's, mas era bom começar a largar o vício 😄

Os breakpoints sao muito mais praticos do que printf's, por isso nao e' um mau vicio, eu so' nao uso o VS para compilar os codigos que metem aqui no forum porque sou obrigado a criar um projecto no VS 😄 e no codeblocks ainda nao atinei com o Debugger 😄

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Até tens razão, mas caso não atines com os breakpoints (eu não atinei no Code Blocks), tás lixado 😄 !

Isso é mesmo seca, é um projecto para tudo no VS xD

Nao e' assim um problema muito grande, ja' que so' uso o C::B para fazer projectos pequenos, gosto mais do VS 🙂

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Eu também xD .

Já agora em contexto do off-topic, no mingw, para projectos em C também se executa gcc exemplo.cpp -o -p ?

o argumento -o é para dares um nome ao ficheiro final, no entanto não tens nenhum, e o -p não é obrigatório só serve para criar código extra para analise do executável.

conclusão, basta

gcc -o exec.exe exemplo.c

isto para c

visto estas a criar ficheiros c++ (.cpp) deverás usar o compilar c++ : g++

g++ -o exec.exe exemplo.cpp
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

o argumento -o é para dares um nome ao ficheiro final, no entanto não tens nenhum, e o -p não é obrigatório só serve para criar código extra para analise do executável.

conclusão, basta

gcc -o exec.exe exemplo.c

isto para c

visto estas a criar ficheiros c++ (.cpp) deverás usar o compilar c++ : g++

g++ -o exec.exe exemplo.cpp

obrigado 😉

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.