ProgII - Lista 3

Lista 3 - Enunciado

Fazer os seguintes programas:

ATENÇÃO: Não use funções da biblioteca de strings do C!

  1. Escreva um programa que leia uma linha de até 80 caracteres do teclado e imprima: a linha lida e quantos caracteres foram lidos.

    Solução: versão 1 - versão 2 - versão 3

  2. Escreva um programa que leia uma linha de caracteres do teclado e imprima quantas vezes um caracter, também fornecido pelo teclado, aparece nesta linha. O programa também deve imprimir em que posições o caracter foi encontrado.

    Solução: versão 1 - versão 2

  3. Escreva um programa que leia uma linha do teclado e em seguida um par de caracteres. O programa deve procurar este par na linha e imprimir em que posições o par foi encontrado.

    Solução

  4. Escreva um programa que leia uma linha do teclado e imprima todas as vogais e quantas existem no texto.Obs: o tamanho máximo da linha deve ser 40 caracteres.

    Solução

  5. Escreva um programa que leia uma linha do teclado e troque cada letra pela seguinte no alfabeto. Exemplo:
    a -> b
    b -> c
    c -> d
    ...
    z -> a

    Solução

  6. Escreva um programa que leia uma frase de 80 caracteres e a imprima retirando os espaços em branco.

    Solução

  7. Escreva um programa que leia uma matriz de 3x3 que contém somente caracteres 0 e X e procure linhas que contenham somente um dos dois caracteres. O caracter a ser procurado deve ser lido do teclado.

    Solução

  8. Escreva um programa que leia para um vetor um conjunto de números inteiros. Assuma que o conjunto de números lidos é menor que o tamanho do vetor. O programa deve inserir no vetor em uma posição especificada pelo usuário um número lido do teclado. Assuma que a posição especificada pelo usuário corresponde ao índice do vetor.

    Solução

  9. Faça um programa que inverta uma string. O programa deve ler a string com gets e armazená-la invertida em outra string. Use o comando for para varrer a string até o seu final.

    Solução

  10. Faça um programa que leia duas matrizes 3x3 e imprima seu produto.

    Solução - versão com simulação passo-a-passo

Lista 3 - Solução

Soluções da Lista de Exercícios no. 3

L3ProgIIex01v1

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 28/09/2002
  Descricao     : versao 1 - Usando gets()
 ******************************************************************************/
#include <stdio.h>

#define MAXCARAC        80
#define TAM             MAXCARAC + 1    //um caracter a mais para o '\0'.

int main() {
        char    linha[TAM];
        int     cont;

        printf("Programa para verificar quantos caracteres foram digitados.\n"
                        "Usando gets() para obter a linha.\n\n");
        printf("Entre com uma linha de ate' %d caracteres. "
                "Pressione <ENTER> para finalizar\n", MAXCARAC);
        gets(linha);
        cont = 0;
        while(linha[cont] != '\0') {
                cont++;
        }
        puts("Linha lida = ");
        puts(linha);
        printf("Foram digitados %d caracteres.\n", cont);

        return 0;
}

L3ProgIIex01v2

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 28/09/2002
  Descricao     : versao 2 - Usando getchar().
                                E' testado se a entrada de dados e' valida.
 ******************************************************************************/
#include <stdio.h>

#define MAXCARAC        80
#define TAM             MAXCARAC + 1    //um caracter a mais para o '\0'.

int main() {
        char    linha[TAM];
        int     cont;

        printf("Programa para verificar quantos caracteres foram digitados.\n"
                        "Usando getchar() para obter a linha.\n\n");
        printf("Entre com uma linha de ate' %d caracteres. "
                "Pressione <ENTER> para finalizar\n", MAXCARAC);
        cont = 0;
        while( (cont < TAM) && ((linha[cont] = getchar()) != 10) ) {
                printf("\nDebug: linha[%d] = %d\n", cont, linha[cont]);
                cont++;
        }
        printf("\nDebug: linha[%d] = %d\n", cont, linha[cont]);
        if (cont == TAM) {
                printf("Entrada Invalida! Foram digitados mais de %d caracteres\n",
                                MAXCARAC);
        } else {
                linha[cont] = '\0';
                puts("Linha lida = ");
                puts(linha);
                printf("Foram digitados %d caracteres.\n", cont);
        }

        return 0;
}

