7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da...

39
1 Unesp – Campus de Guaratinguetá 7. Dados Estruturados 7. Dados Estruturados Vetores , Matrizes e Vetores , Matrizes e Strings Strings Curso: Programação de Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 2 Array - Definição Vetor ou Array é a forma mais familiar de dados estruturados. Um array é um conjunto de componentes do mesmo tipo, que podem ser acessados individualmente a partir de um único nome. 7.1 Dados Estruturados: 7.1 Dados Estruturados: Array Array 3 Dada uma relação de 5 estudantes, imprimir o numero de matricula de cada estudante, cuja nota é maior do que a média da classe. 7.1 7.1 Array Array - - Problema 4 1 o . Algoritmo Início algoritmo Leia(num1,nota1,num2,nota2,num3,nota3,num4, nota4,num5,nota5) media (nota1+nota2+nota3+nota4+nota5) / 5.0 Se nota1 > media então escreva (num1) Se nota2 > media então escreva (num2) Se nota3 > media então escreva (num3) Se nota4 > media então escreva (num4) Se nota5 > media então escreva (num5) Fim algoritmo 7.1 7.1 Array Array - - Problema

Transcript of 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da...

Page 1: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

1

Unesp – Campus de Guaratinguetá

7. Dados Estruturados7. Dados EstruturadosVetores , Matrizes e Vetores , Matrizes e StringsStrings

Curso: Programação de Computadores

Prof. Aníbal Tavares

Profa. Cassilda Ribeiro

2

Array - Definição

� Vetor ou Array é a forma mais familiar de

dados estruturados.

� Um array é um conjunto de componentes do

mesmo tipo, que podem ser acessados

individualmente a partir de um único nome.

7.1 Dados Estruturados: 7.1 Dados Estruturados: ArrayArray

3

Dada uma relação de 5

estudantes, imprimir o

numero de matricula de cada

estudante, cuja nota é maior

do que a média da classe.

7.1 7.1 ArrayArray -- Problema

4

1o. Algoritmo

Início algoritmo

Leia(num1,nota1,num2,nota2,num3,nota3,num4,nota4,num5,nota5)

media ← (nota1+nota2+nota3+nota4+nota5) / 5.0

Se nota1 > media então escreva (num1)

Se nota2 > media então escreva (num2)

Se nota3 > media então escreva (num3)

Se nota4 > media então escreva (num4)

Se nota5 > media então escreva (num5)

Fim algoritmo

7.1 7.1 ArrayArray -- Problema

Page 2: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

5

7.1 Array - Solução 1

1. Uma variável para cada

número de matricula → 100 variáveis

2. Uma variável para cada nota → + 100 variáveis

3. 100 testes

6

7.1 Array - Definição

� Como estes dados têm uma relação entre si, podemos declará-los com um nome ÚNICO para todos os 100 elementos.

� Seja, por ex, um conjunto de 100 números = Lista

Lista[0]Lista[3]

Lista[99]

1 3 4 1002

7

� O elemento do vetor tem todas as características de uma variável e pode aparecer em expressões e atribuições.

Lista[2] ← Lista[3] + Lista[20]

� Para somar todos os elementos da Lista:

soma ← 0

para i ← 0 até 99 faça

soma ← soma + Lista[i]

7.1 Array - Definição

8

7.1Array - Características

� As características básicas de um Array são:

� é uma estrutura homogênea, isto é, é formada de elementos do mesmo tipo

� todos os elementos da estrutura são igualmente acessíveis, isto é, o tempo e o tipo de procedimento para acessar qualquer um dos elementos do Array são iguais

� cada elemento componente desta estrutura tem um nome próprio segundo sua posição no conjunto

Page 3: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

9

Array - Solução 2

2o. Algoritmo

Início algoritmo

Para i ← 0 até 4 faça

Leia(num[i],nota[i])

soma ← 0,0

Para i ← 0 até 4 faça

soma ← soma + nota[i]

media ← soma/5

Para i ← 0 até 4 faça

Se (nota[i] > media)

então escrever (num[i])

Fim algoritmo 10

7.1 Dados Estruturados: Declara7.1 Dados Estruturados: Declaraçãção de Vetoreso de Vetores

Os índices

variam de

0 até 4

� Na linguagem C a declaração do array é feita juntamente com as demais variáveis, e é preciso dizer qual é o tipo de dado que será armazenado no array.

� A declaração de um vetor com uma única dimensão é feita do seguinte modo:

tipo nome_variavel[no. de elementos]

Exemplo 1: int val[ 5 ];

Cria um vetor de nome val, de

tamanho 5 e cujos elementos são

do tipo int.

val[0]

val[1]

val[3]

val[2]

val[4]

11

���� Observações:1) O acesso a cada elemento do vetor é feito através de

uma indexação da variável val.2) Em C, a indexação de um vetor varia de zero a n-1,

onde n representa a dimensão do vetor. Assim:val [0] � acessa o primeiro elemento de valval [1] � acessa o segundo elemento de val...val [4] � acessa o último elemento de v

Mas:val[5] � está ERRADO (invasão de memória)

7.1 Dados Estruturados: Declara7.1 Dados Estruturados: Declaraçãção de Vetoreso de Vetores

12

Exemplo 2: Para declarar um vetor com 50 números reais

float custo[50];

float - Tipo de cada elemento do vetor

50 - No. de elementos do vetor

custo - Nome do vetor

custo[i] – Aquilo que está na posição índice i do vetor custo

Exemplo 3: Coloque o valor 34.6 na primeira posição do vetor custo e o valor 56.7 na última posição:

custo[0] = 34.6;

custo[49] = 56.7;

Exemplo 4:Coloque no quarto elemento do vetor o dobro do valor do segundo elemento:

custo[3] = 2* custo[1];

7.1 Dados Estruturados: Declara7.1 Dados Estruturados: Declaraçãção de Vetoreso de Vetores

Page 4: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

13

7.1 Dados Estruturados: Declaração de Vetores7.1 Dados Estruturados: Declaração de Vetores

� A Linguagem C permite que se faça a declaração do vetor ao mesmo tempo que atribuição de valores iniciais.

� O acesso e a modificação dos elementos do vetor é feito diretamente sobre a variável.

Exemplo 5:int val[5] = {3, 2, 6, 4, 5};aqui foi declarado um vetor de inteiros

com 5 elementos e atribuído a ele os

valores entre chaves

val[0]

23 46 5

����val[1]

�val[2]

�val[3]

�val[4]

Exemplo 6: val[1] = val[1] + 1; val[3] = val[1]+ val[3];

����

val[0]

33 76 5

����

val[1]

val[2]

val[3]

����

val[4] 14

Exemplo 7: Suponha a seguinte declaração:

int v3[10] = {10,33,45};

Neste caso os três primeiros elementos do vetor v3 (índices 0, 1 e 2) recebem os valores 10, 33 e 45 respectivamente. e todos os demais elementos recebem o valor ZERO

Assim a declaração acima é equivalentes à:

int v3[10] = {10,33,45,0,0,0,0,0,0,0};

7.1 Dados Estruturados: Declara7.1 Dados Estruturados: Declaraçãção de Vetoreso de Vetores

OBS:Se um vetor for declarado com n elementos e forem atribuídos inicialmente ao vetor, apenas k valores (k<n), então os primeiros k elementos do vetor serão iniciados com os respectivos valores e os restantes serão inicializados com ZERO.

15

7.1 Dados Estruturados: Vetor 7.1 Dados Estruturados: Vetor -- ProblemasProblemas

Programa 1: Criar um programa com um vetor de 10 inteirostal que seus elementos são da forma v[i] = i+1. Imprimir o vetor.

main() // incluir <stdio.h> e <stdlib.h>{ int i; int v[10];

// Colocando valores em v.for(i=0; i < 10; i++)

v[i] = i + 1;

// Mostra os elementos de v -> v[i].for(i=0; i < 10; i++) printf(“ %d ", v[i]); puts(“”);

// Mostra os indices i de v[i].for(i=0; i < 10; i++) printf(“ v[%d] ", i+1);

} // fim programa

Programa 1 – Usando vetores

21

v[0] v[1]

9•••

••• v[8]

10

v[9]

V [ i ] = i + 1;

printf(“ %d ”,v[i]);

printf(“ v[%d] ”,i+1);16

Programa 2 : Fazer um programa que leia um conjunto de 10 elementos numéricos,a partir do teclado, armazene-os na variável A e depois os imprima.

7.1 Dados Estruturados: Vetor 7.1 Dados Estruturados: Vetor -- ProblemasProblemas

#include <stdlib.h>

#include <stdio.h>

main()

{

int A[10];

int I;

// inicio

printf("Digite os 10 elementos do vetor; sendo um em cada linha\n");

for (I=0; I< 10;I++)// ler o vetor

scanf("%d",&A[I]);

printf("Vetor lido\n");

for (I=0; I<10;I++) // imprimir vetor

printf("A[%d] = %d\n", I, A[I]);

system("pause");

}

Page 5: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

17

Programa 2 – Exemplo de Execução

7.1 Dados Estruturados: Vetor 7.1 Dados Estruturados: Vetor -- ProblemasProblemas

18

7.1 Dados Estruturados: Vetor 7.1 Dados Estruturados: Vetor -- ProblemasProblemas

Programa 3: Criar um programa que armazene em um vetor os 10 primeiros termos da seqüência de Fibonacci. Imprimir o vetor.

F(n)=F(n-1)+F(n-2)

onde: n=0,1,2, 3,...

e F(0) = F(1) = 1

Espiral de Fibonacci

main() // incluir <stdio.h> e <stdlib.h>{ int i; int v[10]; v[1] = v[0] = 1;

// Colocando valores em v.for(i=2; i < 10; i++)

v[i] = v[i-1] + v[i-2];

// Mostra os elementos de v -> v[i].for(i=0; i < 10; i++) printf(“ %d ", v[i]); puts(“”);

// Mostra os indices i de v[i].for(i=0; i < 10; i++) printf(“ v[%d] ", i+1);

} // fim programa

Programa 3 – Fibonacci

E

I

I

E

19

//Programa 4 – Notas Maiores

main() // incluir <stdio.h> e <stdlib.h>{int i; float v[5], media = 0.0;// Colocar valores em v.for(i=0; i < 5; i++) { printf(“ Insira Nota %d: ”,i+1);scanf(“%f”,&v[i]); }

for(i=0; i < 5; i++) // Cálculo média.media=media+v[i];

media=media/5; printf(“Media = %f \n”, media);for(i=0; i < 5; i++) // Ver v[i]>media.if (v[i] > media)printf(“ v[%d] = %f \n", i+1,v[i]);

} // fim programa

1. Ler e armazenar notas.2. Calcular a média.3. Exibir notas > média.

Etapas de Resolução

1

2

3

O programa ao lado podeser melhorado com o usodos comandos const ou ainda define.

7.1 Dados Estruturados: Vetor 7.1 Dados Estruturados: Vetor -- ProblemasProblemas

Programa 4 : Dada uma relação de 5 estudantes, imprimir a a nota do estudante cuja nota é maior que a média da classe.

20

Programa 4 – Exemplo de Execução

7.1 Dados Estruturados: Vetor 7.1 Dados Estruturados: Vetor -- ProblemasProblemas

Page 6: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

21

� Ao se escrever um programa, deve-se fazê-lo de modo que uma pequena alteração nos dados não provoque grandes transformações no código.

� A solução para esse problema é a utilização de constantes,que uma vez alteradas, propagam o novo valor por todas as ocorrências.

� Uma constante nada mais é que um nome correspondendo a um valor fixo, isto é que não pode ser alterado ao longo da execução do programa.

