\def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} } \def\tema{Linguagem C} \def\corpo{% Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C. Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR \htmladdnormallinkfoot{Marcos Castilho}{http://www.inf.ufpr.br/cursos/ci055/}, \htmladdnormallinkfoot{Ionildo Sanches}{http://br.geocities.com/ijsanches/programacao/download.htm} e \htmladdnormallinkfoot{Carmem Hara}{http://www.inf.ufpr.br/carmem/ci208/}. \vtab \section{Básicos} ~~ \exercise{Dado um número inteiro, calcular seu Fatorial.} \answer{\textsf{O fatorial de um número inteiro é definido como:\\[3mm] \htab \htab $n! = 1 * 2 * 3 * .... * (n-1) * n$ \\ \htab \htab $0! = 1$ \\ \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_01.c} \item Exemplo de código com erros: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02-erros.c} \item Solução 2: \htmladdnormallinkfoot{\textit{fatorial.c}}{../Programas/C/fatorial\_02.c} \end{itemize}}} \exercise{Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.} \answer{\textsf{A seqüência de Fibonnacci é definida como:\\[3mm] \htab \htab $fib(0) = 0$ \\ \htab \htab $fib(1) = 1$ \\ \htab \htab $fib(n) = fib(n-1) + fib(n-2)$ \\[3mm] ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,....... \\ Solução: \htmladdnormallinkfoot{\textit{fibonacci.c}}{../Programas/C/fibonacci\_01.c}}} \exercise{Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.} \exercise{Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.} \answer{\textsf{Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado: \begin{itemize} \item Solução 1: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_01-func.c} \item Solução 2: \htmladdnormallinkfoot{\textit{Critério = divisibilidade.}}{../Programas/C/primo\_02.c} \item Solução 3: \htmladdnormallinkfoot{\textit{Crivo de Eratóstenes.}}{../Programas/C/primo\_03-func.c} \end{itemize} }} \exercise{Dadas as declarações em linguagem C \begin{itemize} \item short int s = 10; \item int i = 25; \item long int l = 50L; \item float f = 0.5; \item double d = 1.5; \end{itemize}~\\ Qual seria o valor e tipo de cada uma das expressões abaixo: \begin{enumerate} \item f + s * i - 1 \item i / f + s * d \item i / s * f \item (double) i / s * f \item l / i + (int) d / f \end{enumerate} } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio dos valores de $A$, $B$ e $C$ do conjunto dos números reais. % A última linha informada ao sistema contém 3 (três) valores zero % (exemplo \mbox{0.0 0.0 0.0}).\\[3mm] Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $A$, $B$ e $C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite \textbf{\textit{T}} para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2\ordmasc grau.} \answer{\textsf{As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara: \htab \htab \[ x = \frac{-B \pm \sqrt{B^2 - 4AC}}{2A} . \] Sabe-se também que se o valor do Discriminante \textbf{$B^2 - 4AC$} for menor que 0 (zero), a equação não possui raízes reais.}} \exercise{Sabe-se \label{exerc:coseno} que o valor do coseno de $x$ radianos pode ser calculado pela série infinita abaixo: \htab \htab \[ \cos (x) = \sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} = \frac{x^0}{0!} - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \frac{x^8}{8!} - \cdots \] Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando WHILE.} \exercise{Resolva o exercício \ref{exerc:coseno} usando o comando DO...WHILE.} \exercise{Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.} \exercise{Afrânio tem um peso de 80 kg e está engordando uma média de 2 kg por ano. Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e está engordando uma média de 3 kg por ano. Faça um programa que calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa deve também imprimir qual será o peso de cada membro do casal ternura neste momento.} % \exercise{Dados dois números inteiros positivos determinar quantas % vezes o primeiro divide exatamente o segundo. Se o primeiro não % divide o segundo o número de vezes é zero.} % \exercise{Dados dois números inteiros positivos determinar o valor da % maior potência do primeiro que divide o segundo. Se o primeiro não % divide o segundo, a maior potência é definida igual a 1.} % \exercise{Dados dois números reais positivos determinar o quociente % inteiro do primeiro pelo segundo usando apenas os operadores % aritméticos reais.} % \exercise{Dado um número real positivo determinar sua parte inteira e % sua parte fracionária usando apenas os operadores aritméticos % reais.} % \exercise{Dado um número inteiro $N$, tabelar $N[k]$ para $k$ variando % de 1 até $N$. Considere que, por definição, \htab\htab \[ X[k] = % X(X-1)(X-2)(X-3) \cdots (X-k+1) , \] sendo $X$ um número real, $k$ um % natural diferente de zero e $X[0]=1$. Observe que se $X = N = k$, % então $N[N]=N!$.} \section{Vetores} ~~ \exercise{Foi \label{exerc:habitantes} realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.\\ Faça um programa em linguagem C que receba do usuário uma lista de dados \textit{(idade,sexo,salario,num\_filhos)} e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R\$ 500,00. Quando a $idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.\\ Use uma função para cada cálculo.} \answer{\textsf{\htmladdnormallinkfoot{Solução}{../Programas/C/Lista\_07-1.c}}} \exercise{Escreva \label{entraVetor} a função \textbf{obtem\_vetor()} que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.} \exercise{Escreva a função \textbf{conta\_ocorr()} que recebe 2 argumentos: o 1\ordmasc argumento é um vetor de caracteres e o 2\ordmasc argumento é um caracter. A função deve retornar como resultado o número de vezes o 2\ordmasc argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.} \exercise{Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.} \exercise{Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.} \exercise{Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.} \exercise{Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.} \exercise{Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.} \exercise{Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.} \exercise{Dados {\pf n+1} valores reais, {\pf a\_0, a\_1, ..., a\_n} representando os coeficientes de um polinômio de grau {\pf n}, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.} \exercise{Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício~\ref{entraVetor} para a leitura das 2 seqüências.} \section{Vetores e Matrizes} ~~ \exercise{Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:\\[3mm] \htab\htab {\pf V1: 7 3 2 6}\\ \htab\htab {\pf V2: 5 1 8 4 9}\\ \htab\htab {\pf Saída: 1 2 3 4 5 6 7 8 9}} % \exercise{Dados dois vetores X e Y, determinar o produto escalar desses % vetores.} \exercise{Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:\\[3mm] \htab\htab {\pf N=5}\\ \htab\htab {\pf 1 2 3 2 3}\\ \htab\htab {\pf a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:}\\ \htab\htab {\pf 1 1 vez}\\ \htab\htab {\pf 2 2 vezes}\\ \htab\htab {\pf 3 2 vezes}} \exercise{Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários: \begin{enumerate} \item imprimir o valor decimal dos números; \item calcular a soma de ambos (em binário); \item imprimir o valor decimal da soma. \end{enumerate}} % \exercise{Escreva um programa que atribui valores aleatórios a um % vetor com 200 elementos e ordene este vetor em ordem % crescente e decrescente. \textbf{DICA:} use a função % pré-definida \textbf{{\pf long int random(void)}}, que retorna um % valor aleatório cada vez que é chamada. Para usá-la deve-se ter no % início do programa \textbf{{\pf \#include $<$include stdlib.h$>$}}.} \exercise{Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.} \exercise{Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.} \exercise{Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.} \exercise{Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal.} \exercise{Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.} \section{Estruturas (struct) e Vetores de Estruturas} ~~ \exercise{Fazer \label{exer:agenda_01} um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).\\ O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.\\ Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa. } \exercise{Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma \[ Ax^2 + Bx + C = 0 . \] Cada linha de dados contém a definição de uma equação por meio da tupla de valores $A$, $B$ e $C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um \textit{array} de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:\\ \quad\quad\quad\textsf{A~~B~C~~=>~~X1~~=~~valor1~~~~X2~~=~~valor2}\\ ou\\ \quad\quad\quad\textsf{A~~B~C~~=>~~Sem raízes reais.}\\ Após a listagem de resultados o programa termina.} }