L3ProgIIex01v3

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 28/09/2002
  Descricao     : versao 3 - Usando getche().
                          E' testado se a entrada de dados e' valida.
 ******************************************************************************/
#include <stdio.h>
#include <conio.h>

#define MAXCARAC        80
#define TAM             MAXCARAC + 1    //um caracter a mais para o '\0'.

int main() {
        char    linha[TAM];
        int     cont;

        printf("Programa para verificar quantos caracteres foram digitados.\n"
                        "Usando getche() para obter a linha.\n\n");
        printf("Entre com uma linha de ate' %d caracteres. "
                "Pressione <ENTER> para finalizar\n", MAXCARAC);
        cont = 0;
        while( (cont < TAM) && ((linha[cont] = getche()) != 13) ) {
                printf("\nDebug: linha[%d] = %d\n", cont, linha[cont]);
                cont++;
        }
        printf("\nDebug: linha[%d] = %d\n", cont, linha[cont]);
        if (cont == TAM) {
                printf("Entrada Invalida! Foram digitados mais de %d caracteres\n",
                                MAXCARAC);
        } else {
                linha[cont] = '\0';
                puts("Linha lida = ");
                puts(linha);
                printf("Foram digitados %d caracteres.\n", cont);
        }

        return 0;
}

L3ProgIIex02v1

/*******************************************************************************
  Autor         : Adriano Joaquim de Oliveira Cruz
  Data          : 24/04/1997
  Descricao     : versao 1
 ******************************************************************************/

/*      Bibliotecas usadas pelo programa */
#include  <stdio.h>

/*      Definicoes */
#define DIM 80

int main ( )
{
        char linha[DIM + 1];    /* linha de caracteres */
        char ch;                        /* caracter a ser procurado */
        unsigned int pos=0,             /* posicao do caracter */
                     conta=0;   /* contador de vezes que o caracter apareceu */

        puts("Entre com um linha de caracteres.\n");
        gets(linha);

        printf("\nEntre com um caracter para ser procurado.  ");
        scanf("%c", &ch);

        do {
                printf("pos = %d\n", pos);
                if (linha[pos] == ch) {
                        printf("O caracter %c foi encontrado na posicao %d.\n",
                                        ch, pos);
            conta++;
        }
        } while (linha[++pos] != '\0');

    if (conta)
                printf("O caracter %c foi encontrado %d vezes.\n", ch, conta);
        else
                printf("O caracter %c nao foi encontrado.\n",ch);

        return 0;
}

L3ProgIIex02v2

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 22/09/2002
  Descricao     : versao 2
 ******************************************************************************/
#include <stdio.h>

#define MAXCARAC        4
#define TAM                     MAXCARAC + 1

int main() {
        char    linha[TAM];
        char    caracter;
        int             pos[TAM];
        int             i, cont;

        printf("Digite uma sequencia de ate' %d caracteres:\n", MAXCARAC);
        gets(linha);
        printf("Digite um caracter a ser buscado na sequencia digitada:\n");
        scanf("%c", &caracter);

        cont = 0;
        for (i = 0; (i < TAM) && (linha[i] != '\0'); i++) {
                if (linha[i] == caracter) {
                        pos[cont] = i;
                        cont++;
                }
        }
        printf("O caracter '%c' aparece %d vezes.\n", caracter, cont);
        if (cont > 0) {
                printf("Nas posicoes: ");
                for (i = 0; i < cont; i++) {
                        printf("%d ", pos[i]);
                }
        }

        return 0;
}

L3ProgIIex03

/*******************************************************************************
  Autor         : Adriano Joaquim de Oliveira Cruz
  Data          : 10/05/1997
 ******************************************************************************/
/*      Definicoes */
#define DIM 80
#define VERDADE 1
#define FALSO 0
#define NAO !

/*      Bibliotecas usadas pelo programa */
#include <stdio.h>
#include <string.h>

