Você está na página 1de 4

SCC0120 – Introdução à Ciência da Computação

3a Lista de Exercı́cios
Matrizes, Ponteiros e Arquivos

Docente: Prof. Dr. Alneu de Andrade Lopes


Estagiários PAE: Roberto Alves Gueleri / Jorge Carlos Valverde Rebaza

14 de Junho de 2012

Matrizes
1. Faça um programa que receba dois números m e n e monte uma matriz mxn de
números inteiros, recebendo um a um cada um de seus valores. Assuma m ≤ 10 e n ≤ 10.
Depois, imprima todos os valores da matriz, em m linhas e n colunas.
2. Implemente a função transpor,
void transpor(float original[2][3], float resultado[3][2]);

cujo objetivo é transpor os elementos da matriz original e escrever o resultado na matriz


resultado. Elabore também uma versão generalizada dessa função, capaz de operar com
matrizes de tamanhos arbitrários.
3. Elabore funções que realizem a soma e a multiplicação de matrizes de tamanhos
arbitrários.
4. Elabore uma função que calcule o determinante de uma matriz quadrada de terceira
ordem (3x3). Procure utilizar estruturas de repetição.
5. Jogo da velha. O tabuleiro do jogo da velha pode ser representado por uma matriz
3x3. As posições ocupadas pelo primeiro jogador valem 1, as ocupadas pelo segundo
jogador valem 2 e as livres valem 0. Desse modo, implemente a função jogada,
int jogada(int jogador, int i, int j, int tabuleiro[3][3]);

cujo intuito é realizar uma jogada para jogador, na casa tabuleiro[i][j]. A função
retorna:
• 0: A jogada não pôde ser realizada, por exemplo, porque a casa já está ocupada.
• 1: A jogada foi realizada mas ainda não conduziu à vitória.
• 2: A jogada foi realizada e conduziu jogador à vitória.

1
Depois, crie um programa que utilize a função jogada e permita a realização de um jogo
entre dois jogadores, os quais alternam suas jogadas a partir do mesmo teclado.

Ponteiros
6. Implemente a função troca,
void troca(int *p, int *q);

cujo objetivo é trocar os valores apontados por p e q. Assim, o trecho


int a = 1, b = 2;
troca(&a, &b);
printf("a = %d, b = %d", a, b);

deverá imprimir a = 2, b = 1. Por que esta outra versão da função troca,


void troca(int p, int q);

não funcionaria, quando chamada através de troca(a, b)?


7. Ponteiros podem ser utilizados para informar a uma função onde ela deve armazenar
os resultados de seus cálculos. Elabore então uma função que receba uma quantidade
de segundos e a converta em horas-minutos-segundos. Notar que a função resulta em
três números distintos: horas, minutos e segundos. Depois, faça um pequeno programa
ilustrando o emprego desta função.
8. Implemente a função min_max,
void min_max(float *vetor, int n, float *min, float *max);

cujo objetivo é obter os valores mı́nimo e máximo de vetor, cujo tamanho é n. O resultado
será armazenado através dos ponteiros min e max. Depois, faça um pequeno programa
ilustrando o emprego desta função.
9. Considere o seguinte trecho:
int vet[] = {2, 4, 6, 8, 10};
int *ptr = vet;

Assumindo que cada variável do tipo int ocupa 4 bytes e que o endereço de vet[0] é
55000, qual o resultado de cada uma das expressões a seguir?
• vet + 3
• &vet[0] + 3
• ptr + 3
• ptr[0] + 3
• &ptr[0] + 3

2
• ptr[3]
• *(ptr + 3)
10. Considere o programa a seguir:
#include <stdio.h>

void main(void) {
int vet[] = {2, 4, 6, 8, 10};
int *ptr = vet;
int i;
ptr++;
*(ptr + 1) = 20;
ptr[2] = 30;
for (i = 0; i < 4; i++) printf("%d ", vet[i]);
printf("\n");
for (i = 0; i < 4; i++) printf("%d ", ptr[i]);
}

Qual é a saı́da escrita na tela por esse programa?


11. Na segunda lista de exercı́cios, foram trabalhadas as funções strcpy, strcat e
strcmp. Considere agora suas versões alternativas:
void strcpy(char *destination, char *source);
void strcat(char *destination, char *source);
int strcmp(char *str1, char *str2);

O que há de diferente nestas novas versões? As implementações anteriores ainda servem
para as novas versões? Por quê? Independentemente das implementações anteriores
funcionarem ou não, ofereça agora novas implementações, usando o conceito de ponteiros
e não mais ı́ndices de vetores. Procure compreender as diferenças e semelhanças entre os
conceitos de vetores e ponteiros.

Arquivos
12. Faça um programa capaz de copiar todo o conteúdo de um arquivo de texto noutro
arquivo de texto. Ou seja, o programa deve abrir um arquivo de texto existente e criar
um segundo arquivo de texto, cujo conteúdo será uma cópia do primeiro.
13. Faça um programa que inverta cada sı́mbolo de um arquivo de texto. Para isso, o
programa deve substituir todo sı́mbolo de código ASCII x por 255−x. Se for o caso, utilize
variáreis do tipo unsigned char ao invés de char para evitar problemas. O resultado da
inversão será gravado num segundo arquivo. Observar que a aplicação deste programa
sobre o arquivo invertido resultará novamente no arquivo original.
14. Faça um programa capaz de arquivar uma lista de alunos da USP. Cada aluno
é identificado por seu número USP e seu nome completo. O programa deve receber, a
partir do teclado, os alunos um a um. Seu número e seu nome vão sendo imediatamente

3
gravados no arquivo. A string "fim", quando fornecida pelo usuário, informa que a lista
terminou. Tal string não deve, contudo, entrar no arquivo. Considere arquivo de texto.
15. Faça um programa que adquira uma matriz proveniente de um arquivo de texto,
transponha essa matriz, e grave o resultado num segundo arquivo de texto. Assuma que
as matrizes sejam de números inteiros e não sejam maiores que 10x10. A convenção para
o arquivo é a seguinte: o primeiro número representa a quantidade de linhas, o segundo a
quantidade de colunas, seguindo-se então os elementos um a um. Por exemplo, o seguinte
arquivo representaria uma matriz 2x3:
2 3
10 20 30
40 50 60

O resultado de sua transposição seria:


3 2
10 40
20 50
30 60

Considere o emprego das funções fscanf e fprintf, ambas disponı́veis em stdio.h.


16. Faça um programa que monte uma matriz de números inteiros e a registre num
arquivo binário (ao invés de arquivo de texto). Os números de linhas e colunas devem
estar presentes no arquivo. Depois, faça um segundo programa capaz de abrir o arquivo
gerado pelo primeiro e imprimir a matriz na tela, dividida adequadamente em suas linhas
e colunas.

Você também pode gostar