Ir ao conteúdo

Daniel M. J. Cunha

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

0
  1. Oi, strcat é uma função da biblioteca padrão c. Isso quer dizer que programas que a usam baseiam-se no fato de que seus dois parâmetros são ponteiros para char. Conforme sugerido por @Simon Viegas eu concordo que é mais Assim: char *concatenastreint(char *dst, int src) { char cnum[12]; /*essa função também é da biblioteca padrão c, ela converte o inteiro src no array de caracteres cnum.*/ sprintf(cnum, "%d", src); /*aqui strcat já está com seus dois argumentos como ponteiro para char.*/ strcat(dst, cnum); return dst; }
  2. Oi, o seu código está funcionando corretamente. Eu adicionei algumas linhas para ilustrar melhor. #include <stdio.h> #include <stdlib.h> #include <string.h> struct p { char nome[100]; char rosa[100]; int distancia; }; int distancia(const void *a , const void *b); int rosa(const void *c , const void *d); int pornome(const void *e, const void *f); int main(int argc, char** argv) { int teste, i, ord; while(scanf("%d", &teste) != EOF) { struct p pessoas[teste]; for(i = 0; i < teste; i++) { scanf("%s %s %d", pessoas[i].nome, pessoas[i].rosa, &pessoas[i].distancia); } while(1) { printf("1- ordenar por distancia\n"); printf("2- ordenar por regiao\n"); printf("3- ordenar por nome\n"); printf("4- sair\n"); scanf("%d", &ord); switch(ord){ case 1: qsort(pessoas, teste, sizeof(struct p), distancia); for(i = 0; i < teste; i++) { printf("%-11s\t%s\t%d\n", pessoas[i].nome, pessoas[i].rosa, pessoas[i].distancia); } break; case 2: qsort(pessoas, teste, sizeof(struct p), rosa); for(i = 0; i < teste; i++) { printf("%-11s%s\t%d\n", pessoas[i].nome, pessoas[i].rosa, pessoas[i].distancia); } break; case 3: qsort(pessoas, teste, sizeof(struct p), pornome); for(i = 0; i < teste; i++) { printf("%-11s%s\t%d\n", pessoas[i].nome, pessoas[i].rosa, pessoas[i].distancia); } break; case 4: return 1; default: break; } } } return 0; } int distancia(const void *a, const void *b) { if((*(struct p*)a).distancia == (*(struct p *)b).distancia) return 0; else if((*(struct p*)a).distancia < (*(struct p *)b).distancia) return -1; else return 1; } int rosa(const void *c, const void *d) { int r = strcmp((*(struct p*)c).rosa, (*(struct p *)d).rosa); if (r == 0) return 0; else if(r < 0) return -1; else return 1; } int pornome(const void *e, const void *f) { int c = strcmp((*(struct p*)e).nome, (*(struct p *)f).nome); if (c == 0) return 0; else if(c < 0) return -1; else return 1; }
  3. Oi, tenta o seguinte código #include<stdio.h> #include<stdlib.h> /*#define max 10 não é usado*/ typedef struct no{ int dado; struct no *prox, *ant; }No; /* fim e inicio não precisa ser ponteiro */ typedef struct lista{ int qtd; No inicio; No fim; }Lista; /* usa fim e inicio como sentinela */ void inicializa(Lista *l){ l->qtd=0; l->fim.ant = &l->inicio; l->fim.prox = NULL; l->inicio.prox = &l->fim; l->inicio.ant = NULL; } /*função não usada int listavazia(Lista *l){ if(l->qtd==0){ return 0; } return 1; } */ /*função não usada para os valores de k em main No *buscap(Lista *l,int k){ No *nav; int i; if(k<l->qtd/2){ nav=&l->inicio; for(i=0;i<k;i++) nav=nav->prox; } else{ nav=&l->fim; for(i=l->qtd;i>k;i--) nav=nav->ant; } return nav; }*/ /* inserirlistavazia e inseririnicio pode ser uma função só int inserirlistavazia(Lista *l, int valor){ No *novo=malloc(sizeof(No)); novo->dado=valor; novo->prox = l->inicio.prox; l->inicio.prox = novo; novo->ant = &l->inicio; l->qtd++; return l->qtd; }*/ int inseririnicio(Lista *l,int valor){ No *novo=malloc(sizeof(No)); novo->dado=valor; novo->prox = l->inicio.prox; l->inicio.prox = novo; novo->prox->ant=novo; novo->ant = &l->inicio; l->qtd++; return l->qtd; } int inserirfim(Lista *l,int valor){ No *novo=malloc(sizeof(No)); novo->dado=valor; novo->ant = l->fim.ant; l->fim.ant = novo; novo->ant->prox = novo; novo->prox = &l->fim; l->qtd++; return l->qtd; } int remova_um(Lista *l){ int aux=l->inicio.prox->dado; free(l->inicio.prox); l->inicio.prox=NULL; l->qtd--; return aux; } int inserirp(Lista *l,int valor,int k){ if(k<0 || k>l->qtd){ printf("posiçao invalida\n"); return -1; } if(l->qtd==0 || k==0) return inseririnicio(l,valor); if(k==l->qtd) return inserirfim(l,valor); /*essa região de código nunca é executada para os valores de k em main No*novo=malloc(sizeof(No)); novo->dado=valor; No *nav=buscap(l,k); novo->prox=nav->prox; novo->ant=nav; nav->prox->ant=novo; return++l->qtd; /*********************************************/ } int removerinicio(Lista *l){ No *lixo; if(l->qtd==0){ printf("lista vazia"); return -1; } if(l->qtd==1){ return remova_um(l); } int aux=l->inicio.prox->dado; lixo=l->inicio.prox; l->inicio.prox=lixo->prox; free(lixo); lixo=NULL; l->qtd--; return aux; } int removerfim(Lista *l){ No *lixo; if(l->qtd==0) return -1; if(l->qtd==1){ return remova_um(l); } int aux=l->fim.ant->dado; lixo=l->fim.ant; l->fim.ant = lixo->ant; free(lixo); lixo=NULL; l->qtd--; return aux; } int removerp(Lista *l,int k){ if(l->qtd==0){ return -1; } if(k<0 || k>l->qtd){ printf("posiçao invalida"); return -1; } if(k==0){ return removerinicio(l); } if(k==l->qtd-1){ return removerfim(l); } /*essa região de código nunca é executada para os valores de k em main No *lixo=buscap(l,k); lixo->ant->prox=lixo->prox; lixo->prox->ant=lixo->ant; int aux=lixo->dado; free(lixo); lixo=NULL; l->qtd--; return aux; /**********************************************/ } int main(){ int i; Lista l; inicializa(&l); for(i=0;i<10;i++){ printf("%d\n",inserirp(&l,i*5,i)); } for(i=0;i<10;i++){ printf("%d\n",removerp(&l,0)); } return 0; }
  4. Oi, eu não entendo de GSL... mas pelo site da biblioteca: https://www.gnu.org/software/gsl/manual/html_node/Eigenvalue-and-Eigenvector-Examples.html No seu código eval e evec tem que ser respectivamente: gsl_vector_complex *eval = gsl_vector_complex_alloc (2); gsl_matrix_complex *evec = gsl_matrix_complex_alloc (2, 2); Tenta lá. No meu computador não deu mais erro de segmentação. Embora eu não faço a menor ideia do que é eigenvalue, eigenvector...

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...