O programa 3, por exemplo, foi escrito para rodar com um vetor de 5 elementos. Para que ele possa ser executado para um vetor de 40 elementos (40 alunos), é preciso alterar todas as ocorrências do número 5 pelo número 40.

7.1 Vetor: 7.1 Vetor: Definição de ConstantesDefinição de Constantes

22

7.1 Vetor: Defini7.1 Vetor: Definiçãção de Constanteso de Constantes

A definição de constantes pode ser feita de duas maneiras distintas:

� Através da palavra reservada const

const tipo simbolo =valor;

� Através da diretiva de pré processamento #define

#define simbolo valor

OBS: As constantes declaradas com o #define devem ser feitas imediatamente após as linhas dos #includes.

As constantes declaradas com o const podem ser feitas após os #includes ou após o main().

Pode-se então, reescrever o programa 3, usando constantes.

23

7.1 Vetor 7.1 Vetor -- ConstantesConstantes - Uso do comando #define

//Problema 3 – Notas Maiores#include <stdio.h>#define n 5 //sem ponto e virgulamain() {int i; float v[n], media = 0.0;// Colocar valores em v.for(i=0; i < n; i++) { printf(“ Insira Nota %d: ”,i+1);scanf(“%f”,&v[i]); }

for(i=0; i < n; i++)// Cálculo média.media=media + v[i];

media=media/n;for(i=0; i < n; i++) // Ver v[i]>media.if (v[i] > media)printf(“ v[%d] = %f \n", i+1,v[i]);

} // fim programa

� Quando o define é utilizado,o compilador substitui todas as ocorrências do símbolo pelo valor definido.

� Às constantes definidascom o símbolo #definechamam-se constantes simbólicas.Com a declaração:

#define n 5Em todo lugar onde

aparecer a variável n, ela

terá o valor constante

igual a 5 24

7.1 Vetor7.1 Vetor-- Constantes Constantes -- Uso do comando const

//Problema 3 – Notas Maiores//usando const#include <stdio.h>main() {const int n = 5; int i; float v[n], media = 0.0;// Colocar valores em v.for(i=0; i < n; i++) { printf(“ Insira Nota %d: ”,i+1);scanf(“%f”,&v[i]); }

for(i=0; i < n; i++)// Cálculo média.media=media+v[i];

media=media/n;for(i=0; i < n; i++) //Ver v[i]>media.if (v[i] > media)printf(“ v[%d] = %f \n", i+1,v[i]);

} // fim programa

O qualificador const permite ao programador informar que o valor de uma variável particular não deve ser modificado.Ou seja, a constante obtida com const existe fisicamente em uma dada posição dememória.

Exemplo de declaração:const int n=5;

Page 7: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

25

Problema 4: Escreva um programa que realize a leitura dos salários pagos a um individuo durante um ano. Em seguida, o programa deverá mostrar os valores mensais e o total anual.

7.1 Vetor 7.1 Vetor –– Constantes Constantes -- ProblemasProblemas

#include <stdio.h>

#include <stdio.h>

main()

{ const int mes = 12;

float sal[mes+1]; /* 12 meses */

float total;

int i;

for (i=1; i<= mes ; i++)

{ //inicio for

printf("Introd. o salário do mês %d:",i);

scanf("%f",&sal[i]);

} //fim for

/* Mostrar valores Mensais e calcular total */

puts(" Mes Valor ");

for (i=1, total=0.0 ; i<=mes ; i++)

{ // inicio for

printf(" %3d %9.2f\n",i,sal[i]);

total+=sal[i];

} //fim for

printf("Total Anual: %9.2f\n",total);

system(“pause”);

}

OBS: Neste exemplo, desconsiderou-se a posição zero do vetor 26

7.1 Vetor 7.1 Vetor –– Relembrando...Relembrando...

1. Os elementos de um vetor que foi declarado sem qualquer valor inicial contêm valores aleatórios.

2. O índice do primeiro elemento do vetor é sempre zero.

3. Os índices de um vetor com n elementos variam entre 0 e n-1.

4. O valor existente em uma posição do vetor vet pode ser obtido através do índice em que essa posição está armazenada vet[indice].

27

7.1 Vetor 7.1 Vetor –– Relembrando...Relembrando...

6. Não se pode declarar um vetor sem dimensão, ou usar uma variável como dimensão. Se não sabemos qual é o espaço de memória que deve ser reservado para o vetor, como o compilador vai saber qual é esse espaço.

7. Quando não se sabe a dimensão exata do vetor a ser declarado, deve-se utilizar um valor de dimensão maior que o valor que pensamos ser necessário.

5. O compilador não verifica se os índices utilizados em um vetor estão corretos ou não, por exemplo se num vetor de dimensão n, for utilizada a posição vet[n], vai gerar um erro grave, pois não existe esta posição na memória.

28

7.1 Vetor 7.1 Vetor -- Problemas

Problema 5: Uma companhia de energia elétrica dispõem dos dados de consumo mensal de energia elétrica em kWh de uma pequena empresa e deseja determinar algumas estatísticas. Para efeito de planejamento da manutençãoe expansão da rede elétrica ela deseja determinar os valorese os meses de maior e menor consumo, bem como o consumo médio.

1246

Mês kWh1 8242 11523 12364 1313

5 750Mês kWh

6 7007 7288 800

9 900Mês kWh

10 10321112 1304

Page 8: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

29

7.1 Vetor 7.1 Vetor –– Problemas: Problema 5

824

1152

1236

v[0]

v[1]

v[2]

Mês

1

2

3

kWh

••• ••••••

1304v[11]12

Posição Elemento

Associar posição i

com o (i+1) mês

1) Criar um vetor v de 12

elementos e associar o

consumo em KWh do

mês (i) com a posição (i-1). Ou seja:

v[ i -1 ] ↔↔↔↔ consumo

em kWh no mês i.

Idéia do Programa

30

7.1 Vetor 7.1 Vetor –– Problemas: Problema 5

Idéia do programa

824 1152 1236 ••• 1304

v[0] v[1] v[2] ••• v[11]

2) Achar o mês de maior consumo = Achar o Maior Elemento do Vetor. Para isso é preciso:

� Criar uma variável maior e guardar nela o primeiro elemento do vetor v. Isto é: maior ←←←← v[0].

� Comparar a variável maior com os demais elementos do vetor v[i]. Se maior < v[i], colocar v[i] na variável maior.

maior = v[0] = 824maior > v[1] ? não, então:

maior = v[1] = 1152maior > v[2]? não, então:

maior = v[2] = 1236 E assim por diante.

31

7.1 Vetor 7.1 Vetor –– Problemas: Problema 5

Idéia do programa

3. Achar o mês de Menor consumo = Achar o Menor Elemento do Vetor.

� Idem maior valor

� Criar uma variável menor e guardar nela o primeiro elemento do vetor v. Isto é: menor ←←←← v[0].

� Comparar a variável menor com os demais elementos do vetor v[i]. Se menor > v[i], colocar v[i] na variável menor.

32

#include <stdio.h>main() {const int n = 12; int i, imenor, imaior; float v[n], media, maior, menor;media = 0.0;// Leitura dos valores de energia.for(i=0; i < n; i++) { printf(“ Insira kwh %d: ”,i+1);scanf(“%f”,&v[i]); }

for(i=0; i < n; i++) // Cálculo média.media=media+v[i];

media=media/n;// Preparando para encontrar o maior e // e o menor valor.maior = menor = v[0];imaior = imenor = 0;

Problema 5 – Consumo Energia

7.1 Vetor 7.1 Vetor -- Problemas

// Laço encontra índice e maior valor.for(i=1; i < n; i++) if (v[i] > maior){ maior = v[i]; imaior = i; }

// Laço encontra índice e menor valor.for(i=1; i < n; i++)if (v[i] < menor){ menor = v[i]; imenor = i; }

// Mostrando valores encontrados.printf(“ Maior Valor = %f no mes %d \n",maior, imaior+1);

printf(“ Menor Valor = %f no mes %d \n", v[imenor], imenor+1);

printf(“ Valor medio = %f \n”,media);} // fim programa

Problema 5 – Continuação

Page 9: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

33

7.1 Vetor 7.1 Vetor -- Problemas Problema 5 – Exemplo de Execução

34

7.1 Vetor 7.1 Vetor –– Problemas : Problema 6

Problema 6: Criar um programa que simule 60 lançamentos de um dado de 6 faces e armazena o número de vezes que uma face foi sorteada nos elementos de um vetor. Depois, a partir dos valores contidos nos elementos deste vetor construir um histograma, tal como dado a seguir:

Face 1 – 10: [][][][][][][][][][]Face 2 – 12: [][][][][][][][][][][][]Face 3 – 8: [][][][][][][][]Face 4 – 10: [][][][][][][][][][]Face 5 – 11: [][][][][][][][][][][]Face 6 – 9: [][][][][][][][][]

35

7.1 Vetor 7.1 Vetor –– Problemas: Problema 6

Idéia do programa

v[0]

v[1]

v[2]

Face

1

2

3

# Sorteio

4 v[3]

v[4]5

Posição Elemento

v[5]6

Criar um vetor v de 6 posições que vai armazenar o no. devezes que uma face i ésorteada.

Então: v[0] vai guardar o no. devezes que a face 1 foi sorteada.v[1] vai guardar o no. de vezesque a face 2 foi sorteada e assim por diante. Então: v[ i -1 ] ↔ no.de vezes

que a face i foi sorteada. Associa a posição i com a face

(i+1). 36

7.1 Vetor 7.1 Vetor –– Problemas Problema 6

2 4 3 ••• 6

Vetor do número de ocorrências de uma

face para 60lançamentos.

0

fr[0]

Idéia do programa

60 lançamentos1 2 3 ••• 60

0

fr[1]

+1

0

fr[2]

0

fr[3]

0

fr[4]

0

fr[5]

+1 +1 +1

Page 10: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

37

Idéia do programa

7.1 Vetor 7.1 Vetor –– Problemas Problema 6

Gerador linear congruêncial

Sn+1 = (Sn *a + b) mod monde: é uma boa estratégia usar

m, a e b números primos.

S0 é a semente

Sn+1 será o número aleatório gerado.

Gerar uma seqüência de números pseudo- aleatória, ou seja, uma seqüência S que utilize uma fórmula para obter seus termos Sn dentro de um intervalo [a, b], os mesmos não se repetem para um valor suficientemente grande de n.

Sn+1 = (Sn* 32749 + 3) mod m

Uma boa escolha para m, a e b

38

Como gerarvalores

aleatórios em C?

7.1 Vetor 7.1 Vetor –– Problemas Problema 6

srand(time(0))

s = rand( )

Fornece semente S0

Fornece Sn+1

Os números gerados por rand( ) estãono intervalo [0, RAND_MAX], onde:

RAND_MAX = 327679719.

Então para gerarvalores aleatóriosentre [0 e 5], tem-se

Para gerar números inteiros no intervalo [a, b-1] usa-se o operador % (resto inteiro da divisão):s = (rand() % b) + a.

39

7.1 Vetor 7.1 Vetor –– Problemas Problema 6

O operador % funciona de acordo com o exemplo abaixo:

0 % 6 = 0

1 % 6 = 1

2 % 6 = 2

3 % 6 = 3

4 % 6 = 4

5 % 6 = 5

6 % 6 = 0

7 % 6 = 1

8 % 6 = 2

9 % 6 = 3

10 % 6 = 4

11 % 6 = 5

Ou seja, operações com% funcionam como se

tivéssemos um relógio:

1

23

4

50

Por esse motivo, as operações com o operador % são chamadas de aritmética modular ou ainda aritmética do relógio.

1

23

4

