Ir ao conteúdo

Posts recomendados

Postado

programa que receba do usuário dois vetores de tamanho 5, cujo elementos são os nomes de pessoas (tamanho máximo 10). Após isso, o programa deve percorrer os dois vetores juntando os i-ésimos nomes de cada vetor em uma matriz 5x2, ou seja, serão formados pares entre os dois vetores (formando uma fila).

 

#include<stdio.h>
#include<string.h>

int main(){
    char nomes1[5] = {'a','b','c','d','e'};
    char nomes2[5] = {'e','f','g','h','i'};
    char matriz_fila[5][2];

    printf("Digite os nomes dos homens: ");
    scanf("%50[^\n]", a, b, c, d, e);//esses 50 são a junção do tamanho de cada elemento do vetor
    getchar();
    printf("Digite os nomes das mulheres: ");
    scanf("%50[^\n]", e, f, g, h, i);

 

 

  • Obrigado 1
Postado

@Fellipe Dantas    se os dois vetores tem 10 posições cada , então juntando os dois terá então 20 nomes , e se a matriz só tem 5 x 2  posições , então ficará sobrando alguns nomes ,  e sendo assim , completando seu código basta ir pegando os nomes nas posições começando de zero até enquanto for menor que cinco , e colocar na matriz nessas mesmas posições usando para isso o comando  strcpy  ,  assim :

for(i=0;i<5;i++){
    strcpy(matriz_fila[i][0],nomes1[i]);                 
    strcpy(matriz_fila[i][1],nomes2[i]);                 
}

 

Postado

@devair1010 eu refiz o meu códido de outra maneira mas na hora de exibir a matriz com a fila, não mostra o nomes das meninas.

 

#include <stdio.h>
#include <string.h>

  
#define linhas 5
#define colunas 2
#define tamString  10

int main(){
	char nomes1[linhas][colunas][tamString];
	char nomes2[linhas][colunas][tamString];
	int i,j;

	for (i = 0; i < linhas; i++){
			printf("Digite o nome dos rapazes: \n");
			scanf("%[^\n]s",nomes1[i]);
			getchar();
	}
	for (i = 0; i < linhas; i++){
			printf("Digite o nome das moças: \n");
			scanf("%[^\n]s",nomes2[i]);
			getchar();
	}
	puts("\n\ A fila ficou no seguinte formato :\n");
	for (i = 0; i < linhas; i++){
		for(j=0; j < colunas;j++){
			printf("-%s ", nomes1[i][j],nomes2[i][j]);
		}
		puts("");
	}
	return 0;
}

 

  • Amei 1
Postado

@Fellipe Dantas    qual compilador você está usando ?   geralmente esses compiladores não erram ,  e para imprimir o resultado pode usar apenas um loop mesmo :

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define linhas 5
#define colunas 2
#define tamString  15
int main(){
	char nomes1[linhas][colunas][tamString];
	char nomes2[linhas][colunas][tamString];
	int i,j;

	for (i = 0; i < linhas; i++){
			printf("Digite o nome dos rapazes: \n");
			scanf("%[^\n]s",nomes1[i][0]);
			getchar();
	}
	for (i = 0; i < linhas; i++){
			printf("Digite o nome das moças: \n");
			scanf("%[^\n]s",nomes2[i][1]);
			getchar();
	}
	puts("\n\ A fila ficou no seguinte formato :\n");
	for (i = 0; i < linhas; i++){
        printf("%15s%15s",nomes1[i][0],nomes2[i][1]);
		puts("");
	}
	getch();
	return 0;
}

mas aí já está diferente do enunciado ,  pois era para criar dois vetores e você usou duas matrizes .

Postado

Inicie criando funções genéricas de criação e leitura de matrizes dinamicamente ... Inicie do básico com inteiros ou floats, depois altere para lidar com strings, essa seria minha dica ...

/* leitura de valores para a matriz */
void le_mat(float **mat, int N, int M) {
    int i, j;
    printf("\n\nInforme os dados para a matriz %dx%d\n", N, M);
    for(i=0; i<N; i++)
        for(j=0; j<M; j++)
            scanf("%f", &mat[i][j]);   
}

/* inicializa a matriz com um valor dado */
void init_mat(float **mat, int N, int M, float val) {
    int i, j;
    for(i=0; i<N; i++)
       for(j=0; j<M; j++) mat[i][j]=val;
}

/* mostra matriz */
void mostra(float **mat, int N, int M) {
    int i, j;
    printf("\n\nMatriz:\n");
    for(i=0; i<N; i++){
        for(j=0; j<M; j++)
            printf("%.1f  ", mat[i][j]);
        printf("\n");
    }
}

/* libera espaço utilizado pela matriz - apaga a matriz */
void libera(float **mat, int N) {
    int i;
    for(i=0; i<N; i++)
        if (mat[i]!=NULL) free(mat[i]);
    if (mat!=NULL) free(mat);
}


/* cria uma matriz dinamicamente */
int **criamat(int N, int M) {
    int **mat;
    int i;
    mat = (int **) malloc(N*sizeof(int *));
    if (!mat) {
        printf("Erro alocação primeira dimensão\n");
        system("pause");
        return NULL;
    }
    for(i=0; i<N; i++) {
        mat[i] = (int *) malloc(M*sizeof(int));
        if (!mat[i]) {
            printf("Erro alocação segunda dimensão\n");
            system("pause");
            return NULL;
        }
    }
    return mat;
}

/*Criando vetor Dinâmico */
char *criav(int M){
     char *vet;
     vet = (char *) malloc(M*sizeof(char ));
     return vet;
}

 

Cuidado com caracteres especiais ... Isso faz um BUG no printf ... 

Veja como este problema pode ser resolvido:

 

E seria interessante você ler isso para compreender porque o printf têm esse "BUG":

https://www.ime.usp.br/~pf/algoritmos/apend/unicode.html

 

 

  • Preste atenção nesse ponto também
Citação

scanf("%[^\n]s",nomes1);

 

Diferença entre %c e %s em C

%c –> Se refere a um único caractere, assim como as aspas simples;

%s –> Serve para denominar uma sequência de caracteres que tem seu fim marcado por um espaço.(imagine o que acontece se você colocar isso em um for ... Além disso, espaço também conta como um caractere 32, o que pode fazer com que você ultrapasse o limite do seu vetor e cause esses erros estranhos de estouro do vetor)

 

getchar() é uma função da biblioteca padrão stdio. Cada vez que é chamada, esta função lê um caractere (%c) do teclado; getchar começa a ler depois que a tecla é digitada no final de uma sequência de caracteres (dizemos que a entrada para a função getchar() está no fluxo de entrada). A função getchar() retorna um valor, o caractere lido (mais precisamente, o código inteiro ASCII correspondente ao caractere). Você deve saber que o caractere de nova linha, \n, que tem o código ASCII 10, é automaticamente adicionado na sequência de caracteres de entrada quando com getchar(). Isso não tem importância quando a função getchar() é chamada uma única vez, mas isto pode causar problemas quando ele é usado dentro de um laço.

 

 

  • Curtir 1
  • Obrigado 1
Postado
Em 24/11/2019 às 09:55, Fellipe Dantas disse:

programa que receba do usuário dois vetores de tamanho 5, cujo elementos são os nomes de pessoas (tamanho máximo 10). Após isso, o programa deve percorrer os dois vetores juntando os i-ésimos nomes de cada vetor em uma matriz 5x2, ou seja, serão formados pares entre os dois vetores (formando uma fila).

 

 

Em C strings são do tipo char* e não char e assim a declaração normal desses vetores seria

char* vetorA[5];
char* vetorB[5];

char* lado_a_lado[5][2];

Considerando a garantia de que o tamanho máximo de cada nome é 10 você pode reservar 10+1 bytes para armazenar cada nome e assim usar char e não precisar alocar memória para as strings. Tome o cuidado de garantir a existência de um null, \0 ao final de cada string. Aí poderia usar

char* vetorA[5][11];
char* vetorB[5][11];

char* lado_a_lado[5][2][11];

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!