int main ( ) {
    char palavra[3];
        char linha[DIM];                /* linha de caracteres */
        unsigned int pos=0;     /* posicao do caracter */

        puts("Entre com um linha de caracteres.\n");
        gets(linha);

        printf("\nEntre com uma palavra para ser procurada na linha.  ");
        gets(palavra);

        do {
                if (linha[pos] == palavra[0]) {
                        puts("pos 0 igual");
                if (linha[pos+1] == palavra[1]) {
                                printf("A palavra %s foi encontradan na posicao %d.\n",
                                 palavra, pos);
                         }
                 }
        } while (linha[++pos] != '\0');

        return 0;
}

L3ProgIIex04

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 26/09/2002
 ******************************************************************************/

#include <stdio.h>

#define MAXCARAC        40
#define TAM                     MAXCARAC + 1

int main ( ) {
        char linha[TAM];
        int  i, cont;
        char c;

        puts("Entre com uma linha de caracteres:");
        gets(linha);

        cont = 0;
        puts("Foram encontradas as vogais:");
        for (i = 0; (i < TAM) && (linha[i] != '\0'); i++) {
                c = linha[i];
                if ((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u') ){
                        cont++;
                        printf("%c ", c);
                }
        }
        printf("\n");
        if (i == TAM) {
                printf("Entrada invalida! Foram digitados mais de %d caracteres\n",
                        MAXCARAC);
        } else if (cont == 0) {
                puts("Nenhuma.");
        } else {
                printf("Foram encontradas %d vogais\n", cont);
        }

        return 0;
}

L3ProgIIex05

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 26/09/2002
 ******************************************************************************/

#include <stdio.h>

#define MAXCARAC        40
#define TAM                     MAXCARAC + 1

int main ( ) {
        char linha[TAM];
        int  i;

        puts("Entre com uma linha de caracteres (letra minuscula):");
        gets(linha);

        for (i = 0; (i < TAM) && (linha[i] != '\0'); i++) {
                if (linha[i] == 'z') {
                        linha[i] = 'a';
                } else {
                        linha[i] = linha[i] + 1;
                }
        }
        puts("Linha transformada:");
        puts(linha);

        return 0;
}

L3ProgIIex06

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 27/09/2002
 ******************************************************************************/

#include <stdio.h>

#define MAXCARAC        80
#define TAM                     MAXCARAC + 1

int main ( ) {
        char frase[TAM];
        char novaFrase[TAM];
        int  i, j;

        puts("Entre com uma frase com ate' 80 caracteres:");
        gets(frase);

        for (i = j = 0; (i < TAM) && (frase[i] != '\0'); i++) {
                if (frase[i] != ' ') {
                        novaFrase[j] = frase[i];
                        j++;
                }
        }
        puts("Nova frase:");
        puts(novaFrase);

        return 0;
}

L3ProgIIex07

/*******************************************************************************
  Autor         : Adriano Joaquim de Oliveira Cruz
  Data          : 24/04/1997
 ******************************************************************************/

/*      Definicoes */
#define DIM 3
#define VERDADE 1
#define FALSO 0
#define NAO !

/*      Bibliotecas usadas pelo programa */
#include <stdio.h>
#include <ctype.h>
#include <conio.h>

int main ( )
{
        char velha[DIM][DIM];           /* linha de caracteres */
        unsigned int i, j;
    int linha;
        char ch;

        printf("Entre com a matriz a ser verificada.\n");
        for (i=0; i<DIM; i++){
                for (j=0; j<DIM; j++){
                        printf("\nEntre com o elemento %d %d  ", i, j);
                        velha[i][j] = getche();
        }
    }

        printf("\nQuer verificar 0 ou X? ");
        ch = getchar();

        for (i=0; i<DIM; i++){
                for (j=0; j<DIM; j++){
                        printf("%c  ", velha[i][j]);
                }
                printf("\n");
    }


        for (i=0; i<DIM; i++){
                linha = VERDADE;
                for (j=0; j<DIM; j++){
                        if (velha[i][j] != ch) linha = FALSO;
                }
                if (linha) printf("A linha %d so contem %c.\n", i+1, ch);
    }

    return 0;
}

L3ProgIIex08

/*******************************************************************************
  Autor         : Adriano Joaquim de Oliveira Cruz
  Data          : 24/04/1997
 ******************************************************************************/

#include<stdio.h>
#include<conio.h>

#define DIM 8

int main(){
     int vetor[DIM];
     int pos, i, ultimo;
     int valor;

     clrscr();
     do {
        printf("Quantos elementos ?");
        scanf("%d", &ultimo);
     } while (ultimo > DIM);

     for (i=0; i<ultimo; i++){
         printf("Valor %d ? ", i); scanf("%d", &vetor[i]);
     }
     do {
        printf("Qual posicao? ");
        scanf("%d", &pos);
     } while (pos > ultimo);

     printf("Qual valor ? "); scanf("%d", &valor);

     printf("Antes da insercao\n");
     for (i=0; i<ultimo; i++)
         printf("Valor %d = %d \n", i, vetor[i]);


     for (i=ultimo-1; i>= pos; i--)
         vetor[i+1] = vetor[i];
     ultimo++;
     vetor[pos] = valor;
     printf("Depois da insercao\n");
     for (i=0; i<ultimo; i++)
         printf("Valor %d = %d \n", i, vetor[i]);

     getch();

     return 0;
}

L3ProgIIex09

/*******************************************************************************
  Autor         : Liviu Gabriel Anghel
  Data          : 15/05/2002
 ******************************************************************************/


/*      Bibliotecas usadas pelo programa */
#include <stdio.h>
#define MAX 31

int main()
{
        char str[MAX], copia[MAX];
        int i, compstr;

        printf("\n\nEntre com uma string (max 30 caracteres): ");
        gets(str);

        /* Determina o comprimento da string atraves
        de um for sem conteudo : ao final dele, compstr
        contem a posicao do '\0' da string*/

        for(compstr=0; str[compstr]; compstr++);

        /* Inverte a string */

        for(i=0; str[i]; i++)
        {
                copia[i] = str[compstr-i-1];   /* Linha em destaque */
        }
        copia[i] = '\0';                   /* coloca um finalizador na string */
        printf("\n\nString Invertida: %s\n", copia);
        return 0;
}

L3ProgIIex10

/*******************************************************************************
  Autor         : Sidney Batista Filho
  Data          : 27/09/2002
 ******************************************************************************/

#include <stdio.h>

#define ORDEM   3

int main ( ) {
                double a[ORDEM][ORDEM];
                double b[ORDEM][ORDEM];
                double produto[ORDEM][ORDEM];
                int i, j, k;

                printf("Calcular o produto de duas matrizes de ordem %d\n\n", ORDEM);
                puts("Entre com os elementos da matriz a:");
                for (i = 0; i < ORDEM; i++) {
                        for (j = 0; j < ORDEM; j++) {
                                printf("Elemento [%d][%d] = ", i, j);
                                scanf("%lf", &(a[i][j]) ); //Atencao: usar "%lf" para ler double
                        }
                }

                puts("Entre com os elementos da matriz b:");
                for (i = 0; i < ORDEM; i++) {
                        for (j = 0; j < ORDEM; j++) {
                                printf("Elemento [%d][%d] = ", i, j);
                                scanf("%lf", &b[i][j]);
                        }
                }

                //calcular o produto
                for (i = 0; i < ORDEM; i++) {
                        for (j = 0; j < ORDEM; j++) {
                                produto[i][j] = 0.0;
                                for (k = 0; k < ORDEM; k++) {
                                        produto[i][j] += a[i][k] * b[k][j];
                                }
                        }
                }

                //exibir matriz a
                puts("A matriz a e':");
                for (i = 0; i < ORDEM; i++) {
                        for (j = 0; j < ORDEM; j++) {
                                printf("%10.2f ", a[i][j]);
                        }
                        printf("\n");
                }
                //exibir matriz b
                puts("A matriz b e':");
                for (i = 0; i < ORDEM; i++) {
                        for (j = 0; j < ORDEM; j++) {
                                printf("%10.2f ", b[i][j]);
                        }
                        printf("\n");
                }

                //exibir o produto
                puts("O produto e':");
                for (i = 0; i < ORDEM; i++) {
                        for (j = 0; j < ORDEM; j++) {
                                printf("%10.2f ", produto[i][j]);
                        }
                        printf("\n");
                }

        return 0;
}

Por © Sidney Batista Filho - 05/06/2003