50

1

23

4

50 7

13

40

#include <stdio.h>#include <time.h>#include <stdlib.h> const int lanc = 60; main() {int fr[6] = {0, 0, 0, 0, 0, 0};int i, j, face; // Inicializa gerador aleatório.srand(time(0));// Laço gera 60 valores em [0,5].for(i=0; i < lanc; i++) { face = rand( ) % 6;fr[face]++;

}

Problema 6 – 60 lançamentos

7.1 Vetor 7.1 Vetor –– Problemas Problema 6

// Laço para imprimir o histograma//a partir dos valores armazenados//no vetor fr. printf(“ \n\n“);for(i=0; i < 6; i++) {printf(“\bFace %2d-%2d:”,i+1,fr[i]);// Impressão fr[i] vezes do //caractere [] para formar a //freqüência de ocorrência de uma //dada face.for (j=0; j < fr[i]; j++)printf(“[]”);

// Criando uma nova linha.printf(“ \n “);

}} // fim programa

Problema 6 - Continuação

Page 11: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

41

7.1 Vetor 7.1 Vetor -- Problemas

Problema 6 – Exemplo de Execução

42

Conceito

Problema 7: Escreva um programa que solicite ao usuário o número de alunos de uma sala. Depois, de acordo com o

valor da nota de cada aluno, deverá ser atribuído um conceito de acordo com a seguinte tabela:

Faixa de Valores

9 ≤ Nota ≤ 10

7 ≤ Nota < 9

A

B

5 ≤ Nota < 7 C3 ≤ Nota < 5 D0 ≤ Nota < 3 E

Por fim, deveráser fornecidoo percentualde notas da turma para

cada conceito.

7.1 Vetor 7.1 Vetor -- Problemas

43

10.0 8.5 5.5 ••• 0.0vn[0] vn[1] vn[2] ••• vn[m]

Idéia do programa

7.1 Vetor 7.1 Vetor -- Problemas

1) Criar um vetor notas de dimensão m, onde vn[0] vai guardar a nota do 1º. aluno; vn[1] a nota do segundo aluno e assim por diante.

2) Criar um vetor vc[i] de dimensão 5, para guardar a quantidade de cada conceito. Assim vc[0] vai guardar quantos conceitos A tem na turma, vc[1] vai guardar quantos conceitos B tem na turma e assim por diante. Inicialmente vc[i] = 0.

3) Verificar em qual faixa de valores a nota de cada aluno se encontra. Para cada conceito A encontrado, somar mais 1 no vetor vc[0], para cada conceito B encontrado, somar mais 1 em vc[1] e assim por diante. 44

Idéia do programa

9≤≤≤≤ vn[i] ≤≤≤≤

10

A

7≤≤≤≤ vn[i] <

9

B

5≤≤≤≤ vn[i] <

7

C

3≤≤≤≤ vn[i] <

5

D

0≤≤≤≤ vn[i] <

3

E

0 0 0 0 0

vc[0] vc[1] vc[2] vc[3] vc[4]

+1 +1 +1 +1

7.1 Vetor 7.1 Vetor -- Problemas

+1

Page 12: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

45

#include#include#include#include <stdio.h>mainmainmainmain() {

constconstconstconst intintintint m = 100; intintintint i, num, vc[5] = {0,0,0,0,0}; floatfloatfloatfloat tmp, vn[m];// Leitura do número de alunos.printf(“Entre com no. alunos: “);scanf(“%d”, &num);// Leitura dos valores das notas.forforforfor(i=0; i < numi < numi < numi < num; i++) {

printf(“ Insira nota %d: ”,i+1);scanf(“%f”,&vn[i]); }

//construir vetor de conceitos//construir vetor de conceitos//construir vetor de conceitos//construir vetor de conceitos//de acordo com a Tabela.//de acordo com a Tabela.//de acordo com a Tabela.//de acordo com a Tabela.

Problema 7 – Conceito x Notasforforforfor(i=0; i < numi < numi < numi < num; i++) {

ifififif (vn[i] >= 9.0) vc[0]++;elseelseelseelse ifififif (vn[i] >= 7.0) vc[1]++;elseelseelseelse ifififif (vn[i] >= 5.0) vc[2]++;elseelseelseelse ifififif (vn[i] >= 3.0) vc[3]++;elseelseelseelse vc[4]++;

}// Mostrar percentual cada conceito.forforforfor(i=0; i < 5i < 5i < 5i < 5; i++) { // Mostrando percentuais.

tmp = (floatfloatfloatfloat(vc[i])*100)/num;printf(“Conceito%d=%f \n", i, tmp);

} } // fim programa

Problema 7 – Continuação

7.1 Vetor 7.1 Vetor –– Problemas: Problema 7

46

7.1 Vetor 7.1 Vetor -- Problemas

Problema 7 – Exemplo de Execução

47

7.1 Vetor 7.1 Vetor -- Problemas

Conceito 1 – 20.00%: [][]Conceito 2 – 20.00%: [][]Conceito 3 – 20.00%: [][]Conceito 4 – 30.00%: [][][]Conceito 5 – 10.00%: []

Número deocorrências denotas dentro decada conceito.

Problema 8: Acrescentar ao final do programa que resolve oProblema 7, e depois de mostrar a informação de freqüência em percentual, um histograma tal como elaborado para resolver o Problema 6. O programa deve apresentar os resultados como abaixo.

48

7.1 Vetor 7.1 Vetor -- Problemas

for(i=0; i < num; i++) {if (vn[i] >= 9.0) vc[0]++;else if (vn[i] >= 7.0) vc[1]++;else if (vn[i] >= 5.0) vc[2]++;else if (vn[i] >= 3.0) vc[3]++;else vc[4]++; }

// Mostrar percentual cada conceito.

for(i=0; i < 5; i++) { // Mostrando percentuais.tmp = (float(vc[i])*100)/num;printf(“\n Conceito %d=%f",i+1,tmp);// Impressão do Histograma !for(j=0; j < vc[i] ;j++) printf(“[]”);}

} // fim programa

Problema 8 – continuação#include <stdio.h>main() {

const int m = 100; int i, j, num, vc[5] = {0,0,0,0,0}; float tmp, vn[m];// Leitura do número de alunos.printf(“Entre com no. alunos: ”);scanf(“ %d ”, &num);// Leitura dos valores das notas.for(i=0; i < num; i++) {

printf(“ Insira nota %d: ”,i+1);scanf(“%f”,&vn[i]); }

// Laço para o vetor de concei-// tos com o número de notas em// cada faixa de acordo com as// estabelecidas na Tabela.

Problema 8 – Histograma

Page 13: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

49

Problema 5 – Exemplo de Execução

7.1 Vetor 7.1 Vetor -- Problemas

50

7.1 Vetor 7.1 Vetor –– Problemas – Ordenação de Vetores

http://www.cs.oswego.edu/~mohammad/classes/csc241/samples/sort/Sort2-E.html

http://olli.informatik.uni-oldenburg.de/fpsort/Animation.html

Um possível algoritmo de ordenação é o BubbleSort, cujo nome em português é: algoritmo da bolha.Seu funcionamento consiste em fazer os valores maiores “afundarem“ gradualmente até a base do vetor, ao mesmo tempo que os valores menoressobem gradualmente, como as bolhas de ar sobem naágua, enquanto os valores maiores afundam para aparte de baixo do vetor.

Problema 9: Ordenação de dados (em ordem crescente ou decrescente) pode ser utilizada para classificar e mostrar os resultados maissignificativos obtidos por um buscador Web (Google ou Altavista, por exemplo) para uma dada palavra-chave. Crie um programa que coloca em ordem crescente um vetor de elementos gerados aleatoriamente

51

7.1 Vetor 7.1 Vetor –– Problemas – Ordenação de Vetores

� Este é o mais popular dos método de ordenação. O principio básico desta técnica, está na comparação e troca entre dois elementos consecutivos do vetor . O exemplo a seguir nos dá uma idéia de como funciona o algoritmo.

93

10

76

62

59

91

15

46

� O método começa comparando o primeiro elemento do vetor com o segundo elemento. Se o primeiro elemento for maior, é feito a troca entre os dois. A seguir compara-se o segundo com o terceiro, e assim por diante, até a comparação do penúltimo com o último elemento.

93

10

76

62

59

91

46

15 46 >15

troca

46 < 91

não

troca

91 > 59

troca

93

10

76

62

91

59

46

15

93

10

76

91

62

59

46

15

93

10

91

76

62

59

46

15

93

91

10

76

62

59

46

15

91 > 62

troca 91 > 76

troca

91 > 10

troca

52

7.1 Vetor 7.1 Vetor –– Problemas – Ordenação de Vetores

� Observe , no nosso exemplo, que agora o maior elemento do vetorestá ocupando a última posição.

93

91

76

62

59

46

10

15

93

91

10

76

62

59

46

15

� A seguir recomeça-se a comparar o primeiro elemento do vetor, assim modificado, com o segundo e assim por diante até a comparação do ante antepenúltimo com o penúltimo

93

91

76

10

62

59

46

15

93

91

76

62

10

59

46

15 15>46?não troca46>59?não troca59 > 62não troca62>76?não troca76>10?Troca

76>91?não troca

15>46?não troca

46>59?não troca

59 > 10troca

93

91

76

62

59

10

46

15

93

91

76

62

59

10

46

15

59>62?não troca

62>76?não troca

15>46?não troca

46>10?troca

46>59nãotroca59>62nãotroca

Page 14: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

53

7.1 Vetor 7.1 Vetor –– Problemas – Ordenação de Vetores

� Observe , no nosso exemplo, que os maiores elementos do vetor estão sendo colocados ocupando nas últimas posições.

93

91

76

62

59

46

10

15 15>10?troca

46>59?não troca59 > 62não troca62>76?não troca76>10?Troca

15>46?não troca

46<59?nãotroca

93

91

76

62

59

46

15

10

54

7.1 Vetor 7.1 Vetor -- Problemas

#include <stdio.h>#include <time.h>const int n = 10; main() {int i, j, tmp, v[n]; // Geração aleatória dos elementos de v entre [0,n-1] //

srand(time(0));for(i=0; i < n; i++) v[i] = rand()%n;

// Impressão de v antes de ordenar.printf(“\n v = ”);for(i=0; i < n; i++) printf(“ [%2d] ”,v[i]); // Laços encadeados que realizam a // ordenação segundo o algoritmo do// Bubble Sort.

Problema 9 – Bubble Sortfor(i=0; i < n-1; i++) for (j=0; j < n-i-1;j++)if (v[j] > v[j+1]){ tmp = v[j];

v[j] = v[j+1];v[j+1] = tmp; }

// Mostrar vetor ordenado.printf(“\n v = ”);for(i=0; i < n; i++) printf(“ [%2d] ”,v[i]);

} // fim programa

Problema 9 – Bubble Sort

55

7.1 Vetor 7.1 Vetor -- Problemas

Problema 9 – Exemplo de Execução

56

7.1 Vetor 7.1 Vetor -- Problemas

(i) Pesquisa Linear: Cada elemento do vetor é analisado até encontrar a chave de pesquisa. Encontra-se o índice da posição onde a chave está, ou se chegar ao fim do vetor sem encontrar nada, o valor ( -1) é retornado.

(ii) Pesquisa Binária: Supõe que o vetor esta ordenado, de forma que a cada comparação da chave com um elemento, metade do vetor é eliminado.

Problema 10: Um problema freqüente de programação é o de pesquisar um valor-chave, denominado também de chave de pesquisa, em um dado vetor, indicando se o valor existe e qual posição ocupa no vetor. Este processo é chamado de pesquisa e duas técnicas podem ser utilizadas:

