7
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
9
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
3
Estrutura de Dados
PUC
21
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
3
Estrutura de Dados
PUC
9
Estrutura de Dados
PUC
Texto de pré-visualização
PUCMinas Ciência da Computação AED1 Estudo Dirigido 10 Tema Introdução à programação V Atividade Grupos de dados heterogêneos 01 Editar e salvar um esboço de programa em C cujo nome será Exemplo1001c para mostrar dados em arranjo Exemplo1010 v00 Author dependencias include ioh para definicoes proprias definicoes globais Definicao de tipo arranjo com inteiros baseado em estrutura typedef struct sintArray int length ints data int ix intArray Definicao de referencia para arranjo com inteiros baseado em estrutura typedef intArray refintArray newintArray Reservar espaco para arranjo com inteiros return referencia para arranjo com inteiros param n quantidade de datos refintArray newintArray int n reserva de espaco refintArray tmpArray refintArray malloc sizeofintArray estabelecer valores padroes if tmpArray NULL IOprintf ERRO Falta espaco else tmpArraylength 0 tmpArraydata NULL tmpArrayix 1 if n0 guardar a quantidade de dados tmpArraylength n reservar espaco para os dados tmpArraydata ints malloc n sizeofint definir indicador do primeiro elemento tmpArrayix 0 fim se fim se retornar referencia para espaco reservado return tmpArray fim freeintArray Dispensar espaco para arranjo com inteiros param tmpArray referencia para grupo de valores inteiros void freeintArray refintArray tmpArray testar se ha dados antes de reciclar o espaco if tmpArray NULL if tmpArraydata NULL free tmpArraydata fim se free tmpArray fim se fim freeintArray metodos Method00 nao faz nada void method00 nao faz nada fim method00 printIntArray Mostrar arranjo com valores inteiros param array grupo de valores inteiros void printIntArray intArray array mostrar valores no arranjo if arraydata for arrayix0 arrayixarraylength arrayixarrayix1 mostrar valor printf 2d d arrayix arraydata arrayix fim repetir fim se printIntArray Method01 Mostrar certa quantidade de valores void method01 definir dado intArray array montar arranjo em estrutura array length 5 array data ints malloc arraylength sizeofint testar a existência de dados if arraydata array data 0 1 array data 1 2 array data 2 3 array data 3 4 array data 4 5 fim se identificar IOid EXEMPLO1010 Method01 v00 executar o metodo auxiliar printIntArray array reciclar o espaco if arraydata free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method01 OBS As definições iniciais servirão para especificar um tipo de armazenador composto por vários tipos de dados os quais serão usados sempre em conjunto Um desses dados será a quantidade de valores armazenados outro uma referência para onde serão guardados e um terceiro para permitir o acesso a cada um desses valores Dois métodos acompanharão o uso desse novo tipo de armazenador o que servirá para proceder a reserva de espaço e estabelecer os valores iniciais construir a identidade e o que servirá para liberar e reciclar o espaço reservado quando esse não tiver mais utilidade para o programa 02 Compilar o programa Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo Em caso de dúvidas consultar a apostila recorrer aos monitores ou apresentálas ao professor 03 Executar o programa Observar as saídas Registrar os dados e os resultados 04 Copiar a versão atual do programa para outra nova Exemplo1002c 05 Editar mudanças no nome do programa e versão Acrescentar outro método para ler e guardar dados em arranjo Na parte principal incluir a chamada do método para testar o novo IOreadintArray Ler arranjo com valores inteiros return arranjo com valores lidos intArray IOreadintArray definir dados locais chars text IOnewchars STRSIZE static intArray array ler a quantidade de dados do arraylength IOreadint length while arraylength 0 reservar espaco para armazenar arraydata IOnewints arraylength testar se ha espaco if arraydata NULL arraylength 0 nao ha espaco else ler e guardar valores em arranjo for arrayix0 arrayixarraylength arrayixarrayix1 ler valor strcpy text STREMPTY arraydata arrayix IOreadint IOconcat IOconcat text IOtoStringd arrayix fim repetir fim se retornar arranjo return array IOreadintArray Method02 void method02 definir dados intArray array identificar IOid EXEMPLO1010 Method02 v00 ler dados array IOreadintArray testar a existência de dados if arraydata mostrar dados IOprintf printIntArray array reciclar o espaco free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method02 OBS Reparar que as definições para uso são mais simples que outras anteriormente apresentadas Uma definição estática static preservará a existência do dado fora do contexto de declaração Só poderá ser mostrado o arranjo em que existir algum conteúdo diferente de NULL inexistência de dados 06 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 07 Executar o programa Observar as saídas Registrar os dados e os resultados 08 Copiar a versão atual do programa para outra nova Exemplo1003c 09 Editar mudanças no nome do programa e versão Acrescentar outro método para gravar em arquivo dados no arranjo Na parte principal incluir a chamada do método para testar o novo fprintIntArray Gravar arranjo com valores inteiros param fileName nome do arquivo param array grupo de valores inteiros void fprintIntArray chars fileName intArray array definir dados locais FILE arquivo fopen fileName wt gravar quantidade de dados fprintf arquivo d arraylength gravar valores no arquivo se existirem if arraydata for arrayix0 arrayixarraylength arrayixarrayix1 gravar valor fprintf arquivo d arraydata arrayix fim repetir fim se fechar arquivo fclose arquivo fprintIntArray Method03 void method03 definir dados intArray array identificar IOid EXEMPLO0803 Method03 v00 ler dados array IOreadintArray testar a existência de dados if arraydata mostrar e gravar dados IOprintf printIntArray array fprintIntArray ARRAY1TXT array reciclar o espaco free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method03 OBS Se existir dados no arranjo original eles serão sobrescritos 10 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 11 Executar o programa Observar as saídas Registrar os dados e os resultados 12 Copiar a versão atual do programa para outra nova Exemplo1004c 13 Editar mudanças no nome do programa e versão Acrescentar outro método para ler arquivo e guardar dados em arranjo Na parte principal incluir a chamada do método para testar o novo freadArraySize Ler tamanho do arranjo com valores inteiros return quantidade de valores lidos param fileName nome do arquivo int freadArraySize chars fileName definir dados locais int n 0 FILE arquivo fopen fileName rt testar a existencia if arquivo ler a quantidade de dados fscanf arquivo d n if n 0 IOprintf ERRO Valor invalido n 0 fim se fclose arquivo fim se retornar dados lidos return n freadArraySize fIOreadintArray Ler arranjo com valores inteiros return arranjo com os valores lidos param fileName nome do arquivo param array grupo de valores inteiros intArray fIOreadintArray chars fileName definir dados locais int x 0 int y 0 FILE arquivo fopen fileName rt static intArray array testar a existencia if arquivo ler a quantidade de dados fscanf arquivo d arraylength testar se ha dados if arraylength 0 IOprintf ERRO Valor invalido arraylength 0 nao ha dados else reservar espaco arraydata IOnewints arraylength testar a existência if arraydata ler e guardar valores em arranjo arrayix 0 while feof arquivo arrayix arraylength ler valor fscanf arquivo d arraydata arrayix passar ao proximo arrayix arrayix 1 fim repetir fim se fim se fim se retornar dados lidos return array fIOreadintArray Method04 void method04 definir dados intArray array arranjo sem tamanho definido identificar IOid EXEMPLO1010 Method04 v00 ler dados array fIOreadintArray ARRAY1TXT testar a existência de dados if arraydata mostrar dados IOprintf printIntArray array reciclar o espaco free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method04 OBS Só poderá ser guardada a mesma quantidade de dados lida no início do arquivo se houver 14 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 15 Executar o programa Observar as saídas Registrar os dados e os resultados 16 Copiar a versão atual do programa para outra nova Exemplo1005c 17 Editar mudanças no nome do programa e versão Acrescentar um método para copiar dados de um arranjo para outro Na parte principal incluir a chamada do método para testar o novo copyIntArray Copiar arranjo com valores inteiros return referencia para copia do arranjo param fileName nome do arquivo param array grupo de valores inteiros refintArray copyIntArray intArray array definir dados locais int x 0 int y 0 refintArray copy if arraylength 0 IOprintf ERRO Valor invalido arraylength 0 else reservar area copy newintArray arraylength testar se ha descritor if copy copylength arraylength copydata IOnewints copylength testar se ha espaco e dados if copydata NULL arraydata NULL printf ERRO Falta espaco ou dados else ler e copiar valores for arrayix0 arrayixarraylength arrayixarrayix1 copiar valor copydata arrayix arraydata arrayix fim repetir fim se fim se fim se retornar dados lidos return copy copyIntArray Method05 void method05 definir dados intArray array arranjo sem tamanho definido refintArray other referencia para arranjo sem tamanho definido identificar IOid EXEMPLO1010 Method05 v00 ler dados array fIOreadintArray ARRAY1TXT copiar dados other copyIntArray array testar a existência de dados if arraydata mostrar dados IOprintf Original printIntArray array mostrar dados IOprintf Copia printIntArray other dereferenciar a copia reciclar os espacos free arraydata free otherdata free other fim se encerrar IOpause Apertar ENTER para continuar fim method05 OBS Só poderá ser copiada a mesma quantidade de dados se houver espaço suficiente 18 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 19 Executar o programa Observar as saídas Registrar os dados e os resultados 20 Copiar a versão atual do programa para outra nova Exemplo1006c 21 Editar mudanças no nome do programa e versão Acrescentar outra definição no início próxima à feita anteriormente para os arranjos Acrescentar um método para mostrar dados em arranjos bidimensionais matrizes Na parte principal incluir a chamada do método para testar o novo Definicao de tipo arranjo bidimensional com inteiros baseado em estrutura typedef struct sintMatrix int rows int columns ints data int ix iy intMatrix Definicao de referencia para arranjo bidimensional com inteiros baseado em estrutura typedef intMatrix refintMatrix newintMatrix Reservar espaco para arranjo bidimensional com inteiros return referencia para arranjo com inteiros param rows quantidade de dados param columns quantidade de dados refintMatrix newintMatrix int rows int columns reserva de espaco refintMatrix tmpMatrix refintMatrix malloc sizeofintMatrix estabelecer valores padroes if tmpMatrix NULL tmpMatrixrows 0 tmpMatrixcolumns 0 tmpMatrixdata NULL reservar espaco if rows0 columns0 tmpMatrixrows rows tmpMatrixcolumns columns tmpMatrixdata malloc rows sizeofints if tmpMatrixdata for tmpMatrixix0 tmpMatrixixtmpMatrixrows tmpMatrixixtmpMatrixix1 tmpMatrixdata tmpMatrixix ints malloc columns sizeofint fim repetir fim se fim se tmpMatrixix 0 tmpMatrixiy 0 fim se return tmpMatrix fim newintMatrix freeintMatrix Dispensar espaco para arranjo com inteiros param tmpMatrix referencia para grupo de valores inteiros void freeintMatrix refintMatrix matrix testar se ha dados if matrix NULL if matrixdata NULL for matrixix0 matrixixmatrixrows matrixixmatrixix1 free matrixdata matrixix fim repetir free matrixdata fim se free matrix fim se fim freeintMatrix metodos printIntMatrix Mostrar matrix com valores inteiros param array grupo de valores inteiros void printIntMatrix refintMatrix matrix testar a existencia if matrix NULL matrixdata NULL mostrar valores na matriz for matrixix0 matrixixmatrixrows matrixixmatrixix1 for matrixiy0 matrixiymatrixcolumns matrixiymatrixiy1 mostrar valor printf 3d matrixdata matrixix matrixiy fim repetir printf fim repetir fim se printIntArray Method06 void method06 definir dado refintMatrix matrix newintMatrix 3 3 if matrix NULL matrixdata NULL matrixdata 00 1 matrixdata 01 2 matrixdata 02 3 matrixdata 10 3 matrixdata 11 4 matrixdata 12 5 matrixdata 20 6 matrixdata 21 7 matrixdata 22 8 fim se identificar IOid EXEMPLO1010 Method06 v00 executar o metodo auxiliar printIntMatrix matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method06 OBS As definições iniciais servirão para especificar um tipo de armazenador composto por vários tipos de dados os quais serão usados sempre em conjunto tal como nos arranjos unidimensionais Dentre esses dados estarão a quantidade de linhas e de colunas uma referência para onde serão guardados e facilitadores para o acesso Dois métodos acompanharão o uso desse novo tipo de armazenador o que servirá para proceder a reserva de espaço e estabelecer os valores iniciais construir a identidade e o que servirá para liberar e reciclar o espaço reservado quando esse não tiver mais utilidade para o programa Destacase a necessidade de se lidar individualmente com cada linha de dados Diferente do exemplo com arranjo unidimensional destacase aqui também o uso da referência a necessidade da reserva de espaço e a liberação de seu uso para a reciclagem 22 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 23 Executar o programa Observar as saídas Registrar os dados e os resultados 24 Copiar a versão atual do programa para outra nova Exemplo1007c 25 Editar mudanças no nome do programa e versão Acrescentar uma função para ler e armazenar dados em arranjo bidimensional matriz Na parte principal incluir a chamada do método para testar a função IOreadintMatrix Ler arranjo bidimensional com valores inteiros return referencia para o grupo de valores inteiros refintMatrix IOreadintMatrix definir dados locais int rows 0 int columns 0 chars text IOnewchars STRSIZE ler a quantidade de dados do rows IOreadint rows while rows 0 do columns IOreadint columns while columns 0 reservar espaco para armazenar valores refintMatrix matrix newintMatrix rows columns testar se ha espaco if matrix NULL if matrixdata NULL nao ha espaco matrixrows 0 matrixcolumns 0 matrixix 0 matrixiy 0 else ler e guardar valores na matriz for matrixix0 matrixixmatrixrows matrixixmatrixix1 for matrixiy0 matrixiymatrixcolumns matrixiymatrixiy1 ler e guardar valor strcpy text STREMPTY matrixdata matrixix matrixiy IOreadint IOconcat IOconcat IOconcat text IOtoStringd matrixix IOconcat IOconcat text IOtoStringd matrixiy fim repetir printf fim repetir fim se fim se retornar dados lidos return matrix IOreadintMatrix Method07 void method07 definir dados refintMatrix matrix NULL identificar IOid EXEMPLO1010 Method07 v00 ler dados matrix IOreadintMatrix mostrar dados IOprintf printIntMatrix matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method07 OBS Diferente do exemplo com arranjo unidimensional destacase aqui o uso da referência 26 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 27 Executar o programa Observar as saídas Registrar os dados e os resultados 28 Copiar a versão atual do programa para outra nova Exemplo1008c 29 Editar mudanças no nome do programa e versão Acrescentar um método para gravar dados em matriz posição por posição Na parte principal incluir a chamada do método para testar o novo fprintIntMatrix Gravar arranjo bidimensional com valores inteiros param fileName nome do arquivo param matrix grupo de valores inteiros void fprintIntMatrix chars fileName refintMatrix matrix definir dados locais FILE arquivo fopen fileName wt testar se ha dados if matrix NULL printf ERRO Nao ha dados else gravar quantidade de dados fprintf arquivo d matrixrows fprintf arquivo d matrixcolumns if matrixdata NULL gravar valores no arquivo for matrixix0 matrixixmatrixrows matrixixmatrixix1 for matrixiy0 matrixiymatrixcolumns matrixiymatrixiy1 gravar valor fprintf arquivo d matrixdata matrixix matrixiy fim repetir fim repetir fim se fechar arquivo fclose arquivo fim se fprintIntMatrix Method08 void method08 definir dados refintMatrix matrix NULL identificar IOid EXEMPLO1010 Method08 v00 ler dados matrix IOreadintMatrix gravar dados fprintIntMatrix MATRIX1TXT matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method08 OBS Só poderão ser operados arranjos com mesma quantidade de dados 30 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 31 Executar o programa Observar as saídas Registrar os dados e os resultados 32 Copiar a versão atual do programa para outra nova Exemplo1009c 33 Editar mudanças no nome do programa e versão Acrescentar uma função para ler dados de arquivo para armazenar em matriz Na parte principal incluir a chamada do método para testar a função freadintMatrix Ler arranjo bidimensional com valores inteiros return referencia para o grupo de valores inteiros param fileName nome do arquivo refintMatrix freadintMatrix chars fileName definir dados locais refintMatrix matrix NULL int rows 0 int columns 0 FILE arquivo fopen fileName rt ler a quantidade de dados fscanf arquivo d rows fscanf arquivo d columns if rows 0 columns 0 IOprintf ERRO Valor invalido else reservar espaco para armazenar matrix newintMatrix rows columns testar se ha espaco if matrix NULL matrixdata NULL nao ha espaco matrixrows 0 matrixcolumns 0 matrixix 0 matrixiy 0 else testar a existência if matrix NULL ler e guardar valores na matriz matrixix 0 while feof arquivo matrixix matrixrows matrixiy 0 while feof arquivo matrixiy matrixcolumns guardar valor fscanf arquivo d matrixdata matrixix matrixiy passar ao proximo matrixiy matrixiy1 fim repetir passar ao proximo matrixix matrixix1 fim repetir matrixix 0 matrixiy 0 fim se fim se fim se retornar matriz lida return matrix fim freadintMatrix Method09 void method09 identificar IOid EXEMPLO1010 Method09 v00 ler dados refintMatrix matrix freadintMatrix MATRIX1TXT mostrar dados IOprintf printIntMatrix matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method09 OBS A leitura de dados foi utilizada na definição da referência para o armazenamento 34 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 35 Executar o programa Observar as saídas Registrar os dados e os resultados 36 Copiar a versão atual do programa para outra nova Exemplo1010c 37 Editar mudanças no nome do programa e versão Acrescentar uma função para copiar dados em uma estrutura semelhante à da matriz Na parte principal incluir a chamada do método para testar a função copyIntMatrix Copiar matriz com valores inteiros return referencia para o grupo de valores inteiros refintMatrix copyIntMatrix refintMatrix matrix definir dados locais refintMatrix copy NULL if matrix NULL matrixdata NULL IOprintf ERRO Faltam dados else if matrixrows 0 matrixcolumns 0 IOprintf ERRO Valor invalido else reservar espaco copy newintMatrix matrixrows matrixcolumns testar se ha espaco e dados if copy NULL copydata NULL printf ERRO Falta espaco else copiar valores for copyix 0 copyix copyrows copyix copyix 1 for copyiy 0 copyiy copycolumns copyiy copyiy 1 copiar valor copydata copyix copyiy matrixdata copyix copyiy fim repetir fim repetir fim se fim se fim se retornar copia return copy copyIntMatrix Method10 void method10 definir dados refintMatrix matrix NULL refintMatrix other NULL identificar IOid EXEMPLO1010 Method10 v00 ler dados matrix freadintMatrix MATRIX1TXT copiar dados other copyIntMatrix matrix mostrar dados IOprintf Original printIntMatrix matrix mostrar dados IOprintf Copia printIntMatrix other reciclar espaco freeintMatrix matrix freeintMatrix other encerrar IOpause Apertar ENTER para continuar fim method10 38 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 39 Executar o programa Observar as saídas Registrar os dados e os resultados Exercícios DICAS GERAIS Consultar o Anexo C 02 na apostila para outros exemplos Prever realizar e registrar todos os testes efetuados Integrar as chamadas de todos os programas em um só 01 Incluir um método Exemplo1011 para gerar um valor inteiro aleatoriamente dentro de um intervalo cujos limites de início e de fim serão recebidos como parâmetros Para para testar ler os limites do intervalo do teclado ler a quantidade de elementos N a serem gerados gerar essa quantidade N de valores aleatórios dentro do intervalo e armazenálos em arranjo graválos um por linha em um arquivo DADOSTXT A primeira linha do arquivo deverá informar a quantidade de números aleatórios N que serão gravados em seguida DICA Usar a função rand mas tentar limitar valores muito grandes Exemplo valor gerarRandomInt inferior superior 02 Incluir uma função Exemplo1012 para procurar certo valor inteiro em um arranjo Para testar receber um nome de arquivo como parâmetro e aplicar a função sobre o arranjo com os valores lidos Exemplo arranjo lerArquivo DADOSTXT resposta procurar valor arranjo 03 Incluir uma função Exemplo1013 para operar a comparação de dois arranjos Para testar receber dados de arquivos e aplicar a função sobre os arranjos com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo arranjo1 lerArquivo DADOS1TXT arranjo2 lerArquivo DADOS2TXT resposta comparar arranjo1 arranjo2 04 Incluir uma função Exemplo1014 para operar a soma de dois arranjos com o segundo escalado por uma constante Para testar receber dados de arquivos e aplicar a função sobre os arranjos com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo arranjo1 lerArquivo DADOS1TXT arranjo2 lerArquivo DADOS2TXT soma somar arranjo1 1 arranjo2 05 Incluir uma função Exemplo1015 para dizer se um arranjo está em ordem crescente Para testar receber um nome de arquivo como parâmetro e aplicar a função sobre o arranjo com os valores lidos Exemplo arranjo1 lerArquivo DADOS1TXT resposta crescente arranjo 06 Incluir uma função Exemplo1016 para obter a transposta de uma matriz Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 transpostaMatriz matriz1 07 Incluir uma função Exemplo1017 para testar se uma matriz só contém valores iguais a zero Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT resposta zeroMatriz matriz1 08 Incluir uma função Exemplo1018 para testar a igualdade de duas matrizes Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT resposta compararMatriz matriz1 matriz2 09 Incluir uma função Exemplo1019 para operar a soma de duas matrizes com a segunda escalado por uma constante Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT soma somarMatriz matriz1 1 matriz2 10 Incluir uma função Exemplo1020 para obter o produto de duas matrizes Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT soma multiplicarMatriz matriz1 matriz2 Tarefas extras E1 Incluir uma função Exemplo10E1 para colocar um arranjo em ordem decrescente pelo método de trocas de posição Para testar receber um nome de arquivo como parâmetro e aplicar a função sobre o arranjo com os valores lidos Exemplo arranjo1 lerArquivo DADOS1TXT ordenado ordenar arranjo E2 Incluir uma função Exemplo10E2 para testar se o produto de duas matrizes é igual à matriz identidade Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT resposta identidadeMatriz multiplicar matriz1 matriz2
7
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
9
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
3
Estrutura de Dados
PUC
21
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
1
Estrutura de Dados
PUC
3
Estrutura de Dados
PUC
9
Estrutura de Dados
PUC
Texto de pré-visualização
PUCMinas Ciência da Computação AED1 Estudo Dirigido 10 Tema Introdução à programação V Atividade Grupos de dados heterogêneos 01 Editar e salvar um esboço de programa em C cujo nome será Exemplo1001c para mostrar dados em arranjo Exemplo1010 v00 Author dependencias include ioh para definicoes proprias definicoes globais Definicao de tipo arranjo com inteiros baseado em estrutura typedef struct sintArray int length ints data int ix intArray Definicao de referencia para arranjo com inteiros baseado em estrutura typedef intArray refintArray newintArray Reservar espaco para arranjo com inteiros return referencia para arranjo com inteiros param n quantidade de datos refintArray newintArray int n reserva de espaco refintArray tmpArray refintArray malloc sizeofintArray estabelecer valores padroes if tmpArray NULL IOprintf ERRO Falta espaco else tmpArraylength 0 tmpArraydata NULL tmpArrayix 1 if n0 guardar a quantidade de dados tmpArraylength n reservar espaco para os dados tmpArraydata ints malloc n sizeofint definir indicador do primeiro elemento tmpArrayix 0 fim se fim se retornar referencia para espaco reservado return tmpArray fim freeintArray Dispensar espaco para arranjo com inteiros param tmpArray referencia para grupo de valores inteiros void freeintArray refintArray tmpArray testar se ha dados antes de reciclar o espaco if tmpArray NULL if tmpArraydata NULL free tmpArraydata fim se free tmpArray fim se fim freeintArray metodos Method00 nao faz nada void method00 nao faz nada fim method00 printIntArray Mostrar arranjo com valores inteiros param array grupo de valores inteiros void printIntArray intArray array mostrar valores no arranjo if arraydata for arrayix0 arrayixarraylength arrayixarrayix1 mostrar valor printf 2d d arrayix arraydata arrayix fim repetir fim se printIntArray Method01 Mostrar certa quantidade de valores void method01 definir dado intArray array montar arranjo em estrutura array length 5 array data ints malloc arraylength sizeofint testar a existência de dados if arraydata array data 0 1 array data 1 2 array data 2 3 array data 3 4 array data 4 5 fim se identificar IOid EXEMPLO1010 Method01 v00 executar o metodo auxiliar printIntArray array reciclar o espaco if arraydata free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method01 OBS As definições iniciais servirão para especificar um tipo de armazenador composto por vários tipos de dados os quais serão usados sempre em conjunto Um desses dados será a quantidade de valores armazenados outro uma referência para onde serão guardados e um terceiro para permitir o acesso a cada um desses valores Dois métodos acompanharão o uso desse novo tipo de armazenador o que servirá para proceder a reserva de espaço e estabelecer os valores iniciais construir a identidade e o que servirá para liberar e reciclar o espaço reservado quando esse não tiver mais utilidade para o programa 02 Compilar o programa Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo Em caso de dúvidas consultar a apostila recorrer aos monitores ou apresentálas ao professor 03 Executar o programa Observar as saídas Registrar os dados e os resultados 04 Copiar a versão atual do programa para outra nova Exemplo1002c 05 Editar mudanças no nome do programa e versão Acrescentar outro método para ler e guardar dados em arranjo Na parte principal incluir a chamada do método para testar o novo IOreadintArray Ler arranjo com valores inteiros return arranjo com valores lidos intArray IOreadintArray definir dados locais chars text IOnewchars STRSIZE static intArray array ler a quantidade de dados do arraylength IOreadint length while arraylength 0 reservar espaco para armazenar arraydata IOnewints arraylength testar se ha espaco if arraydata NULL arraylength 0 nao ha espaco else ler e guardar valores em arranjo for arrayix0 arrayixarraylength arrayixarrayix1 ler valor strcpy text STREMPTY arraydata arrayix IOreadint IOconcat IOconcat text IOtoStringd arrayix fim repetir fim se retornar arranjo return array IOreadintArray Method02 void method02 definir dados intArray array identificar IOid EXEMPLO1010 Method02 v00 ler dados array IOreadintArray testar a existência de dados if arraydata mostrar dados IOprintf printIntArray array reciclar o espaco free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method02 OBS Reparar que as definições para uso são mais simples que outras anteriormente apresentadas Uma definição estática static preservará a existência do dado fora do contexto de declaração Só poderá ser mostrado o arranjo em que existir algum conteúdo diferente de NULL inexistência de dados 06 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 07 Executar o programa Observar as saídas Registrar os dados e os resultados 08 Copiar a versão atual do programa para outra nova Exemplo1003c 09 Editar mudanças no nome do programa e versão Acrescentar outro método para gravar em arquivo dados no arranjo Na parte principal incluir a chamada do método para testar o novo fprintIntArray Gravar arranjo com valores inteiros param fileName nome do arquivo param array grupo de valores inteiros void fprintIntArray chars fileName intArray array definir dados locais FILE arquivo fopen fileName wt gravar quantidade de dados fprintf arquivo d arraylength gravar valores no arquivo se existirem if arraydata for arrayix0 arrayixarraylength arrayixarrayix1 gravar valor fprintf arquivo d arraydata arrayix fim repetir fim se fechar arquivo fclose arquivo fprintIntArray Method03 void method03 definir dados intArray array identificar IOid EXEMPLO0803 Method03 v00 ler dados array IOreadintArray testar a existência de dados if arraydata mostrar e gravar dados IOprintf printIntArray array fprintIntArray ARRAY1TXT array reciclar o espaco free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method03 OBS Se existir dados no arranjo original eles serão sobrescritos 10 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 11 Executar o programa Observar as saídas Registrar os dados e os resultados 12 Copiar a versão atual do programa para outra nova Exemplo1004c 13 Editar mudanças no nome do programa e versão Acrescentar outro método para ler arquivo e guardar dados em arranjo Na parte principal incluir a chamada do método para testar o novo freadArraySize Ler tamanho do arranjo com valores inteiros return quantidade de valores lidos param fileName nome do arquivo int freadArraySize chars fileName definir dados locais int n 0 FILE arquivo fopen fileName rt testar a existencia if arquivo ler a quantidade de dados fscanf arquivo d n if n 0 IOprintf ERRO Valor invalido n 0 fim se fclose arquivo fim se retornar dados lidos return n freadArraySize fIOreadintArray Ler arranjo com valores inteiros return arranjo com os valores lidos param fileName nome do arquivo param array grupo de valores inteiros intArray fIOreadintArray chars fileName definir dados locais int x 0 int y 0 FILE arquivo fopen fileName rt static intArray array testar a existencia if arquivo ler a quantidade de dados fscanf arquivo d arraylength testar se ha dados if arraylength 0 IOprintf ERRO Valor invalido arraylength 0 nao ha dados else reservar espaco arraydata IOnewints arraylength testar a existência if arraydata ler e guardar valores em arranjo arrayix 0 while feof arquivo arrayix arraylength ler valor fscanf arquivo d arraydata arrayix passar ao proximo arrayix arrayix 1 fim repetir fim se fim se fim se retornar dados lidos return array fIOreadintArray Method04 void method04 definir dados intArray array arranjo sem tamanho definido identificar IOid EXEMPLO1010 Method04 v00 ler dados array fIOreadintArray ARRAY1TXT testar a existência de dados if arraydata mostrar dados IOprintf printIntArray array reciclar o espaco free arraydata fim se encerrar IOpause Apertar ENTER para continuar fim method04 OBS Só poderá ser guardada a mesma quantidade de dados lida no início do arquivo se houver 14 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 15 Executar o programa Observar as saídas Registrar os dados e os resultados 16 Copiar a versão atual do programa para outra nova Exemplo1005c 17 Editar mudanças no nome do programa e versão Acrescentar um método para copiar dados de um arranjo para outro Na parte principal incluir a chamada do método para testar o novo copyIntArray Copiar arranjo com valores inteiros return referencia para copia do arranjo param fileName nome do arquivo param array grupo de valores inteiros refintArray copyIntArray intArray array definir dados locais int x 0 int y 0 refintArray copy if arraylength 0 IOprintf ERRO Valor invalido arraylength 0 else reservar area copy newintArray arraylength testar se ha descritor if copy copylength arraylength copydata IOnewints copylength testar se ha espaco e dados if copydata NULL arraydata NULL printf ERRO Falta espaco ou dados else ler e copiar valores for arrayix0 arrayixarraylength arrayixarrayix1 copiar valor copydata arrayix arraydata arrayix fim repetir fim se fim se fim se retornar dados lidos return copy copyIntArray Method05 void method05 definir dados intArray array arranjo sem tamanho definido refintArray other referencia para arranjo sem tamanho definido identificar IOid EXEMPLO1010 Method05 v00 ler dados array fIOreadintArray ARRAY1TXT copiar dados other copyIntArray array testar a existência de dados if arraydata mostrar dados IOprintf Original printIntArray array mostrar dados IOprintf Copia printIntArray other dereferenciar a copia reciclar os espacos free arraydata free otherdata free other fim se encerrar IOpause Apertar ENTER para continuar fim method05 OBS Só poderá ser copiada a mesma quantidade de dados se houver espaço suficiente 18 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 19 Executar o programa Observar as saídas Registrar os dados e os resultados 20 Copiar a versão atual do programa para outra nova Exemplo1006c 21 Editar mudanças no nome do programa e versão Acrescentar outra definição no início próxima à feita anteriormente para os arranjos Acrescentar um método para mostrar dados em arranjos bidimensionais matrizes Na parte principal incluir a chamada do método para testar o novo Definicao de tipo arranjo bidimensional com inteiros baseado em estrutura typedef struct sintMatrix int rows int columns ints data int ix iy intMatrix Definicao de referencia para arranjo bidimensional com inteiros baseado em estrutura typedef intMatrix refintMatrix newintMatrix Reservar espaco para arranjo bidimensional com inteiros return referencia para arranjo com inteiros param rows quantidade de dados param columns quantidade de dados refintMatrix newintMatrix int rows int columns reserva de espaco refintMatrix tmpMatrix refintMatrix malloc sizeofintMatrix estabelecer valores padroes if tmpMatrix NULL tmpMatrixrows 0 tmpMatrixcolumns 0 tmpMatrixdata NULL reservar espaco if rows0 columns0 tmpMatrixrows rows tmpMatrixcolumns columns tmpMatrixdata malloc rows sizeofints if tmpMatrixdata for tmpMatrixix0 tmpMatrixixtmpMatrixrows tmpMatrixixtmpMatrixix1 tmpMatrixdata tmpMatrixix ints malloc columns sizeofint fim repetir fim se fim se tmpMatrixix 0 tmpMatrixiy 0 fim se return tmpMatrix fim newintMatrix freeintMatrix Dispensar espaco para arranjo com inteiros param tmpMatrix referencia para grupo de valores inteiros void freeintMatrix refintMatrix matrix testar se ha dados if matrix NULL if matrixdata NULL for matrixix0 matrixixmatrixrows matrixixmatrixix1 free matrixdata matrixix fim repetir free matrixdata fim se free matrix fim se fim freeintMatrix metodos printIntMatrix Mostrar matrix com valores inteiros param array grupo de valores inteiros void printIntMatrix refintMatrix matrix testar a existencia if matrix NULL matrixdata NULL mostrar valores na matriz for matrixix0 matrixixmatrixrows matrixixmatrixix1 for matrixiy0 matrixiymatrixcolumns matrixiymatrixiy1 mostrar valor printf 3d matrixdata matrixix matrixiy fim repetir printf fim repetir fim se printIntArray Method06 void method06 definir dado refintMatrix matrix newintMatrix 3 3 if matrix NULL matrixdata NULL matrixdata 00 1 matrixdata 01 2 matrixdata 02 3 matrixdata 10 3 matrixdata 11 4 matrixdata 12 5 matrixdata 20 6 matrixdata 21 7 matrixdata 22 8 fim se identificar IOid EXEMPLO1010 Method06 v00 executar o metodo auxiliar printIntMatrix matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method06 OBS As definições iniciais servirão para especificar um tipo de armazenador composto por vários tipos de dados os quais serão usados sempre em conjunto tal como nos arranjos unidimensionais Dentre esses dados estarão a quantidade de linhas e de colunas uma referência para onde serão guardados e facilitadores para o acesso Dois métodos acompanharão o uso desse novo tipo de armazenador o que servirá para proceder a reserva de espaço e estabelecer os valores iniciais construir a identidade e o que servirá para liberar e reciclar o espaço reservado quando esse não tiver mais utilidade para o programa Destacase a necessidade de se lidar individualmente com cada linha de dados Diferente do exemplo com arranjo unidimensional destacase aqui também o uso da referência a necessidade da reserva de espaço e a liberação de seu uso para a reciclagem 22 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 23 Executar o programa Observar as saídas Registrar os dados e os resultados 24 Copiar a versão atual do programa para outra nova Exemplo1007c 25 Editar mudanças no nome do programa e versão Acrescentar uma função para ler e armazenar dados em arranjo bidimensional matriz Na parte principal incluir a chamada do método para testar a função IOreadintMatrix Ler arranjo bidimensional com valores inteiros return referencia para o grupo de valores inteiros refintMatrix IOreadintMatrix definir dados locais int rows 0 int columns 0 chars text IOnewchars STRSIZE ler a quantidade de dados do rows IOreadint rows while rows 0 do columns IOreadint columns while columns 0 reservar espaco para armazenar valores refintMatrix matrix newintMatrix rows columns testar se ha espaco if matrix NULL if matrixdata NULL nao ha espaco matrixrows 0 matrixcolumns 0 matrixix 0 matrixiy 0 else ler e guardar valores na matriz for matrixix0 matrixixmatrixrows matrixixmatrixix1 for matrixiy0 matrixiymatrixcolumns matrixiymatrixiy1 ler e guardar valor strcpy text STREMPTY matrixdata matrixix matrixiy IOreadint IOconcat IOconcat IOconcat text IOtoStringd matrixix IOconcat IOconcat text IOtoStringd matrixiy fim repetir printf fim repetir fim se fim se retornar dados lidos return matrix IOreadintMatrix Method07 void method07 definir dados refintMatrix matrix NULL identificar IOid EXEMPLO1010 Method07 v00 ler dados matrix IOreadintMatrix mostrar dados IOprintf printIntMatrix matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method07 OBS Diferente do exemplo com arranjo unidimensional destacase aqui o uso da referência 26 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 27 Executar o programa Observar as saídas Registrar os dados e os resultados 28 Copiar a versão atual do programa para outra nova Exemplo1008c 29 Editar mudanças no nome do programa e versão Acrescentar um método para gravar dados em matriz posição por posição Na parte principal incluir a chamada do método para testar o novo fprintIntMatrix Gravar arranjo bidimensional com valores inteiros param fileName nome do arquivo param matrix grupo de valores inteiros void fprintIntMatrix chars fileName refintMatrix matrix definir dados locais FILE arquivo fopen fileName wt testar se ha dados if matrix NULL printf ERRO Nao ha dados else gravar quantidade de dados fprintf arquivo d matrixrows fprintf arquivo d matrixcolumns if matrixdata NULL gravar valores no arquivo for matrixix0 matrixixmatrixrows matrixixmatrixix1 for matrixiy0 matrixiymatrixcolumns matrixiymatrixiy1 gravar valor fprintf arquivo d matrixdata matrixix matrixiy fim repetir fim repetir fim se fechar arquivo fclose arquivo fim se fprintIntMatrix Method08 void method08 definir dados refintMatrix matrix NULL identificar IOid EXEMPLO1010 Method08 v00 ler dados matrix IOreadintMatrix gravar dados fprintIntMatrix MATRIX1TXT matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method08 OBS Só poderão ser operados arranjos com mesma quantidade de dados 30 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 31 Executar o programa Observar as saídas Registrar os dados e os resultados 32 Copiar a versão atual do programa para outra nova Exemplo1009c 33 Editar mudanças no nome do programa e versão Acrescentar uma função para ler dados de arquivo para armazenar em matriz Na parte principal incluir a chamada do método para testar a função freadintMatrix Ler arranjo bidimensional com valores inteiros return referencia para o grupo de valores inteiros param fileName nome do arquivo refintMatrix freadintMatrix chars fileName definir dados locais refintMatrix matrix NULL int rows 0 int columns 0 FILE arquivo fopen fileName rt ler a quantidade de dados fscanf arquivo d rows fscanf arquivo d columns if rows 0 columns 0 IOprintf ERRO Valor invalido else reservar espaco para armazenar matrix newintMatrix rows columns testar se ha espaco if matrix NULL matrixdata NULL nao ha espaco matrixrows 0 matrixcolumns 0 matrixix 0 matrixiy 0 else testar a existência if matrix NULL ler e guardar valores na matriz matrixix 0 while feof arquivo matrixix matrixrows matrixiy 0 while feof arquivo matrixiy matrixcolumns guardar valor fscanf arquivo d matrixdata matrixix matrixiy passar ao proximo matrixiy matrixiy1 fim repetir passar ao proximo matrixix matrixix1 fim repetir matrixix 0 matrixiy 0 fim se fim se fim se retornar matriz lida return matrix fim freadintMatrix Method09 void method09 identificar IOid EXEMPLO1010 Method09 v00 ler dados refintMatrix matrix freadintMatrix MATRIX1TXT mostrar dados IOprintf printIntMatrix matrix reciclar espaco freeintMatrix matrix encerrar IOpause Apertar ENTER para continuar fim method09 OBS A leitura de dados foi utilizada na definição da referência para o armazenamento 34 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 35 Executar o programa Observar as saídas Registrar os dados e os resultados 36 Copiar a versão atual do programa para outra nova Exemplo1010c 37 Editar mudanças no nome do programa e versão Acrescentar uma função para copiar dados em uma estrutura semelhante à da matriz Na parte principal incluir a chamada do método para testar a função copyIntMatrix Copiar matriz com valores inteiros return referencia para o grupo de valores inteiros refintMatrix copyIntMatrix refintMatrix matrix definir dados locais refintMatrix copy NULL if matrix NULL matrixdata NULL IOprintf ERRO Faltam dados else if matrixrows 0 matrixcolumns 0 IOprintf ERRO Valor invalido else reservar espaco copy newintMatrix matrixrows matrixcolumns testar se ha espaco e dados if copy NULL copydata NULL printf ERRO Falta espaco else copiar valores for copyix 0 copyix copyrows copyix copyix 1 for copyiy 0 copyiy copycolumns copyiy copyiy 1 copiar valor copydata copyix copyiy matrixdata copyix copyiy fim repetir fim repetir fim se fim se fim se retornar copia return copy copyIntMatrix Method10 void method10 definir dados refintMatrix matrix NULL refintMatrix other NULL identificar IOid EXEMPLO1010 Method10 v00 ler dados matrix freadintMatrix MATRIX1TXT copiar dados other copyIntMatrix matrix mostrar dados IOprintf Original printIntMatrix matrix mostrar dados IOprintf Copia printIntMatrix other reciclar espaco freeintMatrix matrix freeintMatrix other encerrar IOpause Apertar ENTER para continuar fim method10 38 Compilar o programa novamente Se houver erros resolvêlos e compilar novamente até que todos tenham sido resolvidos Se não houver erros seguir para o próximo passo 39 Executar o programa Observar as saídas Registrar os dados e os resultados Exercícios DICAS GERAIS Consultar o Anexo C 02 na apostila para outros exemplos Prever realizar e registrar todos os testes efetuados Integrar as chamadas de todos os programas em um só 01 Incluir um método Exemplo1011 para gerar um valor inteiro aleatoriamente dentro de um intervalo cujos limites de início e de fim serão recebidos como parâmetros Para para testar ler os limites do intervalo do teclado ler a quantidade de elementos N a serem gerados gerar essa quantidade N de valores aleatórios dentro do intervalo e armazenálos em arranjo graválos um por linha em um arquivo DADOSTXT A primeira linha do arquivo deverá informar a quantidade de números aleatórios N que serão gravados em seguida DICA Usar a função rand mas tentar limitar valores muito grandes Exemplo valor gerarRandomInt inferior superior 02 Incluir uma função Exemplo1012 para procurar certo valor inteiro em um arranjo Para testar receber um nome de arquivo como parâmetro e aplicar a função sobre o arranjo com os valores lidos Exemplo arranjo lerArquivo DADOSTXT resposta procurar valor arranjo 03 Incluir uma função Exemplo1013 para operar a comparação de dois arranjos Para testar receber dados de arquivos e aplicar a função sobre os arranjos com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo arranjo1 lerArquivo DADOS1TXT arranjo2 lerArquivo DADOS2TXT resposta comparar arranjo1 arranjo2 04 Incluir uma função Exemplo1014 para operar a soma de dois arranjos com o segundo escalado por uma constante Para testar receber dados de arquivos e aplicar a função sobre os arranjos com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo arranjo1 lerArquivo DADOS1TXT arranjo2 lerArquivo DADOS2TXT soma somar arranjo1 1 arranjo2 05 Incluir uma função Exemplo1015 para dizer se um arranjo está em ordem crescente Para testar receber um nome de arquivo como parâmetro e aplicar a função sobre o arranjo com os valores lidos Exemplo arranjo1 lerArquivo DADOS1TXT resposta crescente arranjo 06 Incluir uma função Exemplo1016 para obter a transposta de uma matriz Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 transpostaMatriz matriz1 07 Incluir uma função Exemplo1017 para testar se uma matriz só contém valores iguais a zero Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT resposta zeroMatriz matriz1 08 Incluir uma função Exemplo1018 para testar a igualdade de duas matrizes Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT resposta compararMatriz matriz1 matriz2 09 Incluir uma função Exemplo1019 para operar a soma de duas matrizes com a segunda escalado por uma constante Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT soma somarMatriz matriz1 1 matriz2 10 Incluir uma função Exemplo1020 para obter o produto de duas matrizes Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT soma multiplicarMatriz matriz1 matriz2 Tarefas extras E1 Incluir uma função Exemplo10E1 para colocar um arranjo em ordem decrescente pelo método de trocas de posição Para testar receber um nome de arquivo como parâmetro e aplicar a função sobre o arranjo com os valores lidos Exemplo arranjo1 lerArquivo DADOS1TXT ordenado ordenar arranjo E2 Incluir uma função Exemplo10E2 para testar se o produto de duas matrizes é igual à matriz identidade Para testar receber dados de arquivos e aplicar a função sobre as matrizes com os valores lidos DICA Verificar se os tamanhos são compatíveis Exemplo matriz1 lerMatrizDeArquivo DADOS1TXT matriz2 lerMatrizDeArquivo DADOS2TXT resposta identidadeMatriz multiplicar matriz1 matriz2