Ir ao conteúdo
  • Cadastre-se

C++ Preencher uma matriz com 100 conjuntos das 5 vogais do alfabeto usando ponteiros


Tati Schein

Posts recomendados

Digitei o seguinte código, o que está errado?

#include <stdio.h>

int main ()
{
char matrx [100][5];
char *p;
int count;

p=matrx[0][0]='a';
p=matrx[0][1]='e';
p=matrx[0][2]='i';
p=matrx[0][3]='o';
p=matrx[0][4]='u';

for (count=0; count<500; count++)
{
*p="aeiou";
printf("%c", *p);
p++;
}

return(0);
}

 

  • Obrigado 1
  • Haha 1
  • Triste 1
Link para o comentário
Compartilhar em outros sites

@Tati Schein    creio que uma matriz de ponteiro seja com dois asteriscos . 

  e provavelmente seja melhor reservar espaço na memória para guardar esses dados  , e isso você consegue usando a funcao malloc e no fim do programa não esqueça de liberar esses espaços usando a função free .

Link para o comentário
Compartilhar em outros sites

@Tati Schein    não entendi por que você criou uma matriz normal e sendo que você Quer fazer usando ponteiros , então creio que seja melhor fazer com ponteiro mesmo desde o início e seu código poderia ser assim , :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void __Sleep(int);
int main ()
{
    char matrx [10][5];
    char **mp;
    int count;
    mp = (char**)malloc(10 * sizeof(char*));
    int i;
    for(i=0; i <10; i++)
    {
        mp[i] = (char*)malloc( 5 * sizeof(char));
        mp[i][0] = 'a';
        mp[i][1] = 'e';
        mp[i][2] = 'i';
        mp[i][3] = 'o';
        mp[i][4] = 'u';
        printf("%3d -: ",i+1);
        printf("%c "  ,mp[i][0]);
        printf("%c "  ,mp[i][1]);
        printf("%c "  ,mp[i][2]);
        printf("%c "  ,mp[i][3]);
        printf("%c \n",mp[i][4]);
        __Sleep(300);  // milisegundos
    }
    __Sleep(1000);  // hum segundo
    printf("\n");
    for(i=0; i<10; i++)
    {
        printf("%3d -: ",i+1);
        for(int j=0; j<5; j++)
        {
            printf("%c ", mp[i][j]);
        }
        printf("\n");
    }
    free(mp);
    printf("      Tecle\n\n\n";
    getch();
    return 32768;
}
void __Sleep(int t)
{
    int f,n;
    for(f=0; f<t*100; f++)
        for(n=0; n<6000; n++);
}

 

Link para o comentário
Compartilhar em outros sites

 

#include <stdio.h>

int main ()
{
char matrx [100][5];
char *p;
int count;

p=matrx[0][0]='a';
p=matrx[0][1]='e';
p=matrx[0][2]='i';
p=matrx[0][3]='o';
p=matrx[0][4]='u';

for (count=0; count<500; count++)
{
*p="aeiou";
printf("%c", *p);
p++;
}

 

Esta errado mesmo...

p é char*, um ponteiro para char. E estava apontando para matrx[0][4]


E aí você escreve essa linha
 

*p = "aeiou";


O que é "aeiou"? const char[6]. E *p é o que? char, já que p é char*

 

O que você quer fazer?

 

Se quer redefinir alguma das 100 matrx[5] deve usar o endereço de inicio das duas strings

 

Que pretende com essas linhas:
 

	p = matrx[0][0] = 'a';
	p = matrx[0][1] = 'e';
	p = matrx[0][2] = 'i';
	p = matrx[0][3] = 'o';
	p = matrx[0][4] = 'u';

 

Não há razão para escrever isso. Não está usando p para nada e reatribuindo a toda hora. Para que? E porque matrx e não matrix? economizar um i e ficar mais difícil de ler e escrever?

 

Entenda que as strings em C terminam por ZERO. o tal null. Não pode escrever com tentou se pretende usar isso como 100 strings. Entenda isso: ou aumenta para 6 ou usa só 4. Cada uma delas tem que terminar por zero ou não vai poder por exemplo usar %s para mostrar na tela... ;) 

 

Algo como

 

const char* novo = "1234";
memcpy( matrx[99], novo, strlen(novo) );

 

É o que quer fazer

 

Exemplo

 

Saida 

==>
Primeira string: 'aeio'

Os 5 primeiros

i=  0, matr[i,0]='I000'
i=  1, matr[i,0]='I001'
i=  2, matr[i,0]='I002'
i=  3, matr[i,0]='I003'
i=  4, matr[i,0]='I004'

Os 5 ultimos

i= 95, matr[i,0]='I095'
i= 96, matr[i,0]='I096'
i= 97, matr[i,0]='I097'
i= 98, matr[i,0]='I098'
i= 99, matr[i,0]='I099'

 

e o programa
 

#include <stdio.h>

int main()
{
	char matrx[100][5];

	printf("==>\n");

	char* p = &matrx[0][0];
	*p = 'a';	p++;
	*p = 'e';	p++;
	*p = 'i';	p++;
	*p = 'o';	p++;
	*p = 0;	
	printf("Primeira string: '%s'\n", matrx[0]);

	p = (char*) matrx;
	for (int count = 0; count < 100; count++)
	{
		sprintf(p, "I%03d\0", count);
		p += 5;
	};
	// os 5 primeiros
	printf("\nOs 5 primeiros\n\n");
	for (int i = 0; i < 5; i += 1)
		printf("i=%3d, matr[i,0]='%s'\n",
			i, matrx[i]);
	// os 5 ultimos
	printf("\nOs 5 ultimos\n\n");
	for (int i = 95; i < 100; i += 1)
		printf("i=%3d, matr[i,0]='%s'\n",
			i, matrx[i]);
	return 0;
}

 

Esse faz o que você tentou fazer:

  • atribui os valores, usando letras, para a primeira string 
  • depois numera as 100 strings e monta como strings
  • mostra as 5 primeiras
  • mostra as 5 últimas.

 

Entenda que

  • C não tem nada como "matrizes" como na linguagem FORTRAN. Só existem vetores. Uma dimensão. E então pode e deve usar matrx[X] com um índice só, para acessar as strings.
  • C tem aritmética de ponteiros então ao escrever matrx[i] ao somar um em i o ponteiro anda na verdade 5 bytes.
  • Essa é a mesma razão pela qual você tem que escrever no primeiro for, p+=5;
  • tenha muito claro porque p+=5; e não *p += 5;...

É claro que se quer 100 strings com 5 vogais vai precisar de SEIS posições para cada uma. Tanto faz se vai alocar 

    char    matrix[100][6];
    char**  matrixB;
    char*   matrixC;

 

Mas ao decidir por um caminho você deve construir a tal 'matriz' de acordo com o que declarou. repito: em C não existe nada além de vetor[X]. E isso é normal e bom.

  • Curtir 1
  • Obrigado 1
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...