Criar um programa que gera um vetor v[i]=2*i de tamanho 14 e verificar o funcionamento de (i) e (ii) para chaves digitadas.

Page 15: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

57

7.1 Vetor 7.1 Vetor -- Problemas

#include <stdio.h>const int n = 14; main() {int i, chave, ind, v[n]; // Digitando a chave de pesquisa.printf(“Entre com a chave: ”);scanf(“%d”, &chave);// Gerar o vetor ordenado v.for(i=0; i < n; i++) v[i] = 2*i;

// Impressão dos valores de v.for(i=0; i < n; i++) printf(“%3d ”,v[i]);

// Cabeçalho.printf(“\n”);for(i=0; i < n; i++) printf(“----”);

printf(“\n”);

Problema 10 – Pesquisa Linear// Laços encadeados: Pesquisa Linear.ind = -1;for(i=0; i < n; i++) // Se a chave foi encontrada, então,// armazenar o índice i de v[i].if (chave == v[i]){

ind = i; break;

}// Mostrar resultado.if(ind == -1)

printf(“ Chave nao encontrada !\n”);else

printf(“Chave no indice: %d \n”,ind); } // fim programa

Problema 10 – Pesquisa Linear

58

7.1 Vetor 7.1 Vetor –– Problemas Problema 10 – Pesquisa Linear

Problema 10 – Exemplos de Execução

Chave < v[0]

Chave = v[0]

Chave ⊂⊂⊂⊂ [0,26]mas ∉∉∉∉

Chave = v[13]

Chave > v[13]

59

7.1 Vetor 7.1 Vetor –– Problemas Problema 11 – Pesquisa Binária

Idéia da Pesquisa Binária (supõe vetor ordenado !)

1) Faça a= primeiro índice do vetor.

2) Faça b=último índice do vetor.

3) Calcule o índice k do meio do vetor: k=(a+b)/2

4) Verifique se chave < v[k]

Então a chave se encontra entre os elementos v[0] e v[k]. Faça b=k-1, e volte ao passo 3.

Senão a chave se encontra entre os elemento v[k] e v[b]. Faça a=k, e volte ao passo 3.

60

7.1 Vetor 7.1 Vetor –– Problemas Problema 11 – Pesquisa BináriaIdéia da Pesquisa Binária (supõe vetor ordenado !)

12v[4]

10v[3]

8v[2]

4v[1]

2v[0]

EX: Seja chave = 10

a=0

b=4

k=2

a=0;b=4k = (a+b)/2 = 2Se (chave>v[k])então o novo intervalo é a=k+1=3 e b=4;senão o novo intervalo é b=k-1=1 e a=0Se (chave= v[k])então encontrou o valor. A chave está na

posição ka=3

b=4Novo

intervalok = (a+b)/2 = 3.chave = v[3], então a chave está na posição 3 do vetor

Page 16: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

61

Quadro resumo dos casos para Pesquisa Binária

Caso

1

Condição Ações

chave < v[k]b = k – 1; k = (a+b)/2;

Imagem

2 chave = v[k] Retornar k

3 chave > v[k]a = k + 1;k = (a+b)/2;

4 b < a Retornar -1

7.1 Vetor 7.1 Vetor –– Problemas: Problema 11 – Pesquisa Binária

62

7.1 Vetor 7.1 Vetor –– Problemas Problema 11 – Pesquisa Binária

#include <stdio.h>const int n = 14; main() {int i, j, a, b, k, chave, ind, v[n]; // Digitando da chave de pesquisa.printf(“Entre com a chave: ”);scanf(“%d”, &chave);// Preenchendo o vetor ordenado v.for(i=0; i < n; i++) v[i] = 2*i; for(i=0; i < n; i++) //Imprime vetorprintf(“%3d ”,v[i]);

printf(“\n”); // Imprime cabeçalhofor(i=0; i < n; i++) printf(“-----”); printf(“\n”);// Inicializando limites da Pesquisa// Binária e valor do inicial do índice.a = 0; b = n-1; ind = -1;

Problema 11 – Pesquisa Binária// Laços encadeados: Pesquisa Binária. while(a <= b) {// Enquanto!= Caso4k = (a+b)/2;for (j=0;j < n;j++) // Imprime vetorif (j < a || j > b) printf(“ ”);else if (j == k) printf(“%3d*”,v[j]);else printf(“%3d ”,v[j]);

printf(“\n”);// Tratando os 3 casos existentes.if (chave == v[k]) // Caso 2.{ ind = k; break; }else if (chave < v[k]) // Caso 1.b = k – 1;

else // Caso 3.a = k + 1; } // Fim do while.

if (ind == -1) printf(“Sem Chave\n”);else printf(“Chave - indice:%d\n”,ind);} // fim programa

Problema 11 – Pesquisa Binária

63

7.1 Vetor 7.1 Vetor –– Problemas Problema 11 – Pesquisa Binária

64

7.1 Vetor 7.1 Vetor –– Problemas

Problema 12: Na FEG existe uma quantidade de alunos matriculados na disciplina PC e na disciplina de Cálculo II. Mas acontece que estas duas disciplinas estão no mesmo horário. É preciso então saber quais são os alunos que estão matriculados nas duas disciplinas ao mesmo tempo. Fazer um programa que seja capaz de imprimir o número de matricula desses alunos. É dado o número de alunos matriculados em cada disciplina, bem como seus números de matricula.

//Programa Simultaneo#include <stdlib.h>#include <stdio.h>main(){ int PC[150], CN[220], matrisimult[150];int NCN,NPC,i, j, k;

continua ...

Page 17: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

65

7.1 Vetor 7.1 Vetor –– Problemas Problema 12: Continuação....

//leitura de dadosprintf("Digite o numero de alunos cursando PC ");scanf("%d",&NPC);for(i=1; i <= NPC; i++){printf("Digite o no. de matric do aluno %d, em PC ", i);scanf("%d",&PC[i]);

}printf("Digite o numero de alunos cursando CN ");scanf("%d",&NCN);i=1;while (i <= NCN){printf("Digite o no. de matric do aluno %d, em CN ", i);scanf("%d",&CN[i]);i= i+1;

} 66

7.1 Vetor 7.1 Vetor –– Problemas Problema 12: continuação . . .

//Verificação dos alunos que estão com matrícula simultâneak= 0;for( i= 1;i<= NPC;i++)

for (j=1; j<= NCN; j++)if (PC[i]==CN[j]){ k= k+1;

matrisimult[k]= PC[i];}

// Escrever o vetor de matricula simultâneaprintf ("vetor de matricula simultanea\n");for (j= 1; j<= k; j++)

printf(" aluno no. %d \n",matrisimult[j]);system("pause");}

67

Problema 13: Fazer um programa em C para ler um vetor A de dimensão N e calcular um vetor B da seguinte maneira:

B [1] 1 * A [1] B [2] 2 * A [2]B [3] 3 * A [3]B [4] 4 * A [4] ...B [N] N * A [N]Em seguida calcular a soma dos elementos de B e imprimir o

vetor B.

7.1 Vetor 7.1 Vetor –– Problemas

68

#include <stdlib.h> // Problema 13

#include <stdio.h>

main()

{

int a[150], b[150], n, i, soma_b;

//ler o vetor A

printf("quantos elementos tem o seu vetor?");

scanf("%d",&n);

for (i=1; i<=n; i++)

{ printf("digite o elemento %d do vetor A ", i);

scanf("%d", &a[i]);

}

// Gerar o vetor B e

for (i=1; i<=n; i++)

b[i]= i*a[i];

7.1 Vetor 7.1 Vetor –– ProblemasProblemas

Page 18: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

69

//Continuação ..... Problema 13

// calcular a soma de b

soma_b =0;

for (i=1; i<=n; i++)

soma_b= soma_b + b[i];

// imprimir b

printf("\n\tVetor B \n");

for (i=1; i<=n; i++)

printf("\tb[%d] = %d\n", i,b[i]);

printf("\n\tSoma de B = %d\n\n", soma_b);

system("PAUSE");

}

7.1 Vetor 7.1 Vetor –– ProblemasProblemas

70

7.1 Vetor 7.1 Vetor -- Problemas

Problema 14: Um método de Criptografia consiste em substituiras letras de uma mensagem através do emparelhamento de alfabetos tal como dado abaixo. Construir um programa que codifica mensagens usando este esquema.

Alfabeto original a b c d ... v w x y z

Alfabeto cifrado B C D E ... W X Y Z A

Texto cifrado

Texto original v e n i v i d i v i c i

W F O J W J E J W J D J

71

7.1 Vetor 7.1 Vetor -- Problemas

#include <stdio.h>main() {int i; // Laço para construir a Tabela ASCII.printf(“Tabela ASCII: \n”);printf(“ int -> char \n”);// A tabela possui 2^8 valores, pois// char é um tipo de 1 byte (8 bits).for(i=0; i < 255; i++) printf(“ %4d -> %c \n”, i, char(i));

}

Problema 14– Tabela ASCII

E se imprimir usando(i+1) % 256? e (i+2)%256? O que ocorre ? 72

7.1 Vetor 7.1 Vetor -- Problemas

(i+1) % 256

(i+2) % 256

Deslocamentodo alfabeto

Page 19: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

73

7.1 Vetor 7.1 Vetor -- Problemas

// Inicialização.

char tmp, texto[1000];// Ler até encontrar ‘.’ .

i = 0;while (i < 1000) {

tmp = getche();if (tmp == '.')break;

else{

texto[i] = tmp; i++;}

// Guardar tamanho da msg.

n = i;

texto[0] texto[1]

••••••••••••

•••••••••••• texto[100]

M

texto[0]

e

texto[1]

••••••••••••

••••••••••••

a

texto[16]

Mensagem Secreta.

n=17 74

7.1 Vetor 7.1 Vetor -- Problemas

// Inicialização

char tmp, texto[1000];// Ler até ‘.’. Não ler backspace.

i = 0;while (i < 1000) {

tmp = getche();if (tmp == '.')break;

if (int(tmp) != 8) {texto[i] = tmp; i++; }

else i--; }

// Guardar tamanho da msg.

n = i;

M

texto[0]

e

texto[1]

••••••••••••

••••••••••••

a

texto[16]

Mensagem Secreta

Mr←←←←ensagem Secreta.

Corresponde ao caracterebackspace na Tabela ASCII.

75

#include <stdio.h>#include <conio.h>main() { int i, n;

char tmp, texto[1000]; // Armazenando a mensagem.printf(“Entre com a mensagem: ”);i=0;while (i < 1000) {

tmp = getche();// Termina o laço.if (tmp == ‘.’)

break;// Se não for backspace, guarde.if (int(tmp) != 8) {

texto[i] = tmp;i = i + 1; }

else i--; //Backspace: elimina ant.}

Problema 14 – Criptografia

n = i; // Tamanho do vetor em n.

// Codificando a mensagem.

for(i=0; i < n; i++) texto[i] = (texto[i]+1)%256;

// Mostrando a mensagem//codificada. printf(“\n Mensagem Codificada:\n”);for (i=0; i < n; i++){

printf(“%c”,texto[i]); }printf(“\n”);

} // fim programa

Problema14– Criptografia

7.1 Vetor 7.1 Vetor -- Problemas

76

7.1 Vetor 7.1 Vetor -- Problemas

Observe que:

M e n s a g e m S e c r e t a

N f o t b h f n ! T f d s f u b

Page 20: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

77

Problema 15: Criar um programa que captura uma senha e compara com uma palavra previamente cadastrada. No momento da digitação, a senha não deve aparecer. Somenteapós a validação da senha é que deverá aparecer a palavradigitada e se a palavra digitada confere com a senha ou não.

