Jump to content
PlayMa256

Problema insercao de dados vetor int

Recommended Posts

PlayMa256

bom, estou com um problema, estou fazendo a conta de quantos \t existem em cada linha que estou lendo, pra isso tenho uma funcao que funciona pra cada linha, corretamente, mas queria uma maneira de pegar a quantia maxima de \t que eu achar, para isso pensei em colocar em um vetor depois fazia ordenacao e pegaria somente a primeira posicao.

Pois bem, fiz, só que algumas coisas estranhas estao acontecendo.

Imagine, tenho uma entrada assim:

obs: na entrada no sistema, nao teria o \t escrito, mas sim o TAB apertado.

a (\t) a (\t) a (\t) a

a (\t) a (\t)

ok, ele me retornaria 1, ja que ele conta só da ultima linha, para isso fiz desta maneira:

#include <stdio.h>
#include <string.h>
int conta(char c, char *s){
   int num_vezes=0;
   int i=0;
   while(*s!='\0'){
    if(*s== '\t'){
	    num_vezes++;
    }
    s++;
   }
   return num_vezes;
}
int main(){
   int tamanho = 0;
   int linhas;
   int colunas;
   char vetor[302];
   int k, i,l;
   int m;
   int j;
   int contador = 1;
   k=0;
   int vetorDeNumeros[26];
   char *ponteiro;
   char matris[30][26];
   while(1){
       fgets(vetor, 302, stdin);
       if(strcmp(vetor, "\n") == 0){
           break;
       }
    char *s = vetor;
    m = conta('\t', s);
    for(l=0;l<k;l++){
	    vetorDeNumeros[l] = m+1;
	    printf("%d", vetorDeNumeros[l]);
    }

    k++;
   }
   int tamanhoVetor = (sizeof vetorDeNumeros)/(sizeof vetorDeNumeros[0]);
   printf("%d", tamanhoVetor);
   int w;
   for(w=0;w<tamanhoVetor;w++){
    printf("%d", vetorDeNumeros[w]);
   }
return 0;
}

porem por incrivel que pareca me é apresentado isso como resultado:

Tamanho do vetor: 262

1982452844

0

5373952

5384952

0

50397186

1982452852

5377792

5374676

127

5374288

5373952

4

5384952

2686620

1997945022

5374264

1997944986

1982452916

0

5373952

5384960

0

127

0

Mas que raios esta acontecendo?

Obrigado.

Edited by PlayMa256

Share this post


Link to post
Share on other sites
brunoais

Corrige a indentação e depois tento ajudar-te

  • Vote 1

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
HappyHippyHippo

explica o que estás a fazer no seguinte código:

m = conta('\t', s);                // <--- m tem o número de '\t' na string s
// início
for(l=0;l<k;l++){
 vetorDeNumeros[l] = m+1;
 printf("%d", vetorDeNumeros[l]);
}
// fim


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

bom, estou tentando fazer ele inserir na posicao N do vetor de numeros, isso é, cada linha terá uma quantidade de \t certo?

Pois bem, k é a quantia de linhas lida, faço for pra que ele rode de 0 até a quantidade de linhas lida, e depois passo o valor de M(da linha K) pra posicao N do vetor.

Mas dai tu me pergunta pra que isso? estou querendo a quantia maxima de \t das linhas que foram lidas. Colocando no vetor, depois faria bubble sort para odernar do maior par ao maior, assim retornaria só a posicao 0 do vetor, mas vai ai um exemplo do que eu quero fazer:

1ª Linha: 30 \t

2ª linha: 25 \t

3ª Linha: 28 \t

Entao o numero maximo seria 30.

Bom, é isso,

Share this post


Link to post
Share on other sites
HappyHippyHippo

Mas dai tu me pergunta pra que isso?

eu pergunto na esperança de tu releres o código e (de alguma forma) te elucidardes o quanto absurdo é o código ...

o ciclo não faz nem de perto nem de longe o que disseste.

volta a ler o código e pensa bem no que ele está a fazer. se ajudar, pensa no ciclo while que tens


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PlayMa256

Obrigado, nao havia visto que poderia ser feito dessa maneira.

vetorDeNumeros[k] = m+1;

Só que me surgiu outra duvida, estou tentando agora quebrar onde existem esses \t, pra isso fiz esta funcao.

