Ir para conteúdo
Fórum Script Brasil
  • 0

Será que a lógica está certa?


alex_dino

Pergunta

Tenho um trabalho da faculdade para fazer, o programa é:

Criar uma matriz de 4 linhas e 10 colunas. Ler diversas palavras até que o usuário digite a palavra fim.

Armazenar as palavras de acordo com os critérios abaixo:

a) na primeira linha as palavras que iniciam com a letra a..

B) na segunda linha as palavras que terminam com a letra r..

c) na terceira linha as palavras que possuam pelo menos uma letra h..

d) na quarta linha as palavras que não possuam nenhuma letra s..

Palavras que não satisfazem as condições acima deverão ser desconsideradas.

Quando uma linha da matriz estiver totalmente preenchida, novas inserções, para esta linha devem ser descartadas.

Estou começando ele, mais alguém diga se minha lógica está certa!!!!!!!!!!!!!!

Quem tiver alguma sugestão, por favor me ajudem.......Obrigado

# define LINHA 4
# define COLUNA 10

#include<stdio.h>
int main (void)
{
    char matriz [LINHA][COLUNA],palavras[10][12],pos,palavras_a,linha,coluna;
    
    for (pos=0;pos<10;pos++){
        
         printf ("Digite a palavra: ");
         gets  (palavras[pos]);

          while (palavras[pos]!="fim")
                gets (palavras[pos]);
    }
    for (coluna=0;coluna<COLUNA;coluna++){
            
            if (palavras[pos][0]=='a')
               palavras_a = palavras_a + matriz [linha][0];

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Num caso assim é interessante usar o loop do...while.

Não entendi por que você chamou gets() duas vezes. Aliás, não use gets(). Use fgets(), pois gets() pode estourar o buffer da string, coisa que não acontece com fgets().

Não se faz comparação de strings em C com o operador ==. User strcmp() ou implemente sua proŕia strcmp() (isso é ótimo para quem está começando a programar)

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe-me. Eu que estou falando besteira.

Você está comparando caracteres. Está certo o que você fez no primeiro post.

Mas se fosse comparar palavras com strcmp(), faria assim:

if ( strcmp(palavras[pos], "palavra" ) == 0)
    /* palavras iguais */
else
    /* palavras diferentes */

Editado por Beraldo
Link para o comentário
Compartilhar em outros sites

  • 0

assim:

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

int main()
{
    char src[3][20] = {"palavra1", "palavra2", "palavra3"};
    char dest[3][20];
    int i = 0;
    
    for (i = 0; i < 3; i++)
    {
        strcpy(dest[i], src[i]);
    }
    
    for (i = 0; i < 3; i++)
    {
        printf("%s\n", dest[i]);
    }
    
    
    return 0;
}

isso copia as palavras de src para dest

Link para o comentário
Compartilhar em outros sites

  • 0

Agora fiz assim...

for (coluna=0;coluna<COLUNA;coluna++){
        
           if (palavras[pos][9]=='r')
              strcpy (matriz [linha][1],palavras[pos][9]=='r');
              
              printf ("%s",matriz);

Link para o comentário
Compartilhar em outros sites

  • 0

Bá não consigo fazer....ele lê as palavras mais da erro, isso só na letra b do exercicio.....imagina as outras.

# define LINHA 4
# define COLUNA 10

#include<stdio.h>
int main (void)
{
    char matriz [LINHA][COLUNA],palavras[10][12],pos,palavras_a,linha,coluna,palavras_com_a;
    
    for (pos=0;pos<10;pos++){
        
         printf ("Digite a palavra: ");
         gets  (palavras[pos]);

          while (palavras[pos]!="fim")
                
    }
    
    for (coluna=0;coluna<COLUNA;coluna++){
        
           if (palavras[pos][9]=='r')
              strcpy (matriz [linha],palavras[pos]);
              
              printf ("%s",matriz);
   }
   system ("pause");
   return(0);
}

Aonde estou errando,alguém por favor me ajude!!!!!!!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Primeiramente, as palavras não precisam, necessariamente, terem os mesmos tamanhos. Logo a posição 9 pode não ser a última letra.

use fgets() em vez de gets()

Um exemplo da base do programa:

# define LINHA 4
# define COLUNA 10

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

int main (void)
{
    char palavras[10][12];
    int i = 0, total_palavras = 0;
    
    do
    {
        
         printf("Digite a palavra: ");
         fgets(palavras[total_palavras], 12, stdin);
         palavras[total_palavras][strlen(palavras[total_palavras]) - 1] = '';
        total_palavras++;
    }
    while ( strcmp(palavras[total_palavras], "fim") && total_palavras < 10);
    
    
    for (i = 0; i <= total_palavras; i++)
    {
        if (palavras[i][strlen(palavras[i]) - 1] == 'r')
        {
            printf("A última é 'R': %s\n", palavras[i]);
        }
    }
    
    
   return(0);
}

Agora vai tentando e poste as dúvidas.

Embaixo do fegts(), coloquei uma linha que retira o \n inserido pelo fgets().

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...