7.1 Vetor 7.1 Vetor -- Problemas

78

7.1 Vetor 7.1 Vetor -- Problemas

// Inicialização.

char texto[100], tmp;char senha[100] = “Secreta”;// Ler até encontrar o enter (‘↵’’).

i = 0;while( i < 100 ) {

tmp = getch();// Se digitou ↵, pare leitura.

if (int(tmp) == 13) break;

else{texto[i]=tmp;printf(“*”); i++;}

} // Fim while.

// Guardar tamanho da msg.

n = i;

É preciso ter cuidado com backspace !

� Lê o caractere do teclado, mas o que foi digitado não aparece na tela.

Verifica se foi digitado o enter.

79

7.1 Vetor 7.1 Vetor -- Problemas

// Ler até encontrar ‘↵’’.

i = 0;while( i < 100 ) {

tmp = getch();// Se digitou ↵, pare leitura.

if (int(tmp) == 13) break;

elseif (int(tmp) != 8) // ≠←≠←≠←≠←.{printf(“*”); texto[i]=tmp;i++; }

else i--; // =←←←←. } // Fim for.

// Guardar tamanho da msg.

n = i;

Tratamento do Backspace

S x ←←←← e c

S e c r e

r e t

ttexto

Palavra Digitada

80

verif = 1; // Supõe que senha = texto.

// Tamanho senha igual tamanho texto?

if (ns == nt) //nt= tamanho digitado

{ // Ler até achar letra ≠ ou fim palavras.

for (i=0; i < nt; i++)if (texto[i] != senha[i]) {

verif = 0; break;

} }else // Tamanhos ≠.

verif = 0;

7.1 Vetor 7.1 Vetor -- Problemas

Caso 1:

texto

senha

S

S

i

e

e

c

c

r

r

e

e

t

t

a

a

0 1 2 3 4 5 6

o

a

Caso 2:

texto

senha

S

S

e

e

g

c

r

r

e

e

d

t

texto[2] != senha[2]

Page 21: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

81

7.1 Vetor 7.1 Vetor -- Problemas

#include <stdio.h>#include <conio.h>main() { int i, verif, nt, ns = 7; char tmp, texto[100];char senha[100]="secreta"; // Armazenando a senha digitada.printf("Digite a senha "); i=0;while (i < 100) { tmp = getch();// Termina o laço se for ?.if (int(tmp) == 13)

break;else

if (int(tmp) != 8) // ??.{ printf("*");

texto[i] = tmp; i++; }

else{ putchar('*'); putchar(' ');

putchar(char(8)); i--; } //? } //fim laço

Problema 15 – Senha

nt = i; // Tamanho digitada em nt.verif = 1; // Supõe texto == senha.// Ver se texto e senha tem tam?==.if (nt == ns) {for (i=0; i < nt; i++)if (texto[i] != senha[i]){ verif = 0; break; }

}else verif = 0;

// Mostrando mensagem. if (verif)printf("\nSenha Correta ! \n");

elseprintf("\nSenha incorreta ! \n");

getchar();} // fim programa

Problema 15 – Senha

82

7.1 Vetor 7.1 Vetor -- Problemas

83

7.2 Matrizes7.2 Matrizes

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

84

Matrizes - Definição

�Também chamadas conjuntos bidimensionais, contém:– um número fixo de elementos;

– todos são do mesmo tipo;

– arranjados na forma de tabela de 2 dimensões;

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

Page 22: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

85

Matrizes - Definição

� Ex.: Uma matriz chamada MAT que tenha melementos (horizontal) e n elementos (vertical)

0 1 2 3 4 n-1

0

1

2

3

4

m-1

...

...

*

MatMat[2][3][2][3]

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

86

Matrizes ou Array bidimesionais são estruturas de dados que organizam informações; de mesmo tipo e mesmo nome; em tabelas.

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

Para se acessar ou modificar um elemento da matriz deve-se especificar o nome da matriz seguido de dois números entre colchetes ([ ]), sendo que o primeiro corresponde a linha e o segundo corresponde a coluna relativa a posição que o elemento ocupa na Tabela.

Para tanto, são utilizados dois índices, que correspondem a linhas e colunas.

87

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

int a[ 3 ][ 2 ];DeclaraçãoDeclaração e Atribuição de Matrizes

� Uma matriz nada mais é que um vetor de duas dimensões, logo a atribuição de valores a uma matriz é feita de modo semelhante atribuição de valores a um vetor.

A declaração de um vetor com n dimensões é feita do seguinte modo:

tipo nome_do_vetor [dim1][dim2][dim3] ... [dimn]

88

Ex: Declaração de uma matriz de inteiro de dimensão 3x2.

main()int mat[3][2]; //3 linhas, cada uma delas com 2 posições

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

mat[2][1]mat[2][0]Linha 2

mat[1][1]mat[1][0]Linha 1

mat[0][1]mat[0][0]Linha 0

Coluna 1Coluna 0

Page 23: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

89

� Atribuição Automática Inicial

A atribuição inicial é feita da mesma maneira que para vetores de uma só dimensão.

Ex: int a[ 3 ][ 2 ] = {1, 1, 2, 2, 3, 3};Neste exemplo, o vetor tem 3 linha e duas colunas, logo está sendo feita a seguinte atribuição:

7.2 Dados Estruturados: Matrizes 7.2 Dados Estruturados: Matrizes -- Atribuição Inicial

a[2][1]=3a[2][0]=3

a[1][1]=2a[1][0]=2

a[0][1]]=1a[0][0]=1

Observe que os dois primeiros números da chave estão sendo atribuídos a 1ª. linha, os dois seguintes são atribuídos à segunda linha e os dois últimos são atribuídos a terceira linha.

90

A atribuição inicial também pode ser feita da seguinte maneira

Ex: int a[ 3 ][ 2 ] = { {1, 1}, {2, 2}, {3, 3} };

Observe que agora existe uma separação por linhas, sendo: {1,1} relativa a 1ª. linha; {2,2} relativa a 2ª. linha e {3,3}relativa a 3ª. linha.

7.2 Dados Estruturados: Matrizes 7.2 Dados Estruturados: Matrizes -- Atribuição Inicial

Vetor de tamanho 2x1

Na realidade em C, uma matriz é considerada um vetor de vetores.Então, no exemplo acima:

a – É um vetor com 3 elementos (cada elemento é um vetor de 2 inteiros)

a[i] – É um vetor de 2 inteiroa[i][j] – É um inteiro que está colocado na posição i, j do vetor a

91

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

Acesso e Modificação de valores de uma Matriz

1 1

2 2

3 3

a[0][1]=a[0][1]+2 1 3

4 2

12 3

Matriz Inicial Matriz FinalOperações

a[1][0]=a[0][1]+1

a[2][0]=a[2][0]*a[1][0]

92

7.2 Dados Estruturados: Matrizes7.2 Dados Estruturados: Matrizes

Problema 1: Criar programa com uma matriz 3 x 3 de inteiroscujos elementos são da forma a[i][j] = i + j + 1. Imprimir a matriz.

# include <stdio.h>

# include <stdio.h>

main() { int i, j;

int a[3][3];// Colocando valores em a.for (i=0; i < 3; i++)

for (j=0; j < 3; j++) a[i][j] = i + j + 1;

// Mostra elementos de a-> a[i][j].for (i=0; i < 3; i++){ for (j=0; j < 3; j++)

printf(“ %d ", a[i][j]); puts(“”);}

} // fim programa

a [ i ] [ j ] = i + j + 1;

1 2 3

2 3 4

3 4 5

a[0][0] a[0][1] a[0][2]

a[2][0] a[2][1] a[2][2]

a[1][0] a[1][1] a[1][2]

Page 24: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

93

7.2 Matrizes 7.2 Matrizes -- Problemas

Problema 2: Criar um programa que dado um valor n construa o triângulo de Pascal correspondente até a n-ésima linha.

0 1 2 3 4 5 6

0

1

2

3

4

5

6

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

� O Triângulo de Pascal pode ser calculado usando uma matriz tal que cada elemento é dado por : a[i][j] = a[ i-1 ][ j-1 ]+a[ i-1 ][ j ]

0 1 2

0

1

2

1

1 1

1 2 1

0 0

0

01 0 a[1][1]

a[0][0]

a[0][1]

94

7.2 Matrizes 7.2 Matrizes -- Problemas

Para gerar o triângulo basta seguir os seguintes passos:

Passo 1:

Construir umamatriz nxn

de zeros

Passo 2:

Preencher a primeira

coluna com 1

Passo 3:

Obter os demaiselementos utilizando:

a[i][j] = a[ i-1 ][ j-1 ]+a[ i-1 ][ j ]

0 1 2

0

1

2

0 0

0 0 0

0

00 0

0 1 2

0

1

2

1

1

1 0 0

0 0

00

0 1 2

0

1

2

1 1

1 2 1

0 0

0

1 0

2

0

2

0

2

1

2

0

2

1

2 122222

95

#include <stdio.h>const int n = 10;main() {int i, j, a[n][n]; // Inicializando os elementos de a.// Passos 1 e 2.for (i=0; i < n; i++)for (j=0; j < n; j++) if (j == 0)a[i][j] = 1;elsea[i][j] = 0;

// Demais elementos de a. Passo 3.for (i=1; i < n; i++)for (j=1; j <= i; j++) a[i][j] = a[i-1][j-1]+a[i-1][j];

Problema 2 – Pascal

7.2 Matrizes 7.2 Matrizes –– Problemas : Problema 2 – Pascal

// Mostrando os elementos de a.for (i=0; i < n; i++) { for (j=0; j < n; j++) printf(“ %4d ”,a[i][j]);

printf(“\n”);}} // fim programa

Problema 2 – Continuação

96

Problema 3: As notas de uma turma são armazenadas em uma matriz de forma que a i-ésima linha contém todas as 4notas bimestrais de um aluno. Supondo que o 1, 2, 3 e 4 bimestre possuem pesos 1, 2, 1 e 2, respectivamente, calculare mostrar a média de cada aluno.

7.2 Matrizes 7.2 Matrizes -- Problemas

Idéia do Programa

7.0 3.5 4.0 8.5

••• ••• ••• •••

2.0 5.5 7.0 9.5

* =5.8

6.5

Matriz alunos x notas Vetor pesos

Vetor médias

M1

Mm

••• ••• ••• •••

5.8

6.5

1

2

1

2

P1

P2

P3

P4

1

2

1

2

Aluno 1

• • • • •••• ••••

Aluno m

B1 B2 B3 B4

7.0 3.5 4.0 8.5

• • • • •••• ••••

2.0 5.5 7.0 9.5

Page 25: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

97

7.2 Matrizes 7.2 Matrizes -- Problemas

Como multiplicar uma matriz por um vetor ?

a11 a12 ••••••••••••

a21 a22 ••••••••••••

•••••••••••• •••••••••••• ••••••••••••

am1 am2 ••••••••••••

•••• v11

v21

••••••••••••

a1n

a2n

••••••••••••

amn vn1

= r11

r21

••••••••••••

rm1

Matriz m x n

Vetor n x 1

Vetor m x 1

a11 a12 •••••••••••• a1n

98

7.2 Matrizes 7.2 Matrizes -- Problemas

Como é calculado o i-ésimo elemento do vetor r ?

ri1 ai1 ai2 •••••••••••• ain •••• v11

v21

••••••••••••

vn1

=

1

1

1 k

n

k

iki var ∑=

= i = 1, ..., m

Primeiro laço

Segundo laço

99