void copiar(char vetor[], char matris[][colunas]){
int i;
int j;
char *ponteiro;
ponteiro = strtok(vetor, "\t");
for(i=0;i<k;i++){
	for(j=0;j<colunas;j++){
		while (ponteiro != NULL){
			strcpy(matris[i][j], ponteiro); // ainda estou tendo problema aqui, ele esta dando problema de pointer pra integer
			ponteiro = strtok (NULL, " ,.-");
		}
	}
}
}

Porem eu guardei em variaveis os valores de linhas e colunas, eu nao estou conseguindo passar pra funcao a matriz desta maneira : matriz[linhas][colunas]

Eu posso omitir um dos conteudos, mas nao faço ideia de como passar aquelas quantidades de linha e de coluna dinamicamente pra funcao.

O que eu poderia realizar para depois dentro, eu poder utilizar esses tamanhos, e assim percorrer a matriz pra ir montando?

E alem do mais esta me surgindo outro problema, no strcpy ele ta dando erro de pointer pra integer....

Obrigado.

Edited by PlayMa256

Share this post


Link to post
Share on other sites
herty

Obrigado, nao havia visto que poderia ser feito dessa maneira.

vetorDeNumeros[k] = m+1;

Só que me surgiu outra duvida, estou tentando agora quebrar onde existem esses \t, pra isso fiz esta funcao.

void copiar(char vetor[], char matris[][colunas]){
int i;
int j;
char *ponteiro;
ponteiro = strtok(vetor, "\t");
for(i=0;i<k;i++){
	for(j=0;j<colunas;j++){
		while (ponteiro != NULL){
			strcpy(matris[i][j], ponteiro); // ainda estou tendo problema aqui, ele esta dando problema de pointer pra integer
			ponteiro = strtok (NULL, " ,.-");
		}
	}
}
}

Porem eu guardei em variaveis os valores de linhas e colunas, eu nao estou conseguindo passar pra funcao a matriz desta maneira : matriz[linhas][colunas]

Eu posso omitir um dos conteudos, mas nao faço ideia de como passar aquelas quantidades de linha e de coluna dinamicamente pra funcao.

O que eu poderia realizar para depois dentro, eu poder utilizar esses tamanhos, e assim percorrer a matriz pra ir montando?

E alem do mais esta me surgindo outro problema, no strcpy ele ta dando erro de pointer pra integer....

Obrigado.

Não tens a minima noção do que tas a fazer com essas matrizes.

1º porque usas matris 2D para char? Não tem qualquer lógica.

2º Não consegui perceber o que querer fazer com essa função copiar

3º Claro que o strcpy não funciona visto que:

strcpy(destino, origem)

matriz[j] = char

o destino do strcpy tem de ser char[] ou char *

Share this post


Link to post
Share on other sites
PlayMa256

Não tens a minima noção do que tas a fazer com essas matrizes.

1º porque usas matris 2D para char? Não tem qualquer lógica.

2º Não consegui perceber o que querer fazer com essa função copiar

3º Claro que o strcpy não funciona visto que:

strcpy(destino, origem)

matriz[j] = char

o destino do strcpy tem de ser char[] ou char *

1º Estou usando matris 2d porque preciso fazer uma tabela semelhante ao excel, é a maneira que se encaixa melhor para ser representado, e conseguir referenciar colunas e linhas.

2º Quero quebrar cada parte do vetor recebido nos \t, passa-lo para cada celula da matris(por exemplo, matris[2][0]

3º estou usando de maneira correta, destino que quero é a linha e a coluna da matriz.

e o ponteiro que esta sendo a origem é char...

Share this post


Link to post
Share on other sites
PlayMa256

Bom, resolvi o problema, fiz da seguinte maneira:

crei a matriz com um 3 valor, matriz[30][26][301]

esse 301 é a quantidade maxima de caracteres que terá dentro de cada celula, e 30 linhas e 26 colunas é o maximo que ela pode chegar.

Pois bem...parou o erro, só que na hora de printar, isto na funciona, ele printa em branco.

eis a parte de printar...

int w,z,y;
for(w=0;w<k;w++){
for(z=0;z<colunas;z++){
 printf("%s", matris[w][z]);
}
}

sendo que, colunas esta recebendo dinamicamente, e o K(que sao as linhas) tbm esta recebendo dinamicamente, entao ele esta correndo todos os campos.

Era pra estar dando certo, mas independente do input que fizer (dados ou int) ele printa em branco.

se eu inserir por exemplo 1 \t 1 \t 1

a quantidade de linhas sao 1, e de colunas sao 3(quantidade de \t+1)

o que seria o problema?

Obrigado.

Edited by PlayMa256

Share this post


Link to post
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.