Tome familiaridade com as funções da linguagem C para alocação de memória. Para isto execute comado UNIX man malloc. Leia atentamente o texto para ter uma noção clara das funções existentes e como usá-las em um programa.
Analise e explique o que cada programa abaixo deve fazer. Depois disto, compile e execute cada um deles. Sua análise está de acordo com o comportamento observado? Troque idéias com os colegas ao seu lado e com o professor.
(lerdados) Faça um programa que obtenha do usuário 3 conjuntos de dados: um conjunto de inteiros, um conjunto de valores reais e uma frase. A quantidade de elementos a ser obtida em cada conjunto deve ser previamente fornecida pelo usuário. Antes de terminar, o programa deve apresentar na tela o que foi fornecido pelo usuário.
(matsoma) O programa mat_soma.c calcula a soma de duas matrizes 5x5 de números reais (double).
Mude a implementação deste programa de forma que a dimensão da matriz seja fornecida pelo usuário na
linha de comando e que a matriz seja representada no programa através de variáveis do tipo double ∗∗,
usando alocação dinâmica de memória.
Analise e explique o que cada programa abaixo deve fazer. Depois disto, compile e execute cada um deles. Sua análise está de acordo com o comportamento observado? Troque idéias com os colegas ao seu lado e com o professor.
(concat) Implemente uma função concat() que concatena 2 (dois) strings recebidos como argumentos. A função deve retornar um ponteiro para o string resultante da concatenação. O espaço para o resultado deve ser alocado dinamicamente pela função. Use ponteiros o máximo possível.
(contapalavras) Dado um conjunto de strings e uma palavra, determinar o número de vezes que a palavra ocorre em cada string. Se for indicada a palavra FIM, o programa deve terminar. Use apontadores e alocação dinâmica de memória em sua solução.
(gravatexto) Faça um programa que obtenha frases do usuário e as grave em um arquivo. Cada frase
pode ter qualquer tamanho e a gravação em arquivo deve ocorrer APENAS depois que o usuário fornecer
uma frase vazia.
(prntexto) Faça um programa que copie para a memória as frases lidas do arquivo produzido no
exercício 8 e as exiba convenientemente na tela.
(ordfrases) Faça um programa que receba um conjunto de frases do usuário. Após a entrada de todas as
frases, o programa deve ordená-las lexicograficamente (em ordem crescente) e apresentar o resultado na
tela.
O programa também deve tratar a opção -r quando passada como argumento do programa. Com esta
opção, o programa deve fazer a ordenação reversa. Use ponteiros e alocação dinâmica de
memória.
(mult_matrizes) Faça um programa que leia pares de matrizes de um arquivo e calcule o produto entre
elas. O resultado deve ser gravado em outro arquivo. O nome do arquivo de entrada de dados pode
opcionalmente ser fornecido pela linha de comando. Caso não seja fornecido, o nome default deste arquivo
é matriz.dat. O nome do arquivo de saída deve ser formado pela string res- seguida do nome do arquivo
de entrada (por exemplo, res-matriz.dat).
O arquivo de entrada (tipo ASCII) consiste de uma linha contendo a dimensão das matrizes a serem
multiplicadas, seguida das duas matrizes. Exemplo:
2 2 (dimensão do 1o conjunto de matrizes)
1 2 (1a matriz - 2x2)
3 7
7 8 (2a matriz - 2x2)
4 1
3 2 (dimensão do 2o conjunto de matrizes)
2 4 (1a matriz - 3x2)
9 2
4 3
0 2 7 (2a matriz - 2x3)
12 21 1
O arquivo de saída (também do tipo ASCII) deve conter a linha com a ordem da matriz, seguida do
resultado da multiplicação. O programa deve validar a entrada de dados antes de proceder aos cálculos. Use
ponteiros e alocação dinâmica de memória onde for necessário e eficiente.
(mult_matrizes_02) Refaça o Exercício 11 de forma que os arquivos de entrada e saída sejam
binários, isto é, o que está gravado são as representações dos valores em memória usadas pela linguagem
C. Caso o arquivo de entrada seja do tipo ASCII, a opção -f deve ser fornecida na linha de comando.
Os conjuntos de matrizes (ordem e as duas matrizes) devem ser todos lidos em memória antes de proceder
aos cálculos. Da mesma forma, a gravação dos resultados deve ser feita somente após terem sido
concluídos todos os cálculos. Quando o arquivo de entrada for do tipo ASCII, deve ser gerado o arquivo de
entrada do tipo binário correspondente. O formato do arquivo de entrada tipo ASCII tambem muda,
conforme abaixo:
2 2 (dimensão do 1o conjunto de matrizes)
1 2 (1a matriz - 2x2)
3 7
7 8 (2a matriz - 2x2)
4 1
3 2 (dimensão do 2o conjunto de matrizes)
2 4 (1a matriz - 3x2)
9 2
4 3
0 2 7 (2a matriz - 2x3)
12 21 1
3 2 2 (dimensão do 3o conjunto de matrizes)
2 4 (1a matriz - 3x2)
9 2
4 3
5 3 (2a matriz - 2x2)
12 2
(agenda) Integre as soluções dos programas grava_agenda e ler_agenda da lista #4 (exercícios 8 e 9) em um único programa, de forma que ao usuário seja possível inserir ítens na agenda, consultar endereços dado um NOME e salvar os dados em qualquer momento. O programa só termina se for digitada a letra Q para sair do programa. Além disso, não deve mais existir quaisquer limites na quantidade de ítens na agenda.
(mescla) Um programa recebe pela linha de comando nome de 2 arquivos de texto, e 3
pares de inteiros representando coordenadas (linha,caracter) em um arquivo de texto (ASCII).
Exemplo:
mescla texto-01 texto-02 19 21 3 12 8 46
O programa deve copiar um bloco de texto do 2o arquivo no 1o arquivo, a partir da coordenada
indicada no 1o par de inteiros, sobrescrevendo o conteúdo a partir desta posição. O bloco do
2o arquivo é definido pelos dois pares de coordenadas restantes. Após copiar o bloco, espaços
em branco devem ser preenchidos ao redor. Finalmente, o resultado deve ser salvo em um
3o arquivo, cujo nome é arbitrário, sendo que uma mensagem final do programa deve indicar este
nome.