#include <stdio.h>// Supondo uma classe com 10 alunos.const int m = 10;main() {int i, j, k; float soma;float a[m][4], r[m], p[4] = {1,2,1,2}; // Armazenando as notas.for (i=0; i < m; i++){ printf(“Aluno %d: ”, i+1); for (j=0; j < 4; j++) { printf(“\n Nota %d: ”,j+1);scanf(“%f”, &a[i][j]);

}}

Problema 3 – Notas// Calculo da media e resultado em r.for (i=0; i < m; i++) { soma = 0.0;// Media do aluno i: armazenar a // soma das k notas vezes k pesos.for (k=0; k < 4; k++) soma = soma + a[i][k]*p[k];

// Calculo da media do aluno i.r[i] = soma/6;

}// Mostrando a media de cada aluno.printf(“ Aluno Media \n“);for (i=0; i < m; i++)printf(“ %4d %4.2f \n”,i+1,r[i]);

} // fim programa

Problema 3 – Notas

7.2 Matrizes 7.2 Matrizes -- Problemas

100

Problema 4: Uma fazenda foi dividida em 3 regiões e para cada uma delas é armazenada em uma matriz a informação da produção, em toneladas de 4 tipos de culturas: milho, soja, feijão e arroz. Os dados de 1 ano são registrados em uma matriz A. Construir um programa que realize as seguintes tarefas:

(1) Ler os dados de produção de cada cultura em cada uma das regiões da fazenda.(2) Calcular a produção de grãos de cada região.(3) Calcular a produção de grãos de cada cultura.(4) Calcular o total de grãos produzidos pela fazenda.

7.2 Matrizes 7.2 Matrizes -- Problemas

Page 26: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

101

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

Idéia do Programa

Região 1

Região 2

Região 3

Milho Soja Feijão Arroz

3.0

1.0

2.0

4.0

5.0

6.0

2.0

4.0

3.0

3.0

2.0

5.0

Uma matriz 3x4 para os dados

Região 1

Região 2

Região 3

Milho Soja Feijão Arroz

Total cultura

Total região

12.0

12.0

16.0

6.0 15.0 9.0 10.0

3.0

1.0

2.0

4.0

5.0

6.0

2.0

4.0

3.0

3.0

2.0

5.0

102

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

#include <stdio.h>const int m = 3; const int n = 4;main() { int i, j, k; float a[m][n], r[m], c[n]; // Armazenando a produção em a.for (i=0; i < m; i++) { printf(“Regiao %d: ”, i+1); for (j=0; j < n; j++) { printf(“\n Cultura %d: ”,j+1);scanf(“%f”, &a[i][j]); } }

// Calculo do total para cada região.for (i=0; i < m; i++) { r[i] = 0.0; // Valor inicial.// Soma das culturas da região i. for (k=0; k < n; k++) r[i] = r[i] + a[i][k];

printf(“Regiao %d: %4f\n”,i+1,r[i]); }

Problema 4 – Fazenda // Calculo do total para cada cultura.for (j=0; j < n; j++) { c[j] = 0.0; // Valor inicial.// Soma da regiões da cultura i. for (k=0; k < m; k++) c[j] = c[j] + a[k][j];

printf(“Cultura %d: %4f\n”,j+1,c[j]); }} // fim programa

Problema 4 – Fazenda

103

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

ValorCobertura Vegetal

Entre 80% e 100%

Entre 60% e 80%

5

4

Entre 40% e 60% 3Entre 20% e 40% 2Entre 0% e 20% 1

Problema 5: Para monitorar o desmatamento de uma determinada área são utilizadas imagens produzidas por um satélite. Para tanto, é necessário dividir a área a ser monitorada em sub-áreas e depois atribuir um valor que indica o grau de cobertura vegetal existente em cada sub-área de acordo com a seguinte tabela

104

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

Ou seja, associa-se uma imagem a uma matriz de valores:

Assim, o cálculo do desmatamento de uma área, que consiste em se comparar as diferenças entre duas imagens da área

para anos diferentes, pode ser obtido com a soma das diferenças dos elementos de duas matrizes.

5

5

5

4

5

5

4

4

5

4

3

2

5

5

3

1

Page 27: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

105

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

5554

5543

5422

5421

Ano de 2007

5554

5544

5432

5531

Ano de 2006

- =0000

000-1

00-10

0-1-10

Matriz devariação dacobertura

vegetal

No caso acima pode-se dizer que o desmatamento entre 2006 e 2007

foi da ordem de 4 unidades.- 4 unidades

106

Problema 5: Utilizando as informações anteriores, construir um programa que, dadas duas matrizes A e B correspondentes

aos dados de cobertura vegetal de uma área em dois anos consecutivos, imprime uma matriz C de variação da cobertura

vegetal, bem como o total de unidades desmatadas. Supor A e B como dadas no exemplo abaixo:

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

5554

5543

5422

5421

5554

5544

5432

5531

- =0000

000-1

00-10

0-1-10

- 4 unidadesMatriz A Matriz B

107

7.2 Matrizes 7.2 Matrizes –– Problemas

#include <stdio.h>const int m = 4; const int n = 4;main() {int i, j, soma, c[m][n];

int a[m][n] = {{5,5,5,5}, {5,5,4,4}, {5,4,2,2}, {4,3,2,1}};

int b[m][n] = {{5,5,5,5}, {5,5,4,5}, {5,4,3,3}, {4,4,2,1}};

// Contabilizando desmatamento em c.for (i=0; i < m; i++)

for (j=0; j < n; j++) c[i][j] = a[i][j] - b[i][j];

// Mostrando a matriz c.

for (i=0; i < m; i++) { for (j=0; j < n; j++)

printf(“ %4d ”,c[i][j]); printf(“\n”); }

Problema 5 – Desmatamento

// Totalizando n. unidades

//desmatadas.

soma = 0;for (i=0; i < m; i++)

for (j=0; j < n; j++) soma = soma + c[i][j];

// Exibindo n. unidades desmatadas.

printf(“Cobertura Veg. = %d\n”,soma); } // fim programa

Problema 5 – Desmatamento

Resolvidos

108

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

Problema 6: Construir um programa que simule um jogo davelha. O programa deve cumprir os seguintes requisitos:(i) Permitir movimentos alternados de dois jogadores A e B.(ii) Identificar se um movimento pode ser realizado ou não.(iii) Identificar o término de um jogo, indicando as 3 possíveissituações: (1) A ganhou, (2) B ganhou, (3) Empate.(iv) Construir um tabuleiro que permita a representação dasjogadas tal como dado abaixo.

x

o

Espaço livreJogada de A

Jogada de B

Page 28: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

109

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

x

Requisito (i): Movimentos alternados de A e B.

0 x o

o o x

x x o

1

2 3

4

6

78

5

if (cont%2 == 0)// Movimento de A

else// Movimento de B

if (cont == 9)// Empate !

Requisito (iii): Identificar empate.

Variável contadora de jogadas válidas: cont.

110

Requisito (iv): Representação das jogadas.

. x .

o . .

. . .

Matriz de caracteres

Coordenadas: 0 1 Coluna 0

Linha 0

Linha 1

Linha 2

Coluna 1 Coluna 2

00

Coordenadas: 1 01

Caractere ‘.’1

Requisito (ii): Se a jogada pode ser realizada.

if (m[i][j] == ‘.’)

Pode fazer jogada

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

111

Requisito (iii): Situações de jogadas vencedoras.

x x x

x x x

x x x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

if (m[0][0] == ‘X’ && m[1][0] == ‘X’ && m[2][0] == ‘X’)

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

112

// Algoritmo Simples do Jogo da Velha.Passo 1: Criar matriz m de caracteres 3 x 3 cujos elementos são ‘.’.Passo 2: Mostrar estado atual da matriz.Passo 3: Enquanto (True) façaPasso 3.1: Verificar se jogador A fez jogada vencedora.

Se sim, pare. O jogador A venceu.Passo 3.2: Verificar se jogador B fez jogada vencedora.

Se sim, pare. O jogador B venceu.Passo 3.3: Verificar se a jogada atual é a décima.

Se sim, pare. Ocorreu empate. Passo 3.4: Capturar coordenadas i (linha) e j (coluna) da jogada.

Se i e j foram válidos então ( ou seja m[i][j]== ‘.’)Passo 3.4.1: Se (jogada de A) preencher a casa com a marca de ‘x’.

Senão preencher a casa com a marca ‘o’.Passo 3.4.2: Incrementar uma variável contadora de jogadas.

Problema 6 – Jogo da Velha – Algoritmo Simples

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

Page 29: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

113

#include <stdio.h>#include <stdlib.h>main() {char m[3][3]; int i, j, ci,cj,cont =0; const int TRUE = 1;const char O = 'o', X = 'x';printf("Digite lin col \n");// Inicializando a matriz m com ‘.’. for (i=1; i <= 3; i++)for (j=1; j <=3; j++)m[i][j] = '.';

while (TRUE) // Laço infinito.{// Mostrando a matriz m.for (i=1; i <= 3; i++) {

for (j=1; j <= 3; j++) printf(" %c ",m[i][j]);

printf("\n");}

Problema 6 – Jogo da Velha // Verificando se o jogador A ganhou.if ((m[1][1]==X && m[1][2]==X && m[1][3]==X) ||(m[2][1]==X && m[2][2]==X && m[2][3]==X) ||(m[1][1]==X && m[2][1]==X && m[3][1]==X) ||(m[1][2]==X && m[2][2]==X && m[3][2]==X) || (m[1][3]==X && m[2][3]==X && m[3][3]==X) || (m[3][1]==X && m[2][2]==X && m[1][3]==X) ||(m[1][1]==X && m[2][2]==X && m[3][3]==X) ){printf("Jogador A ganhou !!! \n"); break;}

// Verificando se o jogador B ganhou.if ((m[1][1]==O && m[1][2]==O && m[1][3]==O) ||(m[2][1]==O && m[2][2]==O && m[2][3]==O) ||(m[3][1]==O && m[3][2]==O && m[3][3]==O) ||(m[1][1]==O && m[2][1]==O && m[3][1]==O) ||(m[1][2]==O && m[2][2]==O && m[3][2]==O) || (m[1][3]==O && m[2][3]==O && m[3][3]==O) || (m[1][1]==O && m[2][2]==O && m[3][3]==O) ||(m[1][3]==O && m[2][2]==O && m[3][1]==O) )

{printf("Jogador B ganhou !!! \n\n"); break;}

Problema 6 – Jogo da Velha

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

114

if (cont == 9) // Sem jogadas.{ printf("\a Empatou !!! \n\n"); break;}

// Capturando nova jogada.printf("Digite as Coordenadas: ");scanf("%d %d",&ci,&cj);if (m[ci][cj] == '.') // Verifica se Casa está livre ?{

if (cont % 2 == 0) // O jogador A é quem jogou.m[ci][cj] = X;

else // O jogador B é quem jogou. m[ci][cj] = O;

// Contado o n. de jogadas.cont++;

} // Fim if que verifica casa livre.} // Fim do while.

} // Fim programa

Problema 6 – Jogo da Velha (Cont.)

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

115

Problema 7: Construir um programa que simule o jogo YuckyChoccy. O programa deve cumprir os seguintes requisitos:(i) Permitir movimentos alternados de dois jogadores A e B.(ii) Identificar se um movimento pode ser realizado ou não.(iii) Identificar o término de um jogo, indicando as 2 possíveissituações: (1) A ganhou, (2) B ganhou.(iv) Construir um tabuleiro que permita a representação dasjogadas tal como dado abaixo.

Barra de sabão

Jogada de A

Jogada de B

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

116

Requisito (iv): Representação das jogadas.

. x x

. x x

. x x

Matriz de caracteres

Coordenadas: 0 1 Coluna 0

Linha 0

Linha 1

Linha 2

Coluna 1 Coluna 2

00

Coordenadas: 1 01

Caractere ‘.’1

Requisito (ii): Se a jogada pode ser realizada.

if (m[i][j] == ‘.’)

Pode fazer jogada

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

Page 30: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

117

#include <stdio.h>main() {const int m = 4;char A[m][m]; int i, j, lin, col, cont =0; const char O = ‘o’, X = ‘x’;printf(“Digite linha e coluna \n”);// Inicializando a matriz m com ‘.’.for (i=0; i < m; i++)for (j=0; j < m; j++)A[i][j] = ‘.’;

while (1) // Laço infinito.{// Mostrando a matriz m.for (i=0; i < m; i++) { for (j=0; j < m; j++) printf(“ %c ”, A[i][j]);

printf(“\n”);}

Problema 7 – Yucky Choccy Problema 7 – Yucky Choccy// Capturando nova jogada.if (cont%2 == 0) printf(“Jogada de A: ”);else printf(“Jogada de B: ”);scanf(“%d %d”,&lin,&col);// Casa livre ?if (A[lin][col] == ‘.’ &&(lin == 0||col == 0) ) {// É a vez do jogador A.if (cont % 2 == 0) { // Verificando se A perdeu e B ganhou.if (lin == 0 && col == 0){printf(“ B ganhou ! \n”); break;} }

else

{ // Verificando se B perdeu e A ganhou.if (lin == 0 && col == 0){printf(“ A ganhou ! \n”); break;} }

// Contado o n. de jogadas.cont++; // Modificar elementos da matriz A para ‘x’.

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

118

// Apenas os seguintes elementos serão // modificados: da linha de i até m e da // coluna de i até m. for (i=lin; i < m; i++)for (j=col; j < m; j++)A[i][j] = ‘x’;

} // Fim if que verifica casa livre.} // Fim do while.

} // Fim main.

Problema 7 – Yucky Choccy (Cont.)

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

119

Figura 1Tabela 1

G QAV Nafta

17.4 4.3 2.1

7.1 12.3 8.2

2.1 0.3 35.6

Solo

Tabela 2

G

Insumo Valor

4.12

QAV 8.74

Nafta 3.78

Problema 8: Um veículo submarino autônomo é utilizado para realizar o mapeamento do leito oceânico de uma certa área e a mesma é dividida nas sub-áreas, dada na Figura 1. Cada subárea pode fornecer uma quantidade de insumos (Tabela 1), e cada insumo tem um valor (Tabela 2). Construir um programa que calcula o lucro que pode ser obtido em cada sub-área.

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

120

Passo 1:

2

3

1 1 2

1 2 2

31 3 3

2

3

1 1 2

1 2 2

31 3 3

Passo 2: Se área = 1:

17.4 4.3 2.1

6.1 12.3 8.2

2.1 0.3 35.6

* 4.12

8.74

3.78

Indíce da linha: 0

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

Page 31: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

121

#include <stdio.h>const int m = 3; const int n = 4;main() { int i, j, k; float s, C[m][n], v[m] = {4.12, 8.74, 3.78};

int A[m][n] = {{1,1,2,2}, {1,2,3,2}, {1,3,3,3}};

float B[m][m] = {{17.4, 4.3, 2.1}, {6.1, 12.3, 8.2}, {2.1, 0.3, 35.6}};

// Varrendo a matriz A e de acordo// com o valor A[i][j], calcular o valor// com B*v e guardar em C[i][j].for (i=0; i < m; i++) for (j=0; j < n; j++) { s = 0.0;for (k=0; k < m; k++) s = s + B[A[i][j]-1][k]*v[k];

C[i][j] = s; }

Problema 8 – Petróleo // Mostrando a matriz C com os lucros.printf(“Matriz de lucros \n”);for (i=0; i < m; i++) { for (j=0; j < n; j++) printf(“ [%7.2f] ”,C[i][j]);

printf(“\n”);

}

} // fim programa

Problema 8 – Petróleo

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

122

2

3

1 1 2

1 2 2

31 3 3

Resultado da Execução

7.2 Matrizes 7.2 Matrizes –– Problemas Resolvidos

123

7.3 Dados Estruturados: Strings 7.3 Dados Estruturados: Strings

7.3 Strings7.3 Strings

124

7.3 Strings 7.3 Strings -- Definições

� A linguagem C apresenta algumas limitações no que diz respeito ao tratamento da string, pois diferentemente das outras linguagem, em C a string não é um tipo básico

� Logo, em C não é possível atribuir uma string a uma variável ou concatenar uma string a outra utilizando os sinais de atribuição (=) e soma (+) como é possível nas outras linguagens

Definição: Na linguagem C uma string é um conjunto

de caracteres armazenados num vetor.

Page 32: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

125

7.3 Strings 7.3 Strings -- Definições

� Em C, as strings são representadas usando aspas, enquanto que os caracteres são representados entre aspas simples

Exemplos de strings Exemplos de caracteres

“Luis Carlos” ‘L’“Pedro Henrique” ‘>’“Receita de Bolo de Chocolate ” ‘B’

� Em C, declaração de strings obedece à sintaxe de declaração de vetores de caracteres.

� Para marcar o fim da string , é colocado na ultima posição do vetor, um marcador de final de string 126

� Então, em C, strings são seqüências de caracteres adjacentes na memória. O caractere ‘\0’ (= valor inteiro zero) indica o fim da seqüência.

7.3 Strings 7.3 Strings -- Definições

OBS: No exemplo acima o caractere de fim de seqüência ‘\0’

ocupa a primeira posição do vetor, porque ainda não foi

atribuído nenhum caractere ao mesmo.

str: \0

0 12

aluno

Exemplo 1: char aluno[13];• define um string de nome “aluno” e reserva para ele um

espaço de 13 (12 + ‘\0’) bytes na memória.

127

Exemplo 2: char nome[16] = “Pindamonhangaba”;

� define uma string de nome “nome”, reserva para ele um espaço de memória de 16 (15 + ‘\0’) bytes e o inicia com o texto indicado

0 15

P i n d a m o n h a n g a b a \0nome:

7.3 Strings 7.3 Strings -- Definições

� Os caracteres podem ser individualmente acessados porindexação:

� Exemplo 3: nome[0] = ‘P’;

nome[10] = ‘n’128

� A função printf pode ser utilizada para imprimir cada caractere da string s, ou verificando se n caracteres foram percorridos, ou verificando se o caractere ‘\0’ foi encontrado.

7.3 Strings 7.3 Strings –– Leitura e Impressão de Strings

#include <stdio.h>const int n = 100;main() {

int i; char s[n] = “Uma string tipica.”;// Varrendo cada componente do

//vetor e imprimindo até que i < n.

for (i=0; i < 18; i++) printf(“%c”,s[i]);

}

Exemplo 4 – Usando n#include <stdio.h>const int n = 100;main() {

int i; char s[n] = “Uma string tipica.”;// Varrendo cada componente do

// vetor e imprimindo até // que s[i] == ‘\0’.

for (i=0; s[i] != ‘\0’; i++) printf(“%c”,s[i]);

}

Exemplo 5 – Usando ‘\0’

Page 33: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

129

7.3 Strings 7.3 Strings –– Entradas e Saídas de Strings

� A função printf pode também utilizar a tag %s que éválida para imprimir strings. A função puts também pode ser utilizada para imprimir o conteúdo de strings.

#include <stdio.h>const int n = 100;main() { int i; char s[n] = “Uma string tipica.”;// Usando a tag %s e printf.printf(“%s”, s);

}

Exemplo 6 – Printf + %s

printf(“%s”,s);

#include <stdio.h>const int n = 100;main() { int i; char s[n] = “Uma string tipica.”;// Impressão usando puts.puts(s);

}

Exemplo 7 – Puts

puts(s); 130

7.3 Strings 7.3 Strings –– Entradas e Saídas de Strings

� A função scanf pode ser usada com a tag %s, mas se ela encontrar <TAB>, <ESPAÇO> ou <ENTER> a leitura será interrompida.

#include <stdio.h>const int n = 100;main() { int i; char s[n];printf(“Entre com uma string:”);scanf(“%s”,s);printf(“\n String digitada: %s”,s);

}

Exemplo 8 – Scanf

Palavra Digitada é:“a vida eh bela !”

Só armazenou:

“a”

OBS: Na leitura das variáveis string com a função scanf não se utiliza o &

131

7.3 Strings 7.3 Strings –– Entradas e Saídas de Strings

� A função gets pode ser empregada sem se utilizar a tag%s e só ao encontrar <ENTER> a leitura da string será interrompida.

#include <stdio.h>const int n = 100;main() { int i; char s[n];printf(“Entre com uma string:”);gets(s);printf(“\n String digitada: %s”,s);

}

Exemplo 9 – gets

Palavra Digitada:“a vida eh bela !”

Armazenou:

“a vida eh bela !”

132

7.3 Strings 7.3 Strings –– Problemas

Problema 1: Determinar o tamanho de uma string, ou seja, determinar o número de caracteres que ela possui sem contaro caractere especial que delimita o final da string, ‘\0’.

A V i d a e h b e l a !

Digite uma string: A vida eh bela!Tamanho da string: 15

Exemplo de Execução:

‘\0’

Os espaços também são contabilizados !

Não contabilizar e indica final da contagem !

Page 34: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

133

#include <stdio.h>const int m = 100; main() { int i, soma=0; char s[m]; printf(“Digite uma string: ”);gets(s);// Varrendo string até encontrar ‘\0’. for (i=0; s[i] != ‘\0’; i++)

soma++;// Impressão do número de carac-

//teres ou seja do tamanho da string.printf(“Tamanho: %d \n”,soma);

}

Problema 1 – Tamanho String

7.3 Strings 7.3 Strings –– Problemas

Exemplo de Execução

for (i=0; s[i] != ‘\0’; i++) 134

7.3 Strings 7.3 Strings –– Problemas

Problema 2: Dada uma string e um caractere digitados pelo usuário, mostrar o número de ocorrências do caractere naString. Um exemplo de execução do programa é como dado:

A V i d a e h b e l a !String

Número de ocorrências: 2

Digite uma string: A vida eh bela !Digite um caractere: aNúmero de ocorrências: 2

Exemplo de Execução:

Caractere a

135

7.3 Strings 7.3 Strings –– Problemas

#include <stdio.h>const int m = 100; main() {

int i, soma=0; char ch, s[m]; printf(“Digite uma string: ”);gets(s);printf(“Digite um caractere:”);scanf(“%c”,&ch);// Varrendo string até encontrar ‘\0’. for (i=0; s[i] != ‘\0’; i++)

if (s[i] == ch)soma++;

// Impressão do número de carac //teres ou seja o tamanho da string.

printf(“Ocorrencias: %d \n”,soma); }

Problema 2 – OcorrênciasExemplo de Execução

for (i=0; s[i] != ‘\0’; i++)if (s[i] == ch)

136

7.3 Strings 7.3 Strings –– Problemas

Problema 3: Modificar o Problema 2 de modo que o caractereseja contabilizado independentemente se ele é maiúsculo ou minúsculo. Um exemplo de execução do programa é dado por:

A V i d a e h b e l a !

Caractere a

String

Número de ocorrências: 3

Digite uma string: A vida eh bela !Digite um caractere: aNúmero de ocorrências: 3

Exemplo de Execução:

Page 35: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

137

7.3 Strings 7.3 Strings –– Problemas

#include <stdio.h>#include <ctype.h>const int m = 100; main() { int i, soma=0; char ch, s[m]; printf(“Digite uma string: ”);gets(s);printf(“Digite um caractere:”);scanf(“%c”,&ch);// Varrendo string até encontrar ‘\0’. for (i=0; s[i] != ‘\0’; i++) if (toupper(s[i]) == toupper(ch))soma++;

// Impressão do número de caracteres// ou seja o tamanho da string.printf(“Ocorrencias: %d \n”,soma);

}

Problema 3 – Ocorrências Mod

if (toupper(s[i]) == toupper(ch))

Exemplo de Execução

Lembrando que o comando toupper(c) transforma as letras minúsculascontidas em C, em maiúsculas

138

7.3 Strings 7.3 Strings –– Problemas

Problema 4: Construir um programa que substitui todas as ocorrências de um caractere ch1 em uma string por um caractere ch2 :

R E D C o d

Caractere ch1 e

String

Digite uma string: RED Code!Digite ch1 e ch2: e *Nova string: R*d Cod*

Exemplo de Execução:

e

R * D C o d

Caractere ch2 *

String *

139

7.3 Strings 7.3 Strings –– Problemas

#include <stdio.h>#include <ctype.h>const int m = 100; main() {

int i; char ch1, ch2, s[m]; printf(“Digite uma string: ”);gets(s);printf(“Digite ch1 e ch2:”);scanf(“%c%c”,&ch1,&ch2);//Varrendo string até encontrar ‘\0’. for (i=0; s[i] != ‘\0’; i++)

if (toupper(s[i]) == toupper(ch1))s[i] = ch2;

// Impressão do número de carac // teres ou seja o tamanho da string.

printf(“Nova string %s \n”,s); }

Problema 4 – Substituição Exemplo de Execução

if (toupper(s[i]) == toupper(ch))s[i] = ch2;

140

7.3 Strings 7.3 Strings –– Problemas

Problema 5: Construir um programa que contabiliza todas as ocorrências de uma sub-string s1 em uma string s2.

t r e s p r

Sub-string s1

String s2

Digite a string: tres pratos de trigo para tres tigres tristesDigite a sub-string: tr Frequencia:4

Exemplo de Execução:

a t o s ••••••••••••

t r

Page 36: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

141

7.3 Strings 7.3 Strings –– Problemas

#include <stdio.h>#include <ctype.h>const int m = 100; main() {int i, j, k, soma = 0; char s1[m], s2[m]; printf("Digite a string: ");gets(s1);printf("Digite substring:");gets(s2);// Varrendo string s1 até achar ‘\0’.for (i=0; s1[i]!='\0'; i++) { j= 0; k = i;// Procura s2 em s1 a partir de i.while (s2[j] == s1[k]){ j++; k++; }if (s2[j] == '\0')soma++; } // fim for

printf("Ocorrencias: %d \n",soma); getchar(); // para parar a tela

}

Problema 5 – Substring

if (s2[j] == ‘\0’)soma++;

Exemplo de Execução

j=0; k = i;while (s2[j] == s1[k])

{j++; k++;}

142

�A biblioteca padrão do C possui diversas funções que manipulam strings.

�Estas funções são úteis, pois não se pode, por exemplo, igualar duas strings:

string1 = string2; /* NAO faca isto */

7.3 7.3 StringsStrings –– Algumas funções

� Igualar duas strings é um desastre. Quando você estudar o capítulo que trata de ponteiros você entenderá por que. As strings devem ser igualadas elemento a elemento.

� As funções apresentadas nestas seções estão no arquivo cabeçalho string.h.

143

1. Função strcpy() → Sintaxestrcpy(destino,origem);

Copia o conteúdo da string origem, na string destino

7.3 7.3 StringsStrings –– Algumas funções

Ex:main(){char str[80];strcpy(str,"alo");puts(str);}

Neste exemplo a função strcpy vai copiar a string “alo” na variável str[ ].

A seguir o puts vai imprimir a string que está armazenada em str[ ].

144

2. Função strcat() → Sintaxestrcat(string1,string2);

Concatena a string2 no final da string1. Não verifica tamanho

7.3 7.3 StringsStrings –– Algumas funções

Ex:main(){char um[20],dois[10];strcpy(um,"bom");strcpy(dois," dia");strcat(um,dois);printf("%s\n",um);}

Neste exemplo a função strcpy vai copiar a string “bom” na variável um[ ], e a string “dia” na variável dois[ ].

A seguir a função strcat ()vai concatenar as duas strings colocando-as na variável um[ ]. O printf vai então, imprimir a frase ”bom dia”.

Page 37: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

145

3. Função strcmp() → Sintaxe:strcmp(s1,s2);

Compara a string s2 com s1. Se elas forem iguais, devolve o valor 0.

7.3 7.3 StringsStrings –– Algumas funções

Ex:main(){char s[80];printf("Digite a senha:");gets(s);if (strcmp(s,"laranja"))printf("senha inválida\n");elseprintf("senha ok!\n") ;}

Neste exemplo o gets(s) vai armazenar a palavra digitada na variável s. A funçãostrcmp vai comparar a palavra digitada com a string “laranja”. Se elas forem diferentes, vai ser impresso a frase “senha invalida”. Se elas forem iguais vai ser impresso a frase ”senha ok! ”.

146

4. Função strlen( ) → Sintaxe:strlen (string);

A função strlen() retorna o comprimento da string fornecida. O terminador nulo “\0” não é contado. Isto quer dizer que, de fato, o comprimento do vetor da string deve ser um a mais que o inteiro retornado por strlen().

7.3 7.3 StringsStrings –– Algumas funções

Ex:#include#include#include#include <<<<stdiostdiostdiostdio.h>.h>.h>.h>#include <string.h>#include <string.h>#include <string.h>#include <string.h>

int main (){int size; char str[100];printf ("Entre com uma string: ");gets (str);size=strlen (str);printf ("\n\nA string que voce digitou tem tamanho %d",size);return(0);}

147

7.3 7.3 StringsStrings –– MaisMais funções

Converte todos os caracteres de uma string para maiúsculas.

strupr

Converte todos os caracteres de uma string para minúsculas.

strlwr

Procura uma string dentro da outra.strstr

Procura um caractere numa string.strchr

Faz a mesma coisa que a função strcmp(comparação de strings) mas ignorando se os caracteres estão em maiúsculas ou minúsculas.

stricmp

DescriçãoFunção

148

7.3 7.3 StringsStrings –– Matrizes de strings

Matrizes de strings

� Matrizes de strings são matrizes bidimensionais. Imagine uma string. Ela é um vetor. Se fizermos um vetor de stringsestaremos fazendo uma lista de vetores. Esta estrutura é uma matriz bidimensional de chars.

� A forma geral de uma matriz de strings é:

char nome_da_variável [num_de_strings][compr_das_strings];

Aí surge a pergunta: como acessar uma string individual?

Fácil. É só usar apenas o primeiro índice.

Então, para acessar uma determinada string faça:

nome_da_variável [índice]

Page 38: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

149

Exemplo1: Usando uma Matriz de strings, faça um programa que leia 5 strings e as exiba na tela.

7.3 7.3 StringsStrings –– Matrizes de strings

#include <stdio.h>main (){ char Mat_strings [5][100];

int count;for (count=0;count<5;count++){

printf ("\n\nDigite uma string: ");gets (Mat_strings[count]);

}printf ("\n\n\n As strings que voce digitou foram:\n\n");for (count=0;count<5;count++)

printf("%s\n",Mat_strings[count]);getchar();

} 150

7.3 7.3 StringsStrings –– Matrizes de strings

Exemplo 2: Refazer o Exemplo 1 usando o comando scanf para ler a Matriz de strings, para tanto vocêprecisa ler a matriz elemento a elemento, isto é a matriz será lida como caractere.

Solução

151

7.3 7.3 StringsStrings –– Matrizes de strings - Exemplo 2:

#include <stdio.h> #include <conio.h> // biblioteca para usar o comando getche

main (){char strings [3][100];char pare;int j, count;for (count=0;count<3;count++){

printf ("\nDigite uma string com enter no final\n ");j=0;strings[count][j]=getche(); //lê caractere a caracterewhile ((j < 99 )&&(int(strings[count][j]) != 10))

{ j++;strings[count][j]=getche();

}strings[count][j] ='\0';

}printf ("\n\n\nAs strings que voce digitou foram:\n\n");for (count=0;count<3;count++)

printf ("%s\n",strings[count]);getchar();

}

Utilizando o getche para ler

152

#include <stdio.h> main (){ char strings [3][100];char pare;int j, count;for (count=0;count<3;count++){

printf ("\n\nDigite uma string com enter no final \n ");j=0;scanf("%c",&strings[count][j]);while ((j < 99 )&&(int(strings[count][j]) != 10))

{ j++;scanf("%c",&strings[count][j]);

}strings[count][j] = '\0';

}printf ("\n\n\nAs strings que voce digitou foram:\n\n");for (count=0;count<3;count++)

printf ("%s\n",strings[count]);getchar();

}

Utilizando scanf para ler

7.3 7.3 StringsStrings –– Matrizes de strings - Exemplo 2:

Page 39: 7.1 Dados Estruturados: Array 7. Dados Estruturados Array ... · Para somar todos os elementos da Lista: soma ←0 para i ... 7.1 Array - Definição 8 7.1Array - Características

153

Uma editora deve produzir vários livros e por esta razão ela deseja fazer um relatório contendo: Titulo do Livro a ser editado, numero de páginas, previsão de quantos livros serão vendidos, e o preço de venda de cada exemplar

O preço de venda é calculado com base no custo total de produção acrescido de 20%. O custo total de produção é dado pela formula abaixo:

custo_produção = custo_fixo + ( previsão_vendas* no._paginas* custo_pagina)

preço_venda = (custo_produção/previsão_vendas) * 1.20

Fazer um Programa em C que leia a quantidade de títulos a serem produzidos e os dados relativos a cada título e imprima o relatório desejado.

7.3 7.3 StringsStrings –– Matrizes de strings - Exemplo 3Exemplo 3

154

#include <stdlib.h>#include <stdio.h>main(){int i, j, k,ntitulo;char titulo[100][150];int vendas_previ[150],npage[150];float Preco_Venda[150],

custo_prod[150],c_fixo[150];float c_page[150];printf(" Digite o numero de titulos: ");scanf("%d", &ntitulo);printf("\n\n");//Ler os dados de cada livrofor(i=0; i<ntitulo; i++){ fflush(stdin); printf("Digite o titulo do %d livro:",i+1);gets(titulo[i]);

printf("Digite o numero de paginas destelivro: ");

scanf("%d", &npage[i]);printf("Digite o custo fixo: ");scanf("%f",&c_fixo[i]);printf(“Qual a previsao de vendas ");scanf("%d", &vendas_previ[i]);printf("Digite o custo de cada pagina: ");scanf("%f",&c_page[i]);printf("\n\n\n");

}for (i=0; i< ntitulo; i++){//Calcular custos de produçãocusto_prod[i]=c_fixo[i]+vendas_previ[i] *

npage[i] * c_page[i];//Calcular o preço de venda]Preco_Venda[i]=(custo_prod[i]/

vendas_previ[i])*1.2;}

7.3 7.3 StringsStrings –– Matrizes de strings - Exemplo 3Exemplo 3

155

// Imprimir relatórioprintf("Título Previsao de Venda Preco Unitario No.pag\n");for(i=0; i < ntitulo; i++) {printf("%s\t\t%d\t\t%.2f\t\t%d\n", titulo[i], vendas_previ[i],Preco_Venda[i],npage[i]);

}system("pause");}

7.3 7.3 StringsStrings –– Matrizes de strings - Exemplo 3Exemplo 3

156

Fim

StringsStrings

7.3 Strings 7.3 Strings –– Problemas