terça-feira, 24 de março de 2020

Raíz, potência perfeita e Números espelhos




============================================
Números espelhos III
============================================
UNB-Matemática
Autor: Luiz Augusto Prado 1807787/DF
Blog: tivideotutoriais.blogspot.com

Até o momento vimos:
- Raíz Perfeita
- Potência Perfeita
- Algumas propriedades dos números espelhos.

Vamos continuar estudando e apresentando novas propriedades dos números espelhos.

Números espelhos seguem um padrão. Para todos os números espelhos existe um n que satisfaça:
a = [n/(n+1)]n+1 que está abaixo de 1/e
b = [n/(n+1)]n está entre 1/e e 1

∀ n ∈ ℝ+
Se n → ∞+ então
a → 1/e pela esquerda
b → 1/e pela direita
aa = bb → 1/e1/e pela direita

Exemplo: Se n=100000
→ a = [n/(n+1)]n+1= 0.3678776017869739 → aa = 0.6922006275585294 > 0.6922006275553464
→ b = [n/(n+1) ] n = 0.36788128056299174 → bb = 0.6922006275585294 > 0.6922006275553464

∀ n ∈ ℝ+
Se n → 0+ então
a → 0+ pela direita
b → 1- pela equerda
aa = bb → 1- pela esquerda

Exemplo: Se n=0.0001
→ a = [n/(n+1)]n+1= 0.0000998979482045963 → aa = 0.9990802271454703 < 1
→ b = [n/(n+1) ] n = 0.9990793799941674 → bb = 0.9990802271454703 < 1

b/a= ln(a)/ln(b) = (n+1)/n = n [ ln(n+1) - ln(n) ] / ln(n)
a/b= ln(b)/ln(a) = n/(n+1)= n-[ ln(n+1) - ln(n) ] / ln(n)

Note que se n=1 não existirá potência que o eleve que dê resultado diferente de 1. Portanto não podemos utilizar formulas onde ln(1)=0 façam divisão.

Se k = 1/n + 1 , também podemos ter as equivalencias abaixo:
b/a+a/b= (2n2+2n+1)/(n2+n) = ([1/n + 1]2+1) / (1/n + 1)= (k2+1) / k
b/a-a/b= (2n+1)/(n2+n) = ([1/n + 1]2 - 1) / (1/n + 1)= (k2 - 1) / k

Se a/b= n/(n+1)
a = [ n/(n+1)]n+1= [a/b]n+1
b = [ n/(n+1) ] n = [a/b]n

Se temos:
a = [n/(n+1)]n+1
b = [n/(n+1)]n
E se existe um z que satisfaça as equivalências:
b = z*a → z=b/a = (n+1)/n
b = a1/z → ln(b)=ln(a)/z
z = b/a = ln(a)/ln(b) = (n+1)/n
Então podemos dizer que:
b = [n/(n+1)]n = z*[n/(n+1)]n+1
b = [n/(n+1)]n = [n/(n+1)](n+1)/z

Encontrar o n de qualquer número espelho

Supondo que a ou b seja dado, e sabemos ser um espelho, se não tivermos o eu par, basta realizar o√(s') para obter os dois espelhos a e b. Podemos isolar n sabendo que:
b/a= (n+1)/n
a/b= n/(n+1)
Supondo que:
b/a = x
a/b = y
então:
(n+1)/n = x → (n+1)=n*x → x*n-n=1 → (x-1)*n=1 → n=1/(x-1)
n/(n+1) = y → n=y*(n+1) → n=y*n+y → (y-1)*n=-y → n=-y/(y-1)
Portanto:
n = 1/([b/a]-1) ou
n =-[a/b]/([a/b]-1)

Supondo que a=0.214071977364008 e b=0.5470728310413537
→ b/a = x = 23/9
→ a/b = y = 9/23
(n+1)/n = 23/9 → n=1/([23/9]-1) → n=1/([23/9]-1) → n=9/14
n/(n+1) = 9/23 → n= [-9/23]/(-14/23) → n=9/14

Encontrando j tal que b/a=nj:

Lembrando que b/a=(n+1)/n veja alguns polinômios:

x2 -x -1 = 0 tem raiz = 1.618033988749895
x3 -x -1 = 0 tem raiz = 1.324717957244746
x4 -x -1 = 0 tem raiz = 1.2207440846057596
x5 -x -1 = 0 tem raiz = 1.1673039782614187

Se n=1.618033988749895, b/a=n
Se n=1.324717957244746, b/a=n2
Se n=1.220744084605759, b/a=n3
Se n=1.167303978261418, b/a=n4

Se para qualquer b/a = (n+1)/n = nj Qual seria o j para qualquer n?
Solução:
Se b/a=nj → j*ln(n)=ln(b/a) → j=ln(b/a)/ln(n)
Se (n+1)/n=nj → j*ln(n)=ln([n+1]/n) → j=[ln(n+1)-ln(n)]/ln(n)

Supondo que n=2 encontre b/a e j tal que b/a=2j
Solução:
Se j=[ln(n+1)-ln(n)]/ln(n) → j=[ln(2+1)-ln(2)]/ln(2) → j=0.5849625007211561
Se b/a=nj → b/a=20.5849625007211561 → b/a=1.5




APÊNDICE: Lista de alguns resultados interessantes:

Raízes de alguns polinômios na forma xn -x -1 = 0
Encontrando j tal que b/a=nj:
Para n de 1 até 6
Para 1/n com n de 2 até 6
Para vários n relacionados à Pi
Para vários n relacionados à e
Para vários n relacionados com o número aureo (x tal que x2=x+1)
Para vários n relacionados com x tal que x3=x+1
Para vários n relacionados com k tal que kk=e
Alguns b/a+a/b
Alguns b/a-a/b

Raízes de alguns polinômios na forma xn -x -1 = 0

É interessante notar que uma raíz de x5-x4-1 = 0 é igual a raiz de x3-x-1 = 0

Se n = 2 : x2-x-1 = 0     → tem raiz = 1.618033988749895 →     1/(x-1) = 1.6180339887498947
Se n = 3 : x3-x-1 = 0     → tem raiz = 1.3247179572447458 →     1/(x-1) = 3.0795956234914406
Se n = 4 : x4-x-1 = 0     → tem raiz = 1.2207440846057596 →     1/(x-1) = 4.530132718101876
Se n = 5 : x5-x-1 = 0     → tem raiz = 1.1673039782614187 →     1/(x-1) = 5.977144180262483
Se n = 6 : x6-x-1 = 0     → tem raiz = 1.1347241384015194 →     1/(x-1) = 7.4225748397046125
Se n = 7 : x7-x-1 = 0     → tem raiz = 1.1127756842787055 →     1/(x-1) = 8.86715967538422
Se n = 8 : x8-x-1 = 0     → tem raiz = 1.0969815577985598 →     1/(x-1) = 10.31123878291477
Se n = 9 : x9-x-1 = 0     → tem raiz = 1.0850702454914507 →     1/(x-1) = 11.754991351241568
Se n = 10 : x10-x-1 = 0     → tem raiz = 1.0757660660868371 →     1/(x-1) = 13.198520810805705
Se n = 11 : x11-x-1 = 0     → tem raiz = 1.0682971889208412 →     1/(x-1) = 14.641891061710224
Se n = 12 : x12-x-1 = 0     → tem raiz = 1.062169167864255 →     1/(x-1) = 16.085143719206222

Encontrando os j tal que b/a=nj:

x=0.2360679774997897 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 0.10557024685139227 → b/a=1.1909830056250525
x=0.38196601125010515 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 0.18977560319749973 → b/a=1.276393202250021
x=0.6180339887498949 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 0.3361379690922773 → b/a=1.381966011250105
x=1.0000000000000002 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 0.5849625007211563 → b/a=1.5
x=1.6180339887498953 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 1.0000000000000004 → b/a=1.618033988749895
x=2.618033988749896 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 1.6828657492940997 → b/a=1.723606797749979
x=3.0795956234914392 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 2.0000000000000004 → b/a=1.754877666246693
x=4.530132718101875 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 2.9999999999999987 → b/a=1.8191725133961643
x=5.977144180262484 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 3.999999999999999 → b/a=1.856674883854503
x=7.422574839704613 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 5.000000000000003 → b/a=1.8812714616335697
x=8.867159675384224 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 5.9999999999999964 → b/a=1.8986537126286993
x=10.311238782914769 → n=1+1/x → j=[ ln(n+1)-ln(n) ] / ln(n) = 7.000000000000004 → b/a=1.9115923534820551


Se n = 2.23606797749979 (raiz de 5):

n = 2.23606797749979
a = [n/(n+1)]n+1 = 0.30234687528635806
b = [n/(n+1)]n = 0.4375605084713476
aa= bb = 0.6965181799966349
b/a = (n+1)/n = ln(a)/ln(b) = 1.4472135954999579
a/b = n/(n+1) = ln(b)/ln(a) = 0.6909830056250525
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.1381966011250104
b/a-a/b= (2n+1)/(n2+n) = 0.7562305898749053


Para n=aureo: Mesmo n onde n2=n+1:


Se n = 1.618033988749895 (Número Aureo):

n = 1.618033988749895
a = [n/(n+1)]n+1 = 0.2837025599424474
b = [n/(n+1)]n = 0.4590403846822343
aa= bb = 0.699480971720873
b/a = (n+1)/n = ln(a)/ln(b) = 1.618033988749895
a/b = n/(n+1) = ln(b)/ln(a) = 0.6180339887498949
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.23606797749979
b/a-a/b= (2n+1)/(n2+n) = 1


Para n=1.3247179572447463: Mesmo n onde n3=n+1:


Se n = 1.3247179572447463 :

n = 1.3247179572447463
a = [n/(n+1)]n+1 = 0.2705172532293568
b = [n/(n+1)]n = 0.4747246860265993
aa= bb = 0.7020999508903193
b/a = (n+1)/n = ln(a)/ln(b) = 1.7548776662466927
a/b = n/(n+1) = ln(b)/ln(a) = 0.5698402909980533
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.3247179572447463
b/a-a/b= (2n+1)/(n2+n) = 1.1850373752486394
n = 2√b / 2√a = 1.3247179572447463
n2= b/a = (n+1)/n = 1.7548776662466927
1/n2= a/b = n/(n+1) = 0.5698402909980533
2√b/n= 2√a = 0.5201127312702092
n*2√a= 2√b = 0.689002674905257
n2 + 1/n2= b/a+a/b = (2n2+2n+1)/(n2+n) = 2.3247179572447463
n2 - 1/n2= b/a-a/b = (2n+1)/(n2+n) = 1.1850373752486394


Para n=1.2207440846057596: Mesmo n onde n4=n+1:


Se n = 1.2207440846057596 :

n = 1.2207440846057596
a = [n/(n+1)]n+1 = 0.264780870793223
b = [n/(n+1)]n = 0.48168208222013253
aa= bb = 0.7033822636267789
b/a = (n+1)/n = ln(a)/ln(b) = 1.8191725133961645
a/b = n/(n+1) = ln(b)/ln(a) = 0.5497004779019703
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.368872991298135
b/a-a/b= (2n+1)/(n2+n) = 1.2694720354941942
n = 3√b / 3√a = 1.2207440846057596
n3= b/a = (n+1)/n = 1.8191725133961645
1/n3= a/b = n/(n+1) = 0.5497004779019703
3√b/n= 3√a = 0.6421387358103625
n*3√a= 3√b = 0.7838870632367206
n3 + 1/n3= b/a+a/b = (2n2+2n+1)/(n2+n) = 2.368872991298135
n3 - 1/n3= b/a-a/b = (2n+1)/(n2+n) = 1.2694720354941942


Usando valores de algumas tangentes


Se n = 1 1:

n = 1
a = [n/(n+1)]n+1 = 0.25
b = [n/(n+1)]n = 0.5
aa= bb = 0.7071067811865476
b/a = (n+1)/n = ln(a)/ln(b) = 2
a/b = n/(n+1) = ln(b)/ln(a) = 0.5
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.5
b/a-a/b= (2n+1)/(n2+n) = 1.5


Se n = 0.4142135623730951 1/(√2+1):

n = 0.4142135623730951
a = [n/(n+1)]n+1 = 0.17612178693664823
b = [n/(n+1)]n = 0.601317393588489
aa= bb = 0.7364974585056316
b/a = (n+1)/n = ln(a)/ln(b) = 3.414213562373095
a/b = n/(n+1) = ln(b)/ln(a) = 0.2928932188134525
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.7071067811865475
b/a-a/b= (2n+1)/(n2+n) = 3.1213203435596424


Se n = 0.2679491924311227 1/(√3+2):

n = 0.2679491924311227
a = [n/(n+1)]n+1 = 0.13933866964726338
b = [n/(n+1)]n = 0.6593576642299059
aa= bb = 0.7598643749205355
b/a = (n+1)/n = ln(a)/ln(b) = 4.732050807568878
a/b = n/(n+1) = ln(b)/ln(a) = 0.21132486540518708
b/a+a/b= (2n2+2n+1)/(n2+n) = 4.9433756729740645
b/a-a/b= (2n+1)/(n2+n) = 4.520725942163691


Se n = 0.198912367379658 tan(45/4):

n = 0.198912367379658
a = [n/(n+1)]n+1 = 0.11606404582325999
b = [n/(n+1)]n = 0.6995574070064391
aa= bb = 0.778834231749376
b/a = (n+1)/n = ln(a)/ln(b) = 6.027339492125848
a/b = n/(n+1) = ln(b)/ln(a) = 0.16591068104035053
b/a+a/b= (2n2+2n+1)/(n2+n) = 6.193250173166199
b/a-a/b= (2n+1)/(n2+n) = 5.8614288110854975

------


Se n = 1 1:

n = 1
a = [n/(n+1)]n+1 = 0.25
b = [n/(n+1)]n = 0.5
aa= bb = 0.7071067811865476
b/a = (n+1)/n = ln(a)/ln(b) = 2
a/b = n/(n+1) = ln(b)/ln(a) = 0.5
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.5
b/a-a/b= (2n+1)/(n2+n) = 1.5


Se n = 2.414213562373095 (√2+1):

n = 2.414213562373095
a = [n/(n+1)]n+1 = 0.3062736632680329
b = [n/(n+1)]n = 0.43313636839134256
aa= bb = 0.6959994892750379
b/a = (n+1)/n = ln(a)/ln(b) = 1.4142135623730951
a/b = n/(n+1) = ln(b)/ln(a) = 0.7071067811865475
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.121320343559643
b/a-a/b= (2n+1)/(n2+n) = 0.7071067811865477


Se n = 3.732050807568877 (√3+2):

n = 3.732050807568877
a = [n/(n+1)]n+1 = 0.32517473927676577
b = [n/(n+1)]n = 0.412305048064976
aa= bb = 0.6939891935148583
b/a = (n+1)/n = ln(a)/ln(b) = 1.2679491924311226
a/b = n/(n+1) = ln(b)/ln(a) = 0.788675134594813
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.0566243270259355
b/a-a/b= (2n+1)/(n2+n) = 0.4792740578363096


Se n = 5.027339492125848 1/[1.198912367379658-1]:

n = 5.027339492125848
a = [n/(n+1)]n+1 = 0.33505904806883746
b = [n/(n+1)]n = 0.4017064365321846
aa= bb = 0.6932463819597379
b/a = (n+1)/n = ln(a)/ln(b) = 1.198912367379658
a/b = n/(n+1) = ln(b)/ln(a) = 0.8340893189596494
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.0330016863393077
b/a-a/b= (2n+1)/(n2+n) = 0.36482304842000857


Alguns exemplos interessantes de n:

Para n de 1 até 6:


Se n = 1 (Um):

n = 1
a = [n/(n+1)]n+1 = 0.25
b = [n/(n+1)]n = 0.5
aa= bb = 0.7071067811865476
b/a = (n+1)/n = ln(a)/ln(b) = 2
a/b = n/(n+1) = ln(b)/ln(a) = 0.5
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.5
b/a-a/b= (2n+1)/(n2+n) = 1.5


Se n = 2 (Dois):

n = 2
a = [n/(n+1)]n+1 = 0.2962962962962962
b = [n/(n+1)]n = 0.4444444444444444
aa= bb = 0.697387945762143
b/a = (n+1)/n = ln(a)/ln(b) = 1.5
a/b = n/(n+1) = ln(b)/ln(a) = 0.6666666666666666
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.1666666666666665
b/a-a/b= (2n+1)/(n2+n) = 0.8333333333333334


Se n = 3 (Três):

n = 3
a = [n/(n+1)]n+1 = 0.31640625
b = [n/(n+1)]n = 0.421875
aa= bb = 0.6948233607279168
b/a = (n+1)/n = ln(a)/ln(b) = 1.3333333333333333
a/b = n/(n+1) = ln(b)/ln(a) = 0.75
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.083333333333333
b/a-a/b= (2n+1)/(n2+n) = 0.5833333333333333


Se n = 4 (Quatro):

n = 4
a = [n/(n+1)]n+1 = 0.3276800000000001
b = [n/(n+1)]n = 0.4096000000000001
aa= bb = 0.6937813717015524
b/a = (n+1)/n = ln(a)/ln(b) = 1.25
a/b = n/(n+1) = ln(b)/ln(a) = 0.8
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.05
b/a-a/b= (2n+1)/(n2+n) = 0.44999999999999996


Se n = 5 (Cinco):

n = 5
a = [n/(n+1)]n+1 = 0.3348979766803842
b = [n/(n+1)]n = 0.401877572016461
aa= bb = 0.693256843543474
b/a = (n+1)/n = ln(a)/ln(b) = 1.2
a/b = n/(n+1) = ln(b)/ln(a) = 0.8333333333333334
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.033333333333333
b/a-a/b= (2n+1)/(n2+n) = 0.3666666666666666


Se n = 6 (Seis):

n = 6
a = [n/(n+1)]n+1 = 0.3399166770891136
b = [n/(n+1)]n = 0.3965694566039659
aa= bb = 0.6929560456422869
b/a = (n+1)/n = ln(a)/ln(b) = 1.1666666666666667
a/b = n/(n+1) = ln(b)/ln(a) = 0.8571428571428571
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.0238095238095237
b/a-a/b= (2n+1)/(n2+n) = 0.30952380952380965

Para 1/n com n de 1 até 6


Se n = 1 :

n = 1
a = [n/(n+1)]n+1 = 0.25
b = [n/(n+1)]n = 0.5
aa= bb = 0.7071067811865476
b/a = (n+1)/n = ln(a)/ln(b) = 2
a/b = n/(n+1) = ln(b)/ln(a) = 0.5
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.5
b/a-a/b= (2n+1)/(n2+n) = 1.5


Se n = 0.5 :

n = 0.5
a = [n/(n+1)]n+1 = 0.19245008972987523
b = [n/(n+1)]n = 0.5773502691896257
aa= bb = 0.7282273028722097
b/a = (n+1)/n = ln(a)/ln(b) = 3
a/b = n/(n+1) = ln(b)/ln(a) = 0.3333333333333333
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.3333333333333335
b/a-a/b= (2n+1)/(n2+n) = 2.6666666666666665


Se n = 0.3333333333333333 :

n = 0.3333333333333333
a = [n/(n+1)]n+1 = 0.15749013123685918
b = [n/(n+1)]n = 0.6299605249474366
aa= bb = 0.7474382584741919
b/a = (n+1)/n = ln(a)/ln(b) = 4
a/b = n/(n+1) = ln(b)/ln(a) = 0.25
b/a+a/b= (2n2+2n+1)/(n2+n) = 4.25
b/a-a/b= (2n+1)/(n2+n) = 3.75


Se n = 0.25 :

n = 0.25
a = [n/(n+1)]n+1 = 0.1337480609952844
b = [n/(n+1)]n = 0.668740304976422
aa= bb = 0.7640867110627018
b/a = (n+1)/n = ln(a)/ln(b) = 5
a/b = n/(n+1) = ln(b)/ln(a) = 0.2
b/a+a/b= (2n2+2n+1)/(n2+n) = 5.2
b/a-a/b= (2n+1)/(n2+n) = 4.8


Se n = 0.2 :

n = 0.2
a = [n/(n+1)]n+1 = 0.1164711864619299
b = [n/(n+1)]n = 0.6988271187715793
aa= bb = 0.778469067871172
b/a = (n+1)/n = ln(a)/ln(b) = 5.999999999999999
a/b = n/(n+1) = ln(b)/ln(a) = 0.16666666666666669
b/a+a/b= (2n2+2n+1)/(n2+n) = 6.166666666666666
b/a-a/b= (2n+1)/(n2+n) = 5.833333333333332


Se n = 0.16666666666666666 :

n = 0.16666666666666666
a = [n/(n+1)]n+1 = 0.10328857519992624
b = [n/(n+1)]n = 0.7230200263994837
aa= bb = 0.7909751972584026
b/a = (n+1)/n = ln(a)/ln(b) = 7.000000000000001
a/b = n/(n+1) = ln(b)/ln(a) = 0.14285714285714285
b/a+a/b= (2n2+2n+1)/(n2+n) = 7.142857142857144
b/a-a/b= (2n+1)/(n2+n) = 6.857142857142858

Usando valores com Pi:

Se n = 3.141592653589793 pi:

n = 3.141592653589793
a = [n/(n+1)]n+1 = 0.3183731004122771
b = [n/(n+1)]n = 0.4197144057684896
aa= bb = 0.694621641492507
b/a = (n+1)/n = ln(a)/ln(b) = 1.3183098861837907
a/b = n/(n+1) = ln(b)/ln(a) = 0.7585469929947761
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.0768568791785667
b/a-a/b= (2n+1)/(n2+n) = 0.5597628931890146


Se n = 2.141592653589793 pi-1:

n = 2.141592653589793
a = [n/(n+1)]n+1 = 0.30005310705153293
b = [n/(n+1)]n = 0.4401605670526569
aa= bb = 0.6968377567491657
b/a = (n+1)/n = ln(a)/ln(b) = 1.46694220692426
a/b = n/(n+1) = ln(b)/ln(a) = 0.6816901138162094
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.1486323207404694
b/a-a/b= (2n+1)/(n2+n) = 0.7852520931080506


Se n = 0.3183098861837907 1/pi:

n = 0.3183098861837907
a = [n/(n+1)]n+1 = 0.15359678995017048
b = [n/(n+1)]n = 0.6361353368726007
aa= bb = 0.749947580554872
b/a = (n+1)/n = ln(a)/ln(b) = 4.141592653589793
a/b = n/(n+1) = ln(b)/ln(a) = 0.24145300700522385
b/a+a/b= (2n2+2n+1)/(n2+n) = 4.383045660595017
b/a-a/b= (2n+1)/(n2+n) = 3.9001396465845692


Se n = 0.46694220692425986 1/(pi-1):

n = 0.46694220692425986
a = [n/(n+1)]n+1 = 0.18651332679971905
b = [n/(n+1)]n = 0.5859488972705897
aa= bb = 0.7311014940062435
b/a = (n+1)/n = ln(a)/ln(b) = 3.1415926535897936
a/b = n/(n+1) = ln(b)/ln(a) = 0.31830988618379064
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.459902539773584
b/a-a/b= (2n+1)/(n2+n) = 2.823282767406003

Usando valores com e:


Se n = 2.718281828459045 e:

n = 2.718281828459045
a = [n/(n+1)]n+1 = 0.31198653777786745
b = [n/(n+1)]n = 0.4267599709486024
aa= bb = 0.6953079526442089
b/a = (n+1)/n = ln(a)/ln(b) = 1.3678794411714423
a/b = n/(n+1) = ln(b)/ln(a) = 0.7310585786300049
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.098938019801447
b/a-a/b= (2n+1)/(n2+n) = 0.6368208625414374


Se n = 1.718281828459045 e-1:

n = 1.718281828459045
a = [n/(n+1)]n+1 = 0.28742069137944415
b = [n/(n+1)]n = 0.454692838834558
aa= bb = 0.6988224971233713
b/a = (n+1)/n = ln(a)/ln(b) = 1.5819767068693265
a/b = n/(n+1) = ln(b)/ln(a) = 0.6321205588285577
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.214097265697884
b/a-a/b= (2n+1)/(n2+n) = 0.9498561480407688


Se n = 0.36787944117144233 1/e:

n = 0.36787944117144233
a = [n/(n+1)]n+1 = 0.16589774685298547
b = [n/(n+1)]n = 0.6168545775057546
aa= bb = 0.7422894613778632
b/a = (n+1)/n = ln(a)/ln(b) = 3.718281828459045
a/b = n/(n+1) = ln(b)/ln(a) = 0.2689414213699951
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.9872232498290403
b/a-a/b= (2n+1)/(n2+n) = 3.44934040708905


Se n = 0.5819767068693265 1/(e-1):

n = 0.5819767068693265
a = [n/(n+1)]n+1 = 0.2055683479587981
b = [n/(n+1)]n = 0.5587927047627469
aa= bb = 0.7223797288294247
b/a = (n+1)/n = ln(a)/ln(b) = 2.718281828459045
a/b = n/(n+1) = ln(b)/ln(a) = 0.36787944117144233
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.0861612696304874
b/a-a/b= (2n+1)/(n2+n) = 2.3504023872876028

Usando valores com o número aureo (x tal que x2=x+1):


Se n = 1.618033988749895 ouro:

n = 1.618033988749895
a = [n/(n+1)]n+1 = 0.2837025599424474
b = [n/(n+1)]n = 0.4590403846822343
aa= bb = 0.699480971720873
b/a = (n+1)/n = ln(a)/ln(b) = 1.618033988749895
a/b = n/(n+1) = ln(b)/ln(a) = 0.6180339887498949
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.23606797749979
b/a-a/b= (2n+1)/(n2+n) = 1


Se n = 0.6180339887498949 ouro-1:

n = 0.6180339887498949
a = [n/(n+1)]n+1 = 0.21071807476921361
b = [n/(n+1)]n = 0.5516670817897429
aa= bb = 0.7202640573833972
b/a = (n+1)/n = ln(a)/ln(b) = 2.618033988749895
a/b = n/(n+1) = ln(b)/ln(a) = 0.38196601125010515
b/a+a/b= (2n2+2n+1)/(n2+n) = 3
b/a-a/b= (2n+1)/(n2+n) = 2.23606797749979


Se n = 0.6180339887498948 1/ouro:

n = 0.6180339887498948
a = [n/(n+1)]n+1 = 0.21071807476921356
b = [n/(n+1)]n = 0.5516670817897429
aa= bb = 0.7202640573833972
b/a = (n+1)/n = ln(a)/ln(b) = 2.6180339887498953
a/b = n/(n+1) = ln(b)/ln(a) = 0.3819660112501051
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.0000000000000004
b/a-a/b= (2n+1)/(n2+n) = 2.2360679774997902


Se n = 1.6180339887498947 1/(ouro-1):

n = 1.6180339887498947
a = [n/(n+1)]n+1 = 0.2837025599424473
b = [n/(n+1)]n = 0.45904038468223424
aa= bb = 0.699480971720873
b/a = (n+1)/n = ln(a)/ln(b) = 1.6180339887498951
a/b = n/(n+1) = ln(b)/ln(a) = 0.6180339887498948
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.23606797749979
b/a-a/b= (2n+1)/(n2+n) = 1.0000000000000004

Usando valores com x tal que x3=x+1:


Se n = 1.3247179572447463 x:

n = 1.3247179572447463
a = [n/(n+1)]n+1 = 0.2705172532293568
b = [n/(n+1)]n = 0.4747246860265993
aa= bb = 0.7020999508903193
b/a = (n+1)/n = ln(a)/ln(b) = 1.7548776662466927
a/b = n/(n+1) = ln(b)/ln(a) = 0.5698402909980533
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.3247179572447463
b/a-a/b= (2n+1)/(n2+n) = 1.1850373752486394


Se n = 0.3247179572447463 x-1:

n = 0.3247179572447463
a = [n/(n+1)]n+1 = 0.15527607328946827
b = [n/(n+1)]n = 0.6334635890246503
aa= bb = 0.7488552679286654
b/a = (n+1)/n = ln(a)/ln(b) = 4.079595623491437
a/b = n/(n+1) = ln(b)/ln(a) = 0.2451223337533074
b/a+a/b= (2n2+2n+1)/(n2+n) = 4.324717957244744
b/a-a/b= (2n+1)/(n2+n) = 3.834473289738129


Se n = 0.7548776662466926 1/x:

n = 0.7548776662466926
a = [n/(n+1)]n+1 = 0.22754379395582508
b = [n/(n+1)]n = 0.528975143868705
aa= bb = 0.7140097294066174
b/a = (n+1)/n = ln(a)/ln(b) = 2.3247179572447463
a/b = n/(n+1) = ln(b)/ln(a) = 0.4301597090019467
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.754877666246693
b/a-a/b= (2n+1)/(n2+n) = 1.8945582482427996


Se n = 3.0795956234914366 1/(x-1):

n = 3.0795956234914366
a = [n/(n+1)]n+1 = 0.31753076975351735
b = [n/(n+1)]n = 0.42063871267023134
aa= bb = 0.6947069868601304
b/a = (n+1)/n = ln(a)/ln(b) = 1.3247179572447463
a/b = n/(n+1) = ln(b)/ln(a) = 0.7548776662466926
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.079595623491439
b/a-a/b= (2n+1)/(n2+n) = 0.5698402909980537

Usando valores com x tal que x4=x+1:


Se n = 1.2207440846057596 x:

n = 1.2207440846057596
a = [n/(n+1)]n+1 = 0.264780870793223
b = [n/(n+1)]n = 0.48168208222013253
aa= bb = 0.7033822636267789
b/a = (n+1)/n = ln(a)/ln(b) = 1.8191725133961645
a/b = n/(n+1) = ln(b)/ln(a) = 0.5497004779019703
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.368872991298135
b/a-a/b= (2n+1)/(n2+n) = 1.2694720354941942


Se n = 0.22074408460575956 x-1:

n = 0.22074408460575956
a = [n/(n+1)]n+1 = 0.12396810595944582
b = [n/(n+1)]n = 0.6855600787674515
aa= bb = 0.7719680989413776
b/a = (n+1)/n = ln(a)/ln(b) = 5.530132718101876
a/b = n/(n+1) = ln(b)/ln(a) = 0.18082748660383563
b/a+a/b= (2n2+2n+1)/(n2+n) = 5.710960204705711
b/a-a/b= (2n+1)/(n2+n) = 5.3493052314980405


Se n = 0.8191725133961644 1/x:

n = 0.8191725133961644
a = [n/(n+1)]n+1 = 0.2342391198275361
b = [n/(n+1)]n = 0.5201851397402604
aa= bb = 0.7117862252181024
b/a = (n+1)/n = ln(a)/ln(b) = 2.2207440846057596
a/b = n/(n+1) = ln(b)/ln(a) = 0.45029952209802976
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.6710436067037895
b/a-a/b= (2n+1)/(n2+n) = 1.7704445625077299


Se n = 4.530132718101876 1/(x-1):

n = 4.530132718101876
a = [n/(n+1)]n+1 = 0.3318595407174712
b = [n/(n+1)]n = 0.4051155712508372
aa= bb = 0.6934643133921594
b/a = (n+1)/n = ln(a)/ln(b) = 1.2207440846057596
a/b = n/(n+1) = ln(b)/ln(a) = 0.8191725133961644
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.039916598001924
b/a-a/b= (2n+1)/(n2+n) = 0.4015715712095952

Usando valores com k tal que kk=e:


Se n = 1.7632228343518932 x:

n = 1.7632228343518932
a = [n/(n+1)]n+1 = 0.2889822471758976
b = [n/(n+1)]n = 0.45287658970924993
aa= bb = 0.6985561772585763
b/a = (n+1)/n = ln(a)/ln(b) = 1.567143290409785
a/b = n/(n+1) = ln(b)/ln(a) = 0.6381037433651103
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.2052470337748953
b/a-a/b= (2n+1)/(n2+n) = 0.9290395470446747


Se n = 0.7632228343518932 x-1:

n = 0.7632228343518932
a = [n/(n+1)]n+1 = 0.22845133911325144
b = [n/(n+1)]n = 0.5277758991642433
aa= bb = 0.7136997817812418
b/a = (n+1)/n = ln(a)/ln(b) = 2.310233335522739
a/b = n/(n+1) = ln(b)/ln(a) = 0.432856709590215
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.7430900451129543
b/a-a/b= (2n+1)/(n2+n) = 1.8773766259325242


Se n = 0.567143290409785 1/x:

n = 0.567143290409785
a = [n/(n+1)]n+1 = 0.20334711713751544
b = [n/(n+1)]n = 0.5618933973740118
aa= bb = 0.7233228679199418
b/a = (n+1)/n = ln(a)/ln(b) = 2.763222834351893
a/b = n/(n+1) = ln(b)/ln(a) = 0.36189625663488967
b/a+a/b= (2n2+2n+1)/(n2+n) = 3.1251190909867828
b/a-a/b= (2n+1)/(n2+n) = 2.4013265777170036


Se n = 1.3102333355227391 1/(x-1):

n = 1.3102333355227391
a = [n/(n+1)]n+1 = 0.269757105125455
b = [n/(n+1)]n = 0.4756418874858662
aa= bb = 0.7022647905016444
b/a = (n+1)/n = ln(a)/ln(b) = 1.7632228343518932
a/b = n/(n+1) = ln(b)/ln(a) = 0.5671432904097851
b/a+a/b= (2n2+2n+1)/(n2+n) = 2.330366124761678
b/a-a/b= (2n+1)/(n2+n) = 1.1960795439421081

Alguns b/a+a/b:

Se n=1/1 = (22+1) / 2 = 2.5
Se n=1/2 = (32+1) / 3 = 3.3333333333333335
Se n=1/3 = (42+1) / 4 = 4.25
Se n=1/4 = (52+1) / 5 = 5.2
Se n=1/5 = (62+1) / 6 = 6.166666666666667
Se n=1/6 = (72+1) / 7 = 7.142857142857143
Se n=1/7 = (82+1) / 8 = 8.125
Se n=1/8 = (92+1) / 9 = 9.11111111111111
Se n=1/9 = (102+1) / 10 = 10.1
Se n=1.618033988749895 = b/a+a/b = 2.23606797749979
Se n=1.3247179572447463 = b/a+a/b = 2.3247179572447454
Se n=1.2207440846057596 = b/a+a/b = 2.368872991298135
Se n=1/1.618033988749895 = b/a+a/b = 3
Se n=1/1.3247179572447463 = b/a+a/b = 2.754877666246693
Se n=1/1.2207440846057596 = b/a+a/b = 2.6710436067037895

Alguns b/a-a/b:

Se n=1/1 = (22-1) / 2 = 1.5
Se n=1/2 = (32-1) / 3 = 2.6666666666666665
Se n=1/3 = (42-1) / 4 = 3.75
Se n=1/4 = (52-1) / 5 = 4.8
Se n=1/5 = (62-1) / 6 = 5.833333333333333
Se n=1/6 = (72-1) / 7 = 6.857142857142857
Se n=1/7 = (82-1) / 8 = 7.875
Se n=1/8 = (92-1) / 9 = 8.88888888888889
Se n=1/9 = (102-1) / 10 = 9.9
Se n=1.618033988749895 = b/a-a/b = 1
Se n=1.3247179572447463 = b/a-a/b = 1.1850373752486392
Se n=1.2207440846057596 = b/a-a/b = 1.269472035494194
Se n=1/1.618033988749895 = b/a-a/b = 2.23606797749979
Se n=1/1.3247179572447463 = b/a-a/b = 1.8945582482427998
Se n=1/1.2207440846057596 = b/a-a/b = 1.77044456250773


























Tangentes e Gráficos em javaScript



UNB-Matemática
Autor: Luiz Augusto Prado 1807787/DF
Blog: tivideotutoriais.blogspot.com

Nesta página apresento um pouco sobre tangentes e gráficos (ver javascript no fonte da página).
É permitido o uso e adaptação destes códigos fontes (javaScripts), desde que seja devidamente citada a fonte (por favor, deixe de mesquinhagem, cite suas fontes).
Se deseja ocultar a fonte ou entender melhor o código fonte, contrate nossa consultoria.

============================================
Tangentes e Gráficos:
============================================

O valor de uma tangente representa o quanto uma reta está inclinada.
Se a reta tem tangente igual a zero significa que ela é paralela ao eixo x.
Se a reta tem tangente maior que zero, significa que ela é crescente.
Se a reta tem tangente menor que zero, significa que ela é decrescente.

Se qualquer ponto P pode ser representado por um par de coordenadas (x ; y), então podemos representar os pontos iniciais e finais de uma reta tangente assim:
Po = ( xo ; yo) será o ponto de origem da tangente
Pf = ( xf ; yf) será o ponto final da tangente
Se Δx = xf - xo, mostrado em verde e
Se Δy = yf - yo, mostrado em azul
A inclinação da reta tangente, em vermelho, é dada por Δy/Δx
Observe que temos o equivalente seno/cosseno:




Se Po = (1;1) e Pf = (8;5)
Então
Δx = xf - xo = 8-1 → Δx = 7
Δy = yf - yo = 5-1 → Δy = 4
Logo Δy/Δx = 4/7

O sinal da tangente depende do quadrante em que o ângulo que a produz está:
Se entre 0° e 90°= sinal += reta crescente
Se entre 90° e 180°= sinal -= reta decrescente
Se entre 180° e 270°= sinal += reta crescente
Se entre 270° e 360°= sinal -= reta decrescente

Tangentes que terão módulo = 1:
45°=+1= reta crescente
135°= - 1= reta decrescente
225° (mesmo que -135°)=+1= reta crescente
315° (mesmo que -45°)= - 1= reta decrescente

Angulos que estão entre 45° e 315° (-45°) e entre 135° e 225° possuirão módulo<1;

Angulos que estão entre 45° e 135° e entre 225° e 315°(-45°) possuirão módulo>1

Para analisar os sinais e os módulos vejam que existem partições intercaladas pelos pontos onde as tangentes apresentam módulos=1 e onde os sinais trocam de sinal. Estas tangentes dividem ao meio cada partição falada:

Se entre 0° e 45°= modulo<1 = sinal += reta crescenteExemplo: tan( 0+45/2) = 0.41421356237309503
Se entre 45° e 90°= modulo>1 = sinal += reta crescenteExemplo: tan(90-45/2) = 2.414213562373095
Se entre 90° e 135°= modulo>1 = sinal -= reta decrescenteExemplo: tan(90+45/2) = -2.4142135623730954
Se entre 135° e 180°= modulo<1 = sinal -= reta decrescenteExemplo: tan(180-45/2) = -0.41421356237309515
Se entre 180° e 225°= modulo<1 = sinal += reta crescenteExemplo: tan(180+45/2) = 0.41421356237309437
Se entre 225° e 270°= modulo>1 = sinal += reta crescenteExemplo: tan(270-45/2) = 2.414213562373097
Se entre 270° e 315°= modulo>1 = sinal -= reta decrescenteExemplo: tan(270+45/2) = -2.4142135623730936
Se entre 315° e 360°= modulo<1 = sinal -= reta decrescenteExemplo: tan( 0 -45/2) = -0.41421356237309503

Compare os valores acima com √2 = 1.41421356237309
A tangente do ângulo 45°/2=22.5°, ou seja, tan(22.5°) = 1/(√2+1) = seno(22.5)/cosseno(22.5).
O cosseno(22.5) = 0.9238795325112867 é o comprimento da reta verde abaixo.
O seno ( 22.5) = 0.3826834323650898 é o comprimento da reta azul abaixo.
Independente do comprimento das retas, a reta verde é √2+1 vezes maior que a azul.




cosseno(45/3) = 0.9659258262890683 é o comprimento da reta verde abaixo
seno ( 45/3) = 0.25881904510252074 é o comprimento da reta azul abaixo
Independente do comprimento das retas, a reta verde é √3+2 vezes maior que a azul.




Algumas tangentes fáceis* de se obter são mostradas abaixo.
* Fácil no sentido de apresentar:
- Ângulos na forma a/b onde a e b são inteiros
- Terem raízes inteiras na formula de produção das tangentes
Note as formulas genéricas para estes casos:
[raiz(raiz(inteiro)+a)) + raiz(raiz(inteiro)-b))]/2 e
[raiz(raiz(inteiro)+a)) - raiz(raiz(inteiro)-b))]/2 para elas.
Tente encontrar outras formulas:

Angulo1 = 30
Angulo2 = 60
tang1 = raiz(3)/3
tang2 = raiz(3)

Angulo1 = 45
Angulo2 = 45
tan1 = [raiz(raiz(1)+3))+raiz(raiz(1)-1))]/2
tan2 = [raiz(raiz(1)+3))-raiz(raiz(1)-1))]/2

Angulo1 = 22.5
Angulo2 = 67.5
tan1 = [raiz(raiz(1)+7))+raiz(raiz(1)+3))]/2
tan2 = [raiz(raiz(1)+7))-raiz(raiz(1)+3))]/2

Angulo1 = 15
Angulo2 = 75
tan1 = [raiz(raiz(1)+15))+raiz(raiz(1)+11))]/2
tan2 = [raiz(raiz(1)+15))-raiz(raiz(1)+11))]/2

Angulo1 = 11.25
Angulo2 = 78.75
tan1 = [raiz(raiz(128)+16))+raiz(raiz(128)+12))]/2
tan2 = [raiz(raiz(128)+16))-raiz(raiz(128)+12))]/2

Angulo1 = 9
Angulo2 =81
tan1 = [raiz(raiz(320)+24))+raiz(raiz(320)+20))]/2
tan2 = [raiz(raiz(320)+24))-raiz(raiz(320)+20))]/2

Angulo1 = 7.5
Angulo2 =82.5
tan1 = [raiz(raiz(768)+32))+raiz(raiz(768)+28))]/2
tan2 = [raiz(raiz(768)+32))-raiz(raiz(768)+28))]/2


Focaremos em um modo para poduzir tangentes utilizando uma reta horizontal de tamanho 1 e um quadrado A de lado 'a' junto a esta reta. O exemplo abaixo permitirá que obtenhamos tangentes de ângulos entre 0° e 45° e consequentemente as outras 3 retas simétricas à primeira. Portanto, a partir deste modo, podemos construir qualquer tangente e obter um ângulo de origem para a tangente:
- seja invertendo o sinal da tangente para mudar o quadrante
- seja dividindo 1 pela tangente pra mudar o módulo
- seja dividindo 1 pela tangente e invertendo o sinal e para mudar o quadrante e o módulo




A reta, em verde, de comprimento 1 tem o Pox=0, ou seja, posicionado na origem.
O quadrado A de lado 'a', em azul, deve estar junto a reta, de forma que a lateral coincida com a reta.
O pondo inicial da reta tangente, em vermelho, está no Pox da reta verde, portanto Po=(0 ; 0).
O ponto final da reta tangente está no ponto superior esquerdo do quadrado, portanto Pf=(1-a ; a).
Deste modo temos que:
se Δx=xf-xo → Δx=1-a-0
se Δy=yf-yo → Δy=a-0
Então Δy/Δx=(a)/(1-a)

Portanto, ∀ a ∈ ℝ tal que 0 < a < 1/2 nos permitirá fazer qualquer tangente.



Equação reduzida da reta

Para qualquer tangente, existirá um valor n que correlaciona Δx e Δy da seguinte forma:
Δy=n*Δx → n*Δx - Δy = 0.
Se Δx = Pxf - Pxo onde Pxo=0
Se Δy = Pyf - Pyo onde Pyo=0 então
n*x = y


Cosseno em verde, seno em azul e tangente em vermelho:



Teorema de pitágoras

O comprimento da reta, em vermelho, NÃO pode ser confundido COM a tangente. A tangente é inclinação da reta. Isso independe do seu comprimento.

O comprimento da reta em vermelho pode ser caculado pelo teorema de pitágoras:
hipotenusa ao quadrado é igual ao quadrado do primeiro cateto (cosseno) mais o quadrado do segundo cateto (seno):
hipotenusa2 = cateto12 + cateto12 ou
h = √( c12 + c22 ) ou
1 = √( cos(x)2 + sen(x)2 )
Observe que se trabalhamos com seno e cosseno, estamos falando de valores que estão entre -1 e 1. Por isso, a hipotenusa, neste caso, valerá sempre 1.

Convertendo radianos para ângulos e ângulos para radianos

angulo = (radiano*180)/π

radiano= (angulo*π)/180

Exemplo 1:
Se temos 6.283185307179586 radianos ou (2π) e queremos um ângulo, basta fazermos:
(6.283185307179586 * 180)/3.141592653589793 = (2π * 180)/π → 180*2 = 360°

Exemplo 2:
Se temos 75° e queremos em radianos, basta fazermos:
(75 * π)/180 = (5 * π)/12




Códigos Fontes para Gráficos e alguns exemplos de uso

É permitido o uso e adaptação destes códigos fontes (javaScripts), desde que seja devidamente citada a fonte (Por favor, cite suas fontes).
Se deseja ocultar a fonte ou entender melhor o código fonte, contrate nossa consultoria.



//===================================================================
// Autor: Luiz Augusto Prado UNB 1807787/DF
//===================================================================

Grafico = function()
{
    this.image;
    this.ctx;
    this.showGrid;
    this.escala =1;
    this.w;
    this.h;
    this.corFundo ="#DDEFEE";
    this.corGrid ="#FFFFFF";
    this.corPontos="#0033FF";
    this.fontText ="10px Arial";

    this.maxX=-1000000000000000;
    this.minX= 1000000000000000;
    this.maxY=-1000000000000000;
    this.minY= 1000000000000000;
    this.dadosX=[];
    this.dadosY=[];
    this.menorEspacoX=1000000000000000;
    this.menorEspacoY=1000000000000000;
    this.maioresXY;
    this.menoresXY;
    this.escalaX;
    this.escalaY;

    this.cleanAllData = function()
    {
        this.maxX=-1000000000000000;
        this.minX= 1000000000000000;
        this.maxY=-1000000000000000;
        this.minY= 1000000000000000;
        this.dadosX=[];
        this.dadosY=[];
        this.menorEspacoX=1000000000000000;
        this.menorEspacoY=1000000000000000;
        this.maioresXY=[];
        this.menoresXY=[];
    }

    /*
    id é o nome que o canvas deverá ter
    w e h são as dimensões
    */
    this.createImage = function(id, w, h)
    {
        this.id=id;
        this.w=w;
        this.h=h;
        this.image = document.createElement("canvas");
        this.image.id=id;
        this.image.width=this.w;
        this.image.height=this.h;
        this.image.style.border='1px solid #6699CC';
        this.ctx = this.image.getContext("2d");
        document.body.appendChild(this.image);
        return this.image;
    }

    this.setEscala = function (escala)
    {
        this.escala=escala
    }

    /*
    componentId é o Id do componente onde a imagem deve ser criada. Uma div por exemplo.
    id é o nome que o canvas deverá ter
    w e h são as dimensões
    */
    this.createImageInside = function(componentId, id, w, h)
    {
        this.id=id;
        this.w=w;
        this.h=h;
        this.image = document.createElement("canvas");
        this.image.id=id;
        this.image.width=w;
        this.image.height=h;
        this.image.style.border='1px solid #6699CC';
        this.ctx = this.image.getContext("2d");
        document.getElementById(componentId).appendChild(this.image);
        return this.image;
    }

    this.setArray = function (arrayVetores)
    {
        for(var i=0; i<arrayVetores.length; i++)
        {
            for(var j=0; j<arrayVetores[i].length; j++)
            {
                x = arrayVetores[i][j][0] ;
                y = arrayVetores[i][j][1] ;
                if(this.maxX<x) this.maxX=x;
                if(this.minX>x) this.minX=x;
                if(this.maxY<y) this.maxY=y;
                if(this.minY>y) this.minY=y;

                var k=0;
                while(typeof this.dadosX[k]!=='undefined' && this.dadosX[k]<x)
                {
                    k++;
                }
                this.dadosX.splice(k, 0, x);

                var k=0;
                while(typeof this.dadosY[k]!=='undefined' && this.dadosY[k]<y)
                {
                    k++;
                }
                this.dadosY.splice(k, 0, y);

            }
        }
        for(var i=0; i<this.dadosX.length-1; i++)
        {
            if(this.dadosX[i+1]!=this.dadosX[i] && this.dadosX[i+1]-this.dadosX[i]<this.menorEspacoX)
                this.menorEspacoX=this.dadosX[i+1]-this.dadosX[i];

            if(this.dadosY[i+1]!=this.dadosY[i] && this.dadosY[i+1]-this.dadosY[i]<this.menorEspacoY)
                this.menorEspacoY=this.dadosY[i+1]-this.dadosY[i];

        }

        // para criar a melhor grid
        if(this.menorEspacoX<this.menorEspacoY) this.menoresXY= this.menorEspacoX
        this.menoresXY = this.menorEspacoY
        // para centralizar todos os vetores no meio da imagem
        this.maioresXY = [this.maxX-this.minX,this.maxY-this.minY];


    }

    this.plotGrid = function()
    {
        this.ctx.fillStyle=this.corFundo;
        this.ctx.fillRect(0, 0, this.w, this.h);
        // criar a grid
        if(this.showGrid)
        {
            //pelo menos dois eixos x e y devem passar pela origem
            this.ctx.strokeStyle=this.corGrid;
            this.ctx.globalAlpha=1;

            for(var x=0; x<this.w; x+=40)
            {
                this.ctx.beginPath();
                this.ctx.moveTo(x, 0);
                this.ctx.lineTo(x, this.h);
                this.ctx.stroke();
            }        
            for(var y=0; y<this.h; y+=40)
            {
                this.ctx.beginPath();
                this.ctx.moveTo(0 , y);
                this.ctx.lineTo(this.w , y);
                this.ctx.stroke();
            }
            this.ctx.globalAlpha=1;
        }
    }

    /*
    arrayVetores é uma matriz que contém:
     as matrizes de retas, que por sua vez contém:
     as matrizes de pontos (x;y)

    showPoints é uma matriz que contém:
     na posicao 0: uma matriz de textos que devem ser plotados.
     no posicao 1: uma matriz de pares de coordenadas (x,y)
    A posicao 1 indica onde cada texto deve aparecer
    Se este for nulo sera plotado todos os pontos das retas
    de acordo com as cores de cada reta
    Se este for um array vazio, não plotará nenhum ponto

    cores é uma matriz de cores para cada conjunto de retas

    showGrid mostra ou não a grid
    */
    this.plot = function(arrayVetores, showPoints, cores, showGrid, ProportionalScale)
    {
        this.cleanAllData();
        this.showGrid=showGrid;
        this.setArray(arrayVetores);
        this.plotGrid();


        if(ProportionalScale)
        {
            if( this.maioresXY[1]/this.maioresXY[0]<this.maioresXY[0]/this.maioresXY[1])
            {
                this.escalaX = this.w/this.maioresXY[0];
                //this.escalaY = this.h/this.maioresXY[1];
                this.escalaY = this.escalaX;
            }
            else
            {
                this.escalaY = this.h/this.maioresXY[1];
                //this.escalaX = this.w/this.maioresXY[0];
                this.escalaX = this.escalaY ;
            }
        }
        else
        {
            this.escalaX = this.w/this.maioresXY[0];
            this.escalaY = this.h/this.maioresXY[1];
        }
        
        this.escalaX *=this.escala;
        this.escalaY *=this.escala;

        //plotar matriz de pontos
        for(var i=0; i<arrayVetores.length; i++)
        {
            this.ctx.strokeStyle=cores[i];
            this.ctx.fillStyle=cores[i];
            for(var j=0; j<arrayVetores[i].length-1; j++)
            {
                a = -(this.maioresXY[0]/2 +this.minX);
                b = -(this.maioresXY[1]/2 +this.minY);
                x1 = this.w/2;
                x2 = this.w/2;
                x1+= (arrayVetores[i][j ][0]+a)*this.escalaX ;
                x2+= (arrayVetores[i][j+1][0]+a)*this.escalaX ;
                y1 =this.h/2;
                y2 =this.h/2;
                y1+=-(arrayVetores[i][j][1] +b)*this.escalaY ;
                y2+=-(arrayVetores[i][j+1][1]+b)*this.escalaY ;


                if( showPoints==null )
                {
                    this.ctx.font = this.fontText;
                    this.ctx.fillText("("+arrayVetores[i][j][0].toFixed(4)+";"+ arrayVetores[i][j][1].toFixed(4)+")", x1+3, y1+15);
                }

                this.ctx.beginPath();
                this.ctx.moveTo(x1,y1);
                this.ctx.lineTo(x2,y2);
                this.ctx.stroke();
            }
        }

        if( showPoints!=null && 0<showPoints.length)
        {
            this.ctx.fillStyle=this.corPontos;
            for(var i=0; i<showPoints[0].length; i++)
            {
                a = -(this.maioresXY[0]/2 +this.minX)
                b = -(this.maioresXY[1]/2 +this.minY)
                x1 = this.w/2;
                x1+= (showPoints[1][i][0]+a)*this.escalaX ;
                y1 =this.h/2;
                y1+=-(showPoints[1][i][1]+b)*this.escalaY ;

                this.ctx.font = this.fontText;
                this.ctx.fillText( showPoints[0][i], x1+3, y1+15);
            }
        }
    }
}


//===================================================================
// Autor: Luiz Augusto Prado UNB 1807787/DF
//===================================================================


AllData = function(contentElement, w, h)
{
    this.w = w;
    this.h = h;

    this.contentElement = contentElement;
    this.contentElement.style.position='relative';
    this.contentElement.style.width=w+4;
    this.contentElement.style.heigth=h+4;
    this.grafico = new Grafico();

    this.canvas = this.grafico.createImage("gragico", w, h)
    this.canvas.style.position='absolute';
    this.canvas.style.top = 1;
    this.canvas.style.left= 1;
    this.contentElement.appendChild(this.canvas);

    this.btns=[];

    this.addButtomData = function(nome, cor, idHidden)
    {
        var btn = document.createElement('div');
        btn.id="B"+idHidden;

        btn.innerHTML=nome;
        btn.style.textAlign='center';
        btn.style.border='1px solid';
        btn.style.position='absolute';

        btn.style.width=Math.floor(this.w/3)-4;
        btn.style.top = this.h+(24*Math.floor(this.btns.length/3)) + 5;
        btn.style.left= [ Math.floor(1+ this.w/3 )*(this.btns.length%3) +2];

        btn.cor=cor;
        btn.disabled=false;
        btn.data=[]

        var tdados = document.getElementById(idHidden);
        if( tdados!=null )
        {
            btn.style.backgroundColor=btn.cor;
            var dados = (tdados.value.replace(/\n/g, '')).split(',');
            for(var i=0; i<dados.length; i++)
            {
                btn.data.push(Number(dados[i]))
            }
        }
        else
        {
            btn.style.backgroundColor='#DDDDDD';
        }


        this.contentElement.appendChild(btn);

        btn.onclick = function()
        {
            if(!this.disabled || this.data.length==0)
            {
                this.style.backgroundColor='#DDDDDD'
                this.disabled = true
        
            }
            else
            {
                this.disabled = false
                this.style.backgroundColor=this.cor
            }
        }
        this.btns.push(btn)
    }

    this.plot = function()
    {
        this.contentElement.style.height = this.h+(24*Math.floor(this.btns.length/3)) +4
        var shapes=[];
        var cores =[];
        for(var i=0; i<this.btns.length; i++)
        {
            if(!this.btns[i].disabled)
            {
                var shape=[];
                cores.push(this.btns[i].cor);
                for(var j=0; j<this.btns[i].data.length; j++)
            
                {
                    v = [ j*5 , this.btns[i].data[j] ];
                    shape.push(v);
                }
                shapes.push(shape);
            }
        }

        this.grafico.escala=0.9
        this.grafico.plot(shapes, [], cores, true, true)
    }
}


Exemplo de Gráfico dinâmico:




Vermelho
Verde
Azul
cos
sen
tan

















segunda-feira, 2 de março de 2020

Exercícios antigos em linguagem C

Estes dias encontrei em um velho CD com exercícios antigos em linguagem c que
fui fazendo para aprender. Na época de uma internete discada exemplos assim
eram difíceis e encontrar. Ainda mais quando não se sabia Inglês.
Espero que ainda possa servir à alguem.
Cada um dos números é um arquivo de programa diferente:


1 - imprime de 1 a té 100 ------------------------------------------- numeros.cpp
2 - tabuada de um numero -------------------------------------------- tabuada.cpp
3 - indica se é jovem, adulto ou idoso -------------------------------- idade.cpp
4 - fatorial do numero -------------------------------------------- fatorial1.cpp
5 - fatorial do numero usando a RECURSIVIDADE --------------------- fatorial2.cpp
6 - Triangulo / da a classificacao do triangulo ------------------- trinagulo.cpp
7 - PONTEIROS STDARG / va_list --------------------------------------- stdarg.cpp
8 - SWITCH e CASE ------------------------------------------------------ case.cpp
9 - DECLARANDO FUNCOES1 --------------------------------------------- funcao1.cpp
10- DECLARANDO FUNCOES2 --------------------------------------------- funcao2.cpp
11- DECLARANDO FUNCOES3 --------------------------------------------- funcao3.cpp
12- uso de "IF" ------------------------------------------------------ ifelse.cpp
13- WHILE / Pede o numero 100 para devolver comando -------------------- qual.cpp
14- BREAK / Inerronpendo loop FOR com o uso de BREAK ------------------ break.cpp
15- CONTINUE ------------------------------------------------------- continue.cpp
16- GOTO --------------------------------------------------------------- goto.cpp
17- DO WHILE, BREAK e (SWITCH e CASE) ------------------------------- acumula.cpp
18- CHAR, SCANF e WHILE ----------------------------------------------- scanf.cpp
19- STR-INGS ( strlen - strcpy - strcat ) ------------------------------- str.cpp
20- MATRIZ / Declarando matriz -------------------------------------- matriz1.cpp
21- MATRIZ DECLARADA PELO USUARIO ----------------------------------- matriz2.cpp
22- MATRIZ EM UMA TABUADA ------------------------------------------- matriz3.cpp
23- imprime o menor numero de uma matriz ------------------------------ menor.cpp
24- GETS / esse comando é melhor que o scanf --------------------------- gets.cpp
25- ORDENA NUMEROS DE UMA MATRIZ ---------------------------------- crescente.cpp
26- Minimo multiplo comum -------------------------------------------- minimo.cpp
27- fopen / destruindo arquivos --------------------------------------- fopen.cpp
28- reiniciando o PC ------------------------------------------------- reinic.cpp
29- resolucão de equações de primeiro, segundo e treceiro grau ------- 3-grau.cpp
30- removendo arquivos de dentro de outro diretorio ------------------- delet.cpp
31- equivalente a um dir ----------------------------------------------- ddir.cpp
32- Faça seus arquivos txt ---------------------------------------------- txt.cpp
33- imprime os argumentos que vem depois(arg "arg digitado") ------------ arg.cpp
34- quadrados dos numeros de 1 a 25 -------------------------------- quadrado.cpp
35- declarando funções -------------------------------------------------- fun.cpp
36- declarando função -------------------------------------------------- func.cpp
37- STRUCT ----------------------------------------------------------- struct.cpp
38- float em int e int em float ----------------------------------------- ver.cpp
39- Observando os ponteiros 1 -------------------------------------- ponteiro.cpp
40- Observando os ponteiros 2 ----------------------------------------- ponte.cpp
41- criando diretórios ---------------------------------------------- criadir.cpp
42- criando diretórios dentro de outro diretorio ------------------- criadir2.cpp
43- usando STRUCT + FOPEN -------------------------------------------- struct.cpp
44- criando e manipulando STRING ------------------------------------- string.cpp
45- o ponteiro ARGV e os argumentos de linha de comando ---------------- argv.cpp
46- ARGC informa quantos argumentos foram digitados -------------------- argc.cpp
47- funcionamento do FOPEN -------------------------------------------- fopen.cpp
48- achando o tamanho do STRING ------------------------------------- string2.cpp
49- SNPRINTF1 ----------------------------------------------------- snprintf1.cpp
50- SNPRINTF2 ----------------------------------------------------- snprintf2.cpp
51- lendo a primeira linha de um arquivo já criado ------------------- lendo1.cpp
52- usando FEOF para ler um arquivo ---------------------------------- lendo2.cpp
53- construindo uma matriz de ordem 3X3 ------------------------------ matriz.cpp
54- contantdo o número de caracteres de um arquivo ------------------- caract.cpp
55- acrescenta um arquivo em outro ------------------------------------ fusao.cpp
56- Usando o #define ------------------------------------------------- define.cpp
57- EDITOR -- Usando fopen(NOME_DO_ARQUIVO,"a") ---------------------- editor.cpp
58- STRUCT-SEEK-FEOF (banco de dados "cidades.dat") ------------------ cidade.cpp
59- usando FOPEN ------------------------------------------------------- temp.cpp
60- executanto um arquivo executavel no DOS (SYSTEM) ------------------ execv.cpp
61- gravando a sequencia de fibunaci em arquivo ---------------------- pascal.cpp
62- invertendo frase -------------------------------------------------- frase.cpp
63- Programa lê Matriz 3 X 3 e busca n° solicitado ------------------- matriz.cpp
64- testa se o numero é par --------------------------------------------- par.cpp
65- FUNCAO ------------------------------------------------------------- func.cpp
66- salvando caracteres ANSI em txt ------------------------------------ ansi.cpp
67- sistem e PAUSE ----------------------------------------------------- sist.cpp
68- imprime caracteres de 1 a 255 (GOTOXY) -------------------------- gotoxy1.cpp
69- fflush(stdin) ------------------------------------------------------ fflu.cpp
70- usando GOTOXY --------------------------------------------------- gotoxy2.cpp
71- usando o GOTOXY -------------------------------------------------- gotoxy.cpp
72- Apontador em array *(ps+i) ----------------------------------- apontador1.cpp
73- escrevendo a STRING e apontando caracteres ------------------- apontador2.cpp
74- Usando STRLEN no apontamento --------------------------------- apontador3.cpp
75- DO-WHILE ou FOR ??? ---------------------------------- do-while.cpp / for.cpp
76- pegando e imprimindo o tamanho de uma STRING -------------------- tamanho.cpp
77- verificando e imprimindo a possivel existencia de um email -------- email.cpp
78- usando a biblioteca IOSTREAM.H --------------------------------- iostream.cpp
79- olhando diretorios -------------------------------------------------- dir.cpp
80- ---------------------------------------------------------------- iostream.cpp
81- nome, cidade, pais ------------------------------------------------ lista.cpp
82- mova com as setas do tecalado ----------------------------------- movendo.cpp
83- editor simples -------------------------------------------------- editor2.cpp
84- visualiza em hexadecimal -------------------------------------------- hex.cpp
85- FRAGMENTADOR DE ARQUIVOS ------------------------------------------- frag.cpp
86- REUNIFICADOR DE ARQUIVOS ------------------------------------------- reun.cpp
87- pegando o tempo e imprimindo na tela ----------------------------------------
88- converte caractere em MAIUSCULO ---------------------------------------------
89- INTENCIDADE DAS IMPRESSOES --------------------------------------------------
90- janela WINDOW ---------------------------------------------------------------
91- DESENHANDO COM O ANSI. ------------------------------------------------------
92- apagando determinada linha de caractere. DELLINE. ---------------------------
93- DESENHANDO EM ANSI. tudo branco ---------------------------------------------
94- clreol ----------------------------------------------------------------------
95- mandando mensagens para o usuario windows -----------------------------------
96- matriz desenho --------------------------------------------------------------
97- desenhando um circulo -------------------------------------------------------
98- desenhando retas ------------------------------------------------------------
99- servidor e cliente de mensagem ser.cpp/cli.cpp ------------------------------
100- servidor e cliente1 de mensagem2 kk1.cpp/kk2.cpp ----------------------------
101- listando arquivos de diretorio ( comando ffblk )-----------------------------
102- memmove ---------------------------------------------------------------------
103- strtok ----------------------------------------------------------------------
104- strrchr oposto de memchr ----------------------------------------------------
105- memchr oposto de strrchr ----------------------------------------------------
106- atexit - FRASE QUE APARECE DEPOIS DE SAIR DO PROGRAMA -----------------------
107- modf ------------------------------------------------------------------------
108- fabs ------------------------------------------------------------------------
109- graphics.h - circulo/move ---------------------------------------------------
110- SALVA ANAGRAMAS EM ARQUIVO.FAZ TODAS AS COMBINAÇÕES. RECURSIVIDADE ----------
111- USANDO O COMANDO memcpy -----------------------------------------------------
112- JOGO DA VELHA ---------------------------------------------------------------
113- QUADRADOS MAGICOS. O MELHOR EXEMPLO DE RECURSIVIDADE ------------------------
114- strcpy, memcpy, struct - exercicio ------------------------------------------
115- DICA - Manipulando Arquivos -------------------------------------------------


// - 1
//*********************************************************************************
//****************************** imprime de 1 a té 100 ****************************
//*********************************************************************************
//******************************** numeros.cpp ************************************


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{
    clrscr();
    int PP=0;
    char q;
    do
    {
        int cont;
        textbackground(BLUE);
        textcolor(WHITE + BLINK);
        printf("\n");
        for (cont = 1; cont <= 100; cont++)
        {
            cprintf("%3d ",cont);
        }
        textbackground(BLACK);
        textcolor(WHITE);
        cprintf ("\n\n \"1\" sair ou \"2\" para repetir ");
        scanf("%d", &PP);
    }
    while(PP!=1);
    clrscr();
    exit;
}

// - 2
//*********************************************************************************
//***************************** tabuada de um numero ******************************
//*********************************************************************************
//****************************** tabuada.cpp **************************************

#include <stdio.h>
main()
{
    int cont,num;
    printf("Digite um Numero: ");
    scanf("%d",&num);
    for (cont = 0; cont <= 10; cont++)
    {
        printf("%2d **%2d = %2d \n",num,cont,num **cont);
    }
}

// - 3
//*********************************************************************************
//*************************** indica se é jovem, adulto ou idoso ******************
//*********************************************************************************
//************************************* idade.cpp *********************************

#include <stdio.h>
main()
{
    int i;
    printf("Digite sua idade: ");
    scanf("%d",&i);
    if (i > 70)
    {
        printf("Idoso");
    }
    else if (i > 21)
    {
        printf("Adulto");
    }
    else
    {
        printf("Jovem");
    }
}


// - 4
//*********************************************************************************
//****************************** fatorial do numero *******************************
//*********************************************************************************
//********************************* fatorial.cpp **********************************

#include <stdio.h>
main()
{
    int i,j;
    float f=1;
    printf("Digite um numero: ");
    scanf("%d",&j);
    for(i=1;i<=j;i++)
    {
        f=f*i;
    }
    printf("O fatorial de %d e' %7.0f.",j,f);
}




// - 5
//*********************************************************************************
//*********************************** RECURSIVIDADE *******************************
//*********************************************************************************
//*********************************** fatorial2.cpp *******************************

#include <stdio.h>
main()
{
    int j;
    printf("Digite um numero: ");
    scanf("%d",&j);
    printf("O fatorial de %d e' %d",j,fat(j));
}

int fat(int n)
{
    if (n == 1)
    return 1;
    else
    return fat(n-1) **n;//<--RECURSIVIDADE É QUANDO A FUNÇÃO CHAMA ELA MESMA
}

// - 6
//*********************************************************************************
//*********************************** Triangulo ***********************************
//*********************************************************************************
//********************************** trinagulo.cpp ********************************

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

void main()
{
int PP=0;
do
     {
    clrscr();
    float x1, y1, x2, y2, x3, y3, ladoA, ladoB, ladoC;
    char**Classe;
    char**angulo;
    float A, B, C;


    do
    {
        printf("\nDigite os valores de x e y.\n");
    
        printf("\nx1:");scanf("%f", &x1); printf("y1:");scanf("%f", &y1);
        printf("\nx2:");scanf("%f", &x2); printf("y2:");scanf("%f", &y2);
        printf("\nx3:");scanf("%f", &x3); printf("y3:");scanf("%f", &y3);printf("\n");
    

        textbackground(BLUE);
        textcolor(WHITE + BLINK);
            cprintf("x1 = %f, y1 = %f", x1, y1); printf("\n");
        textbackground(BLUE);
        textcolor(WHITE + BLINK);
            cprintf("x2 = %f, y2 = %f", x2, y2); printf("\n");
        textbackground(BLUE);
        textcolor(WHITE + BLINK);
            cprintf("x3 = %f, y3 = %f", x3, y3); printf("\n");
    
        A = (pow((-x1+x2),2) + pow((-y1+y2),2));
        B = (pow((-x2+x3),2) + pow((-y2+y3),2));
        C = (pow((-x3+x1),2) + pow((-y3+y1),2));
    
        ladoA = sqrt(A);
        ladoB = sqrt(B);
        ladoC = sqrt(C);

        printf("\n");
        textbackground(BLUE);
        textcolor(WHITE);
            cprintf(" lado A = %f", ladoA);printf("\n");
        textbackground(BLUE);
        textcolor(WHITE);
            cprintf(" lado B = %f", ladoB);printf("\n");
        textbackground(BLUE);
        textcolor(WHITE);
            cprintf(" lado C = %f", ladoC);printf("\n");
        if((ladoA == ladoB+ladoC)||(ladoB == ladoC+ladoA)||(ladoC ==ladoB+ladoA))
        {
            printf("\nIsso nao e um triangulo\n");
        }
    }while((ladoA == ladoB+ladoC)||(ladoB == ladoC+ladoA)||(ladoC == ladoB+ladoA));
    if (ladoA == ladoB == ladoC)
    {
        Classe = "Equilatero";
    }
    else if((ladoA != ladoB)&&(ladoB != ladoC)&&(ladoC !=ladoA))
    {
        Classe = "Escaleno";
    }
    else
    {
        Classe = "Isosceles";
    }
    if (((B + C)==A)||((B + A)==C)||((A + C)==B))
    {
        angulo = "retangulo";
    }
    else if((A-B-C + 2*ladoC*ladoB <0)||(B-A-C + 2*ladoA*ladoB <0)||(C-B-A + 2*ladoC*ladoB <0))
    {
        angulo = "Obtusangulo";
    }
    else
    {
    angulo = "Acutangulo";
    }
    textbackground(RED);
    textcolor(YELLOW + BLINK);
        cprintf("\n Triangulo %s e %s.\n\n",Classe,angulo);
    textbackground(BLACK);
    textcolor(WHITE);
    cprintf ("\n\n \"1\" sair ou \"2\" para repetir "); scanf("%d", &PP);
    }while(PP!=1);
    clrscr();
    exit;

}

// - 7
//*********************************************************************************
//********************************* PONTEIROS STDARG ******************************
//*********************************************************************************
//************************************ stdarg.cpp *********************************

#include <stdio.h>
#include <stdarg.h>

double sum_series(int num, ...)
{
    double sum=0.0;
    double t;
    va_list argptr;
    va_start(argptr,num);        // <------------------inicializa argptr
    for (;num;num--)        // <-----------------------soma a serie
    {
        t = va_arg(argptr,double);
        sum += t;
    }
    va_end(argptr);            // <-----finaliza a lista de argumentos
    return sum;
}


void main()
{
    double d;
    double sum_series(int num, ...);
    d = sum_series(5, 0.5, 0.25, 0.125, 0.0625, 0.03125);
    printf("soma da serie: %f \n",d);
}



// - 8
//*********************************************************************************
//********************************* SWITCH e CASE *********************************
//*********************************************************************************
//*********************************** case.cpp ************************************

#include <stdio.h>
void main()
{
    char opcao;
    printf("1. Opcao 1 \n");
    printf("2. Opcao 2 \n");
    printf("3. Opcao 3 \n");
    printf("Opcao:");
    do
    {
        opcao=getchar();
        switch(opcao)
        {
            case '1': printf ("\nVocê escolheu a opcao 1");
                break;
            case '2': printf ("\n Você escolheu a opcao 2");
                break;
            case '3': printf ("\n Você escolheu a opcao 3");
                break;
            default: printf ("\n Nenhuma opcao selecionada");
                break;
            }
    }while (opcao != '1' && opcao != '2' && opcao != '3');
}


// - 9
//*********************************************************************************
//********************************** DECLARANDO FUNCOES ***************************
//*********************************************************************************
//************************************* funcao1.cpp *******************************

#include <stdio.h>
#include <conio.h>

float media2(float a, float b)            //<-------- declarando função
{
    float med;
    med = (a + b) / 2.0;
    return(med);
}

void main()                    //<------- programa principal
{
    float num_1, num_2, media;
    puts("Digite dois numeros:");
    scanf("%f %f", &num_1, &num_2);
    media = media2(num_1, num_2);        //<-------- chamada da função
    printf("\nA media destes numeros e %f.", media);
}


// - 10
//*********************************************************************************
//********************************** DECLARANDO FUNCOES ***************************
//*********************************************************************************
//************************************* funcao2.cpp *******************************

#include <stdio.h>
#include <conio.h>

void KK (int i, char d)            //<----------- declaração de função
{
    printf("\nEm KK %c, i = ",d);
    while (i<10)
    printf("%d ", i++);
}

void main()
{
    int a=2;
    char y='A';
    KK(a,y);                //<--------- 1 função sendo chamada
             //printf("\nEm main, i = %d.\n ", i);
    int b=5;
    char s='B';                //<--------- 2 função sendo chamada
    KK(b,s);
}

// - 11
//*********************************************************************************
//********************************** DECLARANDO FUNCOES ***************************
//*********************************************************************************
//************************************* funcao3.cpp *******************************

#include <stdio.h>
#include <conio.h>

void KK (int i, char d)                //<---------- declaração de função
{
    printf("\ndigite um valor para %c : ", d);
    scanf("%d",&i);
    printf("Em KK %c, i = ",d);
    while (i<10)
    printf("%d, ", i++);
    printf("\n");
}

void main()
{
    int a;
    char y='A';
    KK(a,y);                //<--------- 1 função sendo chamada

                        //printf("\nEm main, i = %d.\n ", i);
    int b;
    char s='B';                //<---------- 2 função sendo chamada
    KK(b,s);
}

// - 12
//*********************************************************************************
//*********************************** USO DE "IF" *********************************
//*********************************************************************************
//************************************ ifelse.cpp *********************************

#include <stdio.h>
main()
{
    int i,j,resposta;
    char feito = ' ';
    for (i=1; i<3 && (feito != 'N'||feito != 'n'); i++)
    {
        for (j=1;j<5;j++)
        {
            printf("Quanto e' %d + %d? ",i,j);
            scanf("%d",&resposta);
            if (resposta != i+j)
            {
                printf("Errou!\n");
            }
            else
            {
                printf("Acertou!\n");
            }
        }
        printf("Mais? (N para nao) ");
        scanf("%c",&feito);
    }
}

// - 13
//*********************************************************************************
//******************** Pede o numero 100 para devolver comando ********************
//*********************************************************************************
//*********************************** qual.cpp ************************************

#include <stdio.h>

main()
{
    int num;
    do
    {
        printf("Qual e o numero? ");
        scanf("%d",&num);
    }while (num != 100);
}

// - 14
//*********************************************************************************
//*********************** Inerronpendo loop for com o uso de break ****************
//*********************************************************************************
//************************************ break.cpp **********************************


#include <stdio.h>
main()
{
    int t, cont;
    for (t=0; t<4; ++t)
    {
        cont = 1;
        for (;;)
        {
            printf("%d ",cont);
            cont++;
            if (cont == 7) break;
        }
    }
}


// - 15
//*********************************************************************************
//********************************** CONTINUE *************************************
//*********************************************************************************
//******************************** continue.cpp ***********************************

#include <stdio.h>
main()
{
    int x;
    for (x=0; x<100; x++)
    {
        if (x%2) continue; //<-----salta o comando printf quando for impar
        printf("%d ",x);        
    }
}

// - 16
//*********************************************************************************
//******************************** COMANDO GOTO ***********************************
//*********************************************************************************
//********************************** goto.cpp *************************************

#include <stdio.h>
int main()
{
    int opcao;
    while (opcao != 5)
    {
        REFAZ: printf("\n\n Escolha uma opcao entre 1 e 5: ");
        scanf("%d", &opcao);
        if ((opcao > 5)||(opcao <1)) goto REFAZ; /**volta ao rotulo REFAZ */
        switch (opcao)
        {
            case 1:
                printf("\n --> Primeira opcao..");
            break;
            case 2:
                printf("\n --> Segunda opcao..");
            break;
            case 3:
                printf("\n --> Terceira opcao..");
            break;
            case 4:
                printf("\n --> Quarta opcao..");
            break;
            case 5:
                printf("\n --> Abandonando..");
            break;
        }
    }
    return(0);
}

// - 17
//*********************************************************************************
//********************************* DO WHILE e BREAK ******************************
//*********************************************************************************
//************************************ acumula.cpp ********************************

#include <stdio.h>
int main ()
{
    int i;
    do
    {
        printf ("\n\nEscolha a fruta pelo numero:\n\n");
        printf ("\t(1)...Mamao\n");
        printf ("\t(2)...Abacaxi\n");
        printf ("\t(3)...Laranja\n\n");
        scanf("%d", &i);
    } while ((i<1)||(i>3));

    switch (i)
    {
        case 1:
            printf ("\t\tVoce escolheu Mamao.\n");
        
        case 2:
            printf ("\t\tVoce escolheu Abacaxi.\n");
        
        case 3:
            printf ("\t\tVoce escolheu Laranja.\n");
        break;
    }
    return(0);
}

// - 18
//*********************************************************************************
//****************************** CHAR, SCANF e WHILE ******************************
//*********************************************************************************
//************************************ scanf.cpp **********************************

#include <stdio.h>
int main ()
{
    printf("\n digite "q" para sair.");
    char Ch;

    while (Ch!='q')
    {
        do
        {
            scanf("%c", &Ch);
        }
        while (Ch!='q');

        printf("%c",Ch);
    }
    
}



// - 19
*********************************************************************************
******************** STRINGS ( strlen - strcpy - strcat ) ***********************
*********************************************************************************
*********************************** str.cpp *************************************

#include <stdio.h>
#include <string.h>
int main ()
{
    char str1[100],str2[100];
    printf ("\n\n\nEntre com uma string str_1: ");
    gets (str1);
    printf("\n\n\nstr_1 ====> %s", str1);


    strcpy (str2,"eu sou uma string: ");
    printf ("\n\nstr_2 = %s", str2);

    strcat (str2,str1);
    printf ("\n\nstr_2 + str_1 = %s",str2);

    strcpy (str2,"AAAAAA");
    printf ("\n\ncriando uma nova string str_2 -->%s",str2);
    printf ("\n\nstr_2 ====> %s", str2);

    printf("\n\ntamanho de str_2 = %d", strlen(str2));

    if (strcmp(str1,str2)==0)
    {
        printf ("\n\nAs strings str_1 e str_2 sao iguais.");
    }
    else
    {
        printf ("\n\nAs strings str_1 e str_2 sao diferentes.");
    }
    
    return(0);
}


/*    STR***
    
    B pode estar no formato de matriz ou como "CARACTERES".
    ou seja: substitua A por ("OI") e B por ("HEHEHE").
    
        STRCAT(A, B);
        copia string B no final da string A.
            
        STRCPY(A, B);
        copia a string B em A.
    
        STRLEN(A);
        pega o tanhanho da string.
    
        STRCMP(A,B);
        compara as strings. se elas forem diferentes retorna zero
*/


// - 20
//*********************************************************************************
//*********************************** MATRIZ **************************************
//*********************************************************************************
//********************************* matriz1.cpp ***********************************

#include <stdio.h>

main()
{
    int i;
    int a[5] = {11, 22, 33, 44, 55};
    for (i=0; i<=4; i++)
    {
        printf("\nElemento %d = %d",i, a[i]);
    }
}

// - 21
//*********************************************************************************
//*********************** MATRIZ DECLARADA PELO USUARIO ***************************
//*********************************************************************************
//******************************** matriz2.cpp ************************************

#include <stdio.h>
#include <stdlib.h>

main()
{
    int PP=0;
    char q;
    do
    {
        int i;
        int a[4];
        for (i=0; i<=4; i++)
        {
            printf("digite o elemento %d = ",i);
            scanf("%d",&a[i]);
        }
        for (i=4; i>=0 ;i--)         //<------inverte as posiçoes dos elementos
        {
            printf("\nO elemento %d = %d", i, a[i]);
        }
            printf ("\n\n \"1\" sair ou \"2\" para repetir "); scanf("%d", &PP);
    }while(PP!=1);
    exit;
}

// - 22
//*********************************************************************************
//*************************** MATRIZ EM UMA TABUADA *******************************
//*********************************************************************************
//******************************** matriz3.cpp ************************************

#include <stdio.h>

main()
{
    int a[11], i, t;
    printf("\ndigite um numero inteiro para ver sua tabuada: ");
    scanf("%d", &t);
    for (i=0;i<11;i++)
        {
            a[i] = i;
            printf("\n%2d **%d = %d",i,t, a[i]*t );
        }
}


// - 23
//*********************************************************************************
//********************* imprime o menor numero de uma matriz **********************
//*********************************************************************************
//********************************* menor.cpp *************************************

#include <stdio.h>

int MAX=6, x=1, a=0, b=0, z, k=0;
int A[20]={6, 4, 1, 7, 3, 2, 5};
int B[1];

testa();                //<-- indica a existencia de uma função
main()                    //<----------- inicio de main
{
    for(z=0; z<=MAX; z++){
    printf("%d ", A[z]);}
    printf("\n");
    testa();                //<-- chamada da funcão testa
    printf("\n%d ", B[0]);            
}                        //<-------------- fim de main
                        
                        
                        
testa()                        //<--- inicio da função testa
{
    do
    {
        if (A[a]>A[x])
        {
            a=x; x++;
        }
        else
        {
            if (x>=MAX)
            {
                B[b]=A[a];
                k=1;
            }
            else
            {
                 x++;
            }
        }
    }
    while(k!=1);
}

// - 24
//*********************************************************************************
//************************************* GETS **************************************
//*********************************************************************************
//*********************************** gets.cpp ************************************

#include <stdio.h>
main()
{
    char nome[40];
    printf("\nDigite seu nome:");
    gets(nome);                //<-- Scanf não permite espaco
    printf("Saudacoes %s\n",nome);        //--- entre as strings.
}

// - 25
//*********************************************************************************
//************************** ORDENA NUMEROS DE UMA MATRIZ *************************
//*********************************************************************************
//********************************* crescente.cpp *********************************

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main()
{
    clrscr();
    int PP=0;
    char q;
    do
    {
        printf("\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
        printf("\n Programa para colocar \"n\" numeros em ordem crescente");
        printf("\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
//------------------------------------criando a matriz A[Q]---------
        int Q,z,r=0;
        int quantidade_numeros;
        int A[1000];
        printf("\n digite a quantidade de numeros: ");
        scanf("%d",&quantidade_numeros);
        printf("\n");
        for(Q=0; Q<quantidade_numeros; Q++)
        {
            printf(" digigite o valor %d: ",Q);
            scanf("%d", &A[Q]);
            if(Q>0)            //<------ testa se o numero é repetido
            {
                for (z=0; z<Q; z++)
                {
                    if (A[z]==A[Q])
                    {
                        Q--;
                        printf("\n Numero repetido\n");
                        break;
                    }
                }
            }            //<--------------------- fim do teste
        }
        int MAX, n, x=0, k, a=0, f;
        MAX = quantidade_numeros;
//-------------------------------------fim da matriz A[Q]------------
        int B[1000];
        for (n=0; n<MAX; n++)
        {
            k=0;
            do
            {
                if (n==0)
                {
                    do
                    {
                        if(A[a]>A[x]) {a=x;}
                        else        {x++;}
                    }while(x<=MAX);
                    B[n]=A[a]; x=0; a=0; k=1;
                }
                else
                {
                    if ((B[n-1]<A[x])&&(B[n-1]<A[a]))
                    {
                        if (A[a]>=A[x])
                        {
                            if(x<MAX)
                            {
                                a=x; x++;
                            }
                            else
                            {
                                a=x; x=0;
                            }
                        }
                        else
                        {
                            if(x>=MAX)
                            {
                                B[n]=A[a]; a=0; x=0; k=1;
                            }
                            else
                            {
                                x++;
                            }
                        }
                    }
                    if(B[n-1]>=A[a])
                    {
                        if(a<MAX)
                        {
                            a++;
                        }
                        else
                        {
                            a=0;
                        }
                    }
                    if(B[n-1]>=A[x])
                    {
                        if(x<MAX)
                        {
                            x++;
                        }
                        else
                        {
                            x=0;
                        }
                    }
                }
            }while(k!=1);
        }
        for(f=0; f<MAX; f++)
        {
            printf("\n valor N-%3d = %4d", f+1, B[f]);
            r = r + B[f];
        }
        printf ("\n\n soma total = %d\n",r);
        printf ("\n\n \"1\" sair ou \"2\" para repetir ");
        scanf("%d", &PP);
    }while(PP!=1);
    exit;
}

// - 26
//*********************************************************************************
//***************************** Minimo multiplo comum *****************************
//*********************************************************************************
//***********************************minimo.cpp ***********************************

#include <stdio.h>

main()
{
    int m,n,k;
    printf("\nminimo multiplo entre 2 numeros\n");
    printf ("\ndigite o primeiro numero "); scanf(" %d",&m);
    printf ("digite o segundo numero "); scanf(" %d",&n);
    while (n != 0)
    {
        k = m - ((m / n) **n);
        m = n;
        n = k;
    }
    printf("\n MMC = %d",m);
}

// - 27
//*********************************************************************************
//**************************** destruindo arquivos ********************************
//*********************************************************************************
//********************************* fopen.cpp *************************************

#include <stdio.h>
#include <stdlib.h>
void main(int argc)
{
    FILE *fp;
    char ch;
    if((fp=fopen("eu","w"))==NULL)    //<---se nome for igual a de arquiv existente, já era
    {
        printf("Arquivo nao pode ser aberto\n");
        exit(1);
    }
    while(ch!='$')
    {
        ch = '$';        // No lugar de '$' pode ser usado getchar()
        putc(ch,fp);
    }
    fclose(fp);
}
// - 28
//*********************************************************************************
//****************************** REINICIANDO O PC *********************************
//*********************************************************************************
//********************************** reinic.cpp ***********************************

#include <dos.h>
/*
Set a pointer to function as interrupt function
*/

void interrupt (*restart)();
main()
{
    /*
    Point the restart as ROM FFFF:0000 jump 1 byte
                 FFFF:0001 store offset
                 FFFF:0003 store segment
    */
    restart=MK_FP(peek(0xffff,0x0003),peek(0xffff,0x0001));
    restart();
}

// - 29
//*********************************************************************************
//********* resolucão de equações de primeiro, segundo e treceiro grau ************
//*********************************************************************************
//*********************************** 3-grau.cpp **********************************

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

main()
{

    float a,b,c,d, A,B,C, G, q,p,r, t, u3,v3,u,v, r1,r2,r3, delta, real,k,K, imag, Pi, raiz1,raiz2,raiz3;
    int PP=0;
    do
    {
        printf("\n----------------------------------------------------");
        printf("\n ax^3 + bx^2 + cx + d = 0 \n\n");
        printf("Digite um Numero para \"a\": ");scanf("%f",&a);
        printf("Digite um Numero para \"b\": ");scanf("%f",&b);
        printf("Digite um Numero para \"c\": ");scanf("%f",&c);
        printf("Digite um Numero para \"d\": ");scanf("%f",&d);
        a = (float) a;
        printf("\n (%fx^3) + (%fx^2) + (%fx) + (%f) = 0 \n\n", a,b,c,d);
        if(a==0)
        {
            if(b==0)
            {
                if(c==0)
                {
                    printf("\nraiz = %10f ", -d);
                }
                else
                {
                    printf("\nraiz = %10f ", -d/c);
                }
            }
            else
            {
                delta = pow(c,2) - 4*b*d;
                p = -c/(2*b);
                if(delta<0)
                {
                    K = -delta;
                    q = pow(K,0.5)/(2*b);
                    printf("\nraiz1 = %10f + %10f i", p, q);
                    printf("\nraiz2 = %10f - %10f i", p, q);
                }
                if(delta==0)
                {
                    printf("\nraiz = %10f ", p);
                }
                else
                {
                    q = pow(delta,0.5)/(2*b);
                    printf("\nraiz1 = %10f", p + q);
                    printf("\nraiz2 = %10f", p - q);
                }
            }
        }
        else
        {
            A=b/a;
            B=c/a;
            C=d/a;
            
            p = B - A*A/3;
            q = C - A*B/3 + 2*A*A*A/27;
            G = q*q/4 + p*p*p/27;
            
            Pi = 3.141592653589793238462;
            float M = 0.3333333333333333;
            if(G<0)
            {
                r = sqrt(q*q/4 - G);
                t = acos(-q/2/r);
                
                float MM = t*M;
                float MM1 = (t+2*Pi)*M;
                float MM2 = (t+4*Pi)*M;

                raiz1 = 2*pow(r,M)*cos(MM)-A*M;
                raiz2 = 2*pow(r,M)*cos(MM1)-A*M;
                raiz3 = 2*pow(r,M)*cos(MM2)-A*M;

                printf ("\n raiz1 = %10f", raiz1);
                printf ("\n raiz2 = %10f", raiz2);
                printf ("\n raiz3 = %10f", raiz3);

            }
            else
            {
                u3 = -q/2 + pow(G,0.5);
                /*------------------------------------u3-------------*/
                if(u3<0)
                {
                    u = -pow(-u3,M);
                }
                else
                {
                    u = pow(u3,M);
                }
                /*------------------------------------FIM u3---------*/
                

                v3 = -q/2 - pow(G,0.5);
                /*------------------------------------v3-------------*/
                if(v3<0)
                {
                    v = -pow(-v3,M);
                }
                else
                {
                    v = pow(v3,M);
                }
                /*-----------------------------------FIM v3---------*/
            
                r1 = u + v - A*M;
                delta = (A + (r1))*(A + (r1)) + 4*C/r1;
                real = -(A+(r1))/2;
                k = delta **delta;
                K = pow(k,0.5);
                imag = pow(K,0.5)/2;
            

                /*----------------------------------- delta ---------*/
                if(delta<0)
                {
                    printf("\nraiz1 = %10f", r1);
                    printf("\nraiz2 = %10f + %f i", real,imag);
                    printf("\nraiz2 = %10f - %f i", real,imag);
                }
                else
                {
                    printf("\nraiz1 = %10f", r1);
                    printf("\nraiz2 = %10f", real + imag);
                    printf("\nraiz3 = %10f", real - imag);
                }
                /*-----------------------------------FIM delta------*/
                
            }    
        }
        printf ("\n\n \"1\" sair ou \"2\" para repetir ");
        scanf("%d", &PP);        
    }while(PP!=1);
    exit;
}

// - 30
//*********************************************************************************
//********************** deletando arquivos de outro diretorio ********************
//*********************************************************************************
//********************************* delet.cpp *************************************

/**supondo a existencia do arquivo "c:/diretorio/xx.bat", assim se deleta ele*/

#include <stdio.h>

main(){
int remove(const char *file);
remove("c:/diretorio/xx.bat");
}


// - 31
//*********************************************************************************
//**************************** equivalente a um dir *******************************
//*********************************************************************************
//************************************ ddir.cpp ***********************************

#include <stdio.h>
#include <dirent.h>

main()
{    
    DIR *d = opendir(".");
    struct dirent *de;
    while (de = readdir(d))
    {
        printf(" --------------- ");
        puts(de->d_name);
    }
    closedir(d);
}

// - 32
//*********************************************************************************
//**************************** Faça seus arquivos txt *****************************
//*********************************************************************************
//********************************** txt.cpp **************************************

#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
    FILE *fp;
    char ch;
    if(argc !=2)
    {
        printf("Voce esqueceu de entrar o nome do arquivo \n");
        exit(1);
    }
    if((fp=fopen(argv[1],"w"))==NULL)
    {
        printf("Arquivo nao pode ser aberto\n");
        exit(1);
    }
    do {
        ch = getchar();
        putc(ch,fp);
    } while(ch!='$');
    fclose(fp);
}

// - 33
//*********************************************************************************
//************************ imprime os argumentos de pois de arg *******************
//*********************************************************************************
//********************************** arg.cpp **************************************

#include <stdio.h>
void main(int argc, char **argv)
{
    /**programa que imprime os seus argumentos */

    int i;

    printf("argc = %d\n\n", argc);
    for (i=0; i<argc; ++i)
        printf("argv[%d]: %s\n", i, argv[i]);
}


// - 34
//*********************************************************************************
//************************** quadrados dos numeros de 1 a 25 **********************
//*********************************************************************************
//********************************** quadrado.cpp *********************************

#include <stdio.h>

void main(void)
{
    int i;
    printf("\t Numero \t Quadrado\n");
    for (i=0; i<=25; ++i)
        printf("\t %d \t\t %d\n", i, i*i);
}

// - 35
//*********************************************************************************
//******************************* declarando funções ******************************
//*********************************************************************************
//************************************ fun.cpp ************************************

#include <stdio.h>

/*---------- declarando funções -----------*/

float FUN_1(float y, float x)
{
    float ave;
    ave = (y + x) / 2;
    printf("media = %f\n", ave);
    return ave;
}

float FUN_2(float c, float d)
{
    float ave;
    ave = c **d;
    printf("multiplicacao = %f\n", ave);
    return ave;
}
/*----------------------------------------*/

void main()
{
    float a=5, b=15;

    FUN_1(a, b);        /**<---- função sendo chamada */
    FUN_2(a, b);        /**<---- função sendo chamada */
    FUN_2(2, 3);        /**<---- função sendo chamada */
}




// - 36
//*********************************************************************************
//****************************** declarando função ********************************
//*********************************************************************************
//********************************** func.cpp *************************************

#include <stdio.h>

/*-------------- declarando função -------------*/
void squares(void)
{
    int k;

    for (k=1; k<=10; k++)
    {
        printf("%d\n", k*k);
    }
}
/*----------------------------------------------*/

void main(void)
{
    squares();        /**<--- função sendo chamada */
}


// - 37
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* struct.cpp ************************************

#include <stdio.h>

void main(void)
{


    struct people
    {
        char name[50];
        int age;
        float salary;
    };


    struct people John = {"John Smith", 26, 124.5};
    struct people nata = {"natani", 11, 34.5};

    John.salary = 150.0;            /**<--- mudando o salario */

    printf("\nsalario = %f",John.salary);
    printf("\nsalario = %f",nata.salary);
    printf("\nsalario = %f",John.salary);
}

// - 38
//*********************************************************************************
//******************************* float/int ***************************************
//*********************************************************************************
//********************************* ver.cpp ***************************************

#include <stdio.h>

void main(void)
{
    int j = 2, k = 5;
    float r;
    r = (float) j / k;    /**se não tivesse o "(float)" */
                /**não seria a mesma coisa    */
    printf(" r = %f", r);
}

// - 39
//*********************************************************************************
//************************* Observando os ponteiros 1 *****************************
//*********************************************************************************
//****************************** ponteiro.cpp *************************************

#include <stdio.h>
main()
{

int x;
int *y;

printf("\nnumero:");scanf("%d", &x);

y = &x;

printf("\npara(y = &x;) temos:");

printf("\n\n----------------------------------");
printf("\nx = %9d | &x = %9d |", x, &x);
printf("\n--------------+-------------------");
printf("\ny = %9d | *y = %9d |", y, *y);
printf("\n----------------------------------");

printf("\n\n &x e o endereco que contem o valor de x");
printf("\n x e o valor que voce digitou");
printf("\n *y da o valor que esta no endereco indicado pelo valor y");
printf("\n y contem o valor do endereco de x\n");    

}

/*-------------------------------------------------------------------
IMPORTANTE: Quando se declara um apontador ele não aponta para lugar nenhum.
Compete ao programador colocar no apontador um endereço válido, antes de o
poder utilizar.

Assim ...

int *ip;    <-- ( declarando "*ip" )
*ip = 100;    <-- ( ERRO... para se atribuir valor a *ip, ele deve estar
            obrigatoriamente apontando para alguma variavel )

Um uso correcto, poderia ser, por exemplo:

int *ip, x;     <-- ( declarando "*ip" e uma variavel "x")
ip = &x;     <-- ( apontando o "*ip" para "x" )
*ip = 100;    <-- ( atribuição que chega em "x" )

-----------------------------------------------------------------------*/

// - 40
//*********************************************************************************
//*********************** Observando os ponteiros 2 *******************************
//*********************************************************************************
//****************************** ponte.cpp ****************************************

Para funcionar teríamos de recorrer a apontadores e ao operador & de obtenção do
endereço de uma variável:
//--------------------------- CERTO ---------------------------------------------

#include <stdio.h>

int n,m;

void swap(int *a, int *b)
{
    int t;
    t = *a; *a = *b; *b = t;        /**<--- diferenca */
}


main()
{
    n =1;
    m =3;
    printf("\n n = %d || m = %d", n,m);
    swap(&n,&m);                /**<--- diferenca */
    printf("\n n = %d || m = %d", n,m);
}

/**------------------------------ ERRADO
Por exemplo, se desejamos escrever uma função para trocar o conteúdo de duas
variáveis, a forma habitual não funcionaria:*/

#include <stdio.h>

int n,m;

void swap(int a, int b)
{
    int t;
    t = a; a = b; b = t;            /**<--- diferenca */
}

main()
{
    n =1;
    m =3;
    printf("\n n = %d || m = %d", n,m);

    swap(n,m);                /**<--- diferenca */

    printf("\n n = %d || m = %d", n,m);
}
*/

// - 41
//*********************************************************************************
//**************************** criando diretórios *********************************
//*********************************************************************************
//******************************** criadir.cpp ************************************

#include <dir.h>

main()
{
mkdir("MM");
}

// - 42
//*********************************************************************************
//******************* criando diretórios dentro de outro diretorio ****************
//*********************************************************************************
//********************************** criardir2 ************************************

#include <dir.h>

main()
{

/**pode ser especificado um drive tambem */

chdir("/ono");        /**<-- especifica o diretorio onde ... */
mkdir("mm");        /**<-- o diretorio mm é criado.    */
}

// - 43
//*********************************************************************************
//****************************** usando struct + fopen ****************************
//*********************************************************************************
//************************************ struc. cpp *********************************

#include <stdio.h>

struct registro
{
    int ramal;
    int area;
    int n_chamado;
    int tempo;
};

struct registro tab[] = {
    { 323, 11, 32323, 60},
    { 321, 11, 43434, 30},
    { 112, 19, 55555, 45},
    { 415, 21, 23323, 60},
    { 112, 19, 55555, 45},
    { 415, 21, 23323, 60},
    { 535, 11, 32334, 120},
    { 323, 11, 32323, 60},
    { 321, 11, 43434, 30},
    { 535, 11, 32334, 120},
    { 323, 11, 32323, 60},
    { 321, 11, 43434, 30},
    { 112, 19, 55555, 45},
    { 415, 21, 23323, 60},
    { 535, 11, 32334, 120},
};

#define N 15
void gravaTab()
{
    int i;
    FILE**arq = fopen("lista","w");
    fprintf(arq,"%d\n",N);
    for(i=0; i < N; i++)
    fprintf(arq,"%d %d %d     %d\n",tab[i].ramal,tab[i].area,tab[i].n_chamado,tab[i].tempo);
    fclose(arq);
}

int main()
{
    gravaTab();
}

// - 44
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* string.cpp ************************************

#include <stdio.h>
int main ()
{    
    int n;
    char string[100];
    printf ("Digite : ");
    gets (string);
    printf("\n");
    printf ("%s%n",string,&n);    /**<-- %n e &n capturam tamanho do %s. */
    printf("\n numero de caracteres digitado = %d\n",n);
}


// - 45
//*********************************************************************************
//***************************** o ponteiro argv ***********************************
//*********************************************************************************
//********************************* argv.cpp **************************************

    /**Programa para demonstrar o ponteiro argv, responsável pelo acesso
     aos argumentos de linha de comando.
    */

#include <stdio.h>

main(int argc, char *argv[])
{
    int i;

    for(i = 0; i < argc; i++)
    printf("argv[%d] aponta para %s\n", i, argv[i]);
}


// - 46
//*********************************************************************************
//******************* informa quantos argumentos foram digitados ******************
//*********************************************************************************
//*********************************** argc.cpp ************************************

/**Programa para demonstrar o uso do argumento argc.
Este programa recebe argumentos de linha de comando, e informa
quantos argumentos foram digitados.
*/

#include <stdio.h>

main(int argc, char *argv[])
{
    printf("\nO numero de argumentos da linha de comando sao %d", argc);
}



// - 47
//*********************************************************************************
//****************************** funcionamento do fopen ***************************
//*********************************************************************************
//*********************************** fopen.cpp ***********************************

#include <stdio.h>
#include <stdlib.h>
main()
{
    FILE *fp;                /**<--- declarando arquivo */

    fp = fopen("teste.dat", "w");        /**<--- abrindo o arquivo */

    fprintf(fp, "ola!\ntudo bem?");    /**<--- fprintf coloca dentro do arquivo */

    fclose(fp);                /**<--- fecha o arquivo */
}

/**OBS: colocando uma condicional para erro de abertura de arquivo.
colocar (fp = fopen("teste.dat", "w")) dentro de um comando if
exemplo:

if( aquidentro == NULL)
{
    ...;
}

note que apenas se subistui "fp = fopen("teste.dat", "w")" por:
--------------------------------------------------------------
    if((fp = fopen("teste.dat", "w")) == NULL)
    {
        printf("Não posso abrir o arquivo");
        exit(1);
    }
--------------------------------------------------------------
*/

// - 48
//*********************************************************************************
//********************** achando o tamanho de um string ***************************
//*********************************************************************************
//****************************** string2.cpp **************************************

#include <stdio.h>
#include <stdlib.h>

int strtam(char *s);
void main(void)
{
    char *lista="abracadabra";
    printf("O tamanho do string \"%s\" e %d caracteres.\n", lista, strtam(lista));
}

int strtam(char *s)
{
    int tam=0;
    while(*(s + tam++) != '\0');
    return tam-1;
}

// - 49
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************** snprintf1.cpp *******************************

#include <stdio.h>
#include <string.h>

main()
{
    char buf[5];
    int n, x = 1234;
    snprintf(buf, sizeof buf, "%.6d%n", x, &n);
    printf("l = %d\n", strlen(buf));
    printf("n = %d\n", n);
    printf("buf = [%s] (%d)\n", buf, sizeof buf);
    printf("x = %d\n", x);
}

/**OBS: O que é que realmente acontece ? A string de formatação é estendida
completamente antes de ser cortada e depois copiada para o buffer de destino.
/*

// - 50
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************** snprintf2.cpp *******************************

#include <stdio.h>
#include <string.h>

int
main(int argc, char **argv)
{
    int i = 1;
    char buffer[64];
    snprintf(buffer, sizeof buffer, argv[1]);
    printf("buffer : [%s] (%d)\n", buffer, strlen(buffer));
    printf ("i = %d (%p)\n", i, &i);
}



// - 51
//*********************************************************************************
//**************** lendo a primeira linha de um arquivo já criado *****************
//*********************************************************************************
//******************************* lendo1.cpp **************************************

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main()
{
    FILE *p;
    char str[30], RESPOSTA[80], LINHA[50] = "-----------------";
    int i,n;
    printf("\n\n Entre com um nome para o arquivo: ");
//***************************************************************************
//         stdin = indica que é para ler do TECLADO    
//         str é a instancia da STRING                                
//         29 é o temanho da STRING                
/*/**************************************************************************
    fgets(str,29,stdin);        /*****Usa fgets como se fosse gets */
    
    for(i=0; str[i]; i++)
    {
        if(str[i]=='\n')
        {
            str[i]=0;    /*****Elimina o \n da string lida */
        }
    }
/****************************************************************************/
//                     (%n-&n) pega o numero de caracteres
/****************************************************************************/    
    printf("\n%s %s %s\n%n", LINHA, str, LINHA, &n);

    if(!(p = fopen(str,"r")))    /*****abre o arquivo em modo de leitura("r") */
        {
            printf("Erro! Impossivel abrir o arquivo %s!\n", str);
            exit(0);
        }

    fgets(RESPOSTA, 50, p);        /*****salva conteudo de "p" em "RESPOSTA" */
    printf("%s", RESPOSTA);
    fclose(p);            /*****Fecha o arquivo */
    int w;
    for(w = 0; w < (n-2) ; w++)
    {
        printf("-");
    }
}


// - 52
//*********************************************************************************
//************************ usando feof para ler um arquivo ************************
//*********************************************************************************
//*********************************** lendo2.cpp **********************************

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *p;
    char str[80],c;
    /**Le um nome para o arquivo a ser aberto: */
    printf("\n\n Entre com um nome para o arquivo:\n");
    gets(str);
    if (!(p = fopen(str,"r")))    /**Caso ocorra algum erro na abertura do arquivo..*/
    {                /**o programa aborta automaticamente */
        printf("Erro! Impossivel abrir o arquivo!\n");
        exit(1);
    }
    /**Se nao houve erro, imprime no arquivo, fecha ...*/

    while (!feof(p))
    {
        fscanf(p,"%c",&c);
        printf("%c",c);
    }
    fclose(p);
}

// - 53
//*********************************************************************************
//********************** construindo uma matriz de ordem 3X3 **********************
//*********************************************************************************
//********************************* matriz.cpp ************************************

#include <stdio.h>

int main()
{
    int mat[3][3];
    int i,j;

    /*******************Leitura da Matriz: *************************/

    printf("\n\nEntre com os valores para a matriz (em hexadecimal):");
    for (i=0; i<3; i++)
    {
        for (j=0; j<3; j++) {
        printf("\nLinha %d, coluna %d: ",i+1, j+1);
        scanf("%X", &mat[i][j]); }
    }

    /***********************Impressao: *****************************/

    printf("\n");
    for (i=0; i<3; i++)
    {
        printf("\n|");
        for (j=0; j<3; j++)
        printf("%-6X|", mat[i][j]);
    }
    return 0;
}

// - 54
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************* caract.cpp **************************************

/*
Escreva um programa que abra um arquivo texto e conte o número de caracteres
presentes nele. Imprima o número de caracteres na tela.
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *p;
    char c, str[30];
    int i = 0;

    /**************Le um nome para o arquivo a ser aberto: **********/
    printf("\n\n Entre com um nome para o arquivo:\n");
    gets(str);

    /************************Abre para leitura **********************/
        /****Caso ocorra algum erro na abertura do arquivo ***/
    if (!(p = fopen(str,"r")))
    {
        /***********o programa aborta automaticamente ********/
        printf("Erro! Impossivel abrir o arquivo!\n");
        exit(1);
    }
    
    /************Enquanto não se chegar no final do arquivo ***********/
    while (!feof(p))
    {
        /************Le um caracter no arquivo ********/
        c = getc(p);
        /****************E incrementa i ***************/
        i++;
    }
    /**************************Fecha o arquivo **********************/
    fclose(p);
    printf("\nO numero de caracteres do arquivo %s e' igual a %d ", str, i);
    return 0;
}

// - 55
//*********************************************************************************
//********************* acrescenta um arquivo em outro ****************************
//*********************************************************************************
//******************************* fusao.cpp ***************************************

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


main ()
{    
    int i,j;
    char ch;
    FILE *p, *E;
/*------------------------------------------------------------------------*/

    char NOME_DO_ARQUIVO1[13];
    printf("\nPrograma que crescenta um arquivo em outro");
    printf("\n\no primeiro nome e o que vai receber");
    printf("\no segundo nome e o que vai ser acrescentado");
    printf("\n\n\nDigite o nome do arquivo-1 : ");
    fgets(NOME_DO_ARQUIVO1,12,stdin);
    for(i=0; NOME_DO_ARQUIVO1[i]; i++)
    {
        if(NOME_DO_ARQUIVO1[i]=='\n')
        {




            /**Elimina o \n da string lida */
            NOME_DO_ARQUIVO1[i]=0;
        }
    }


    /**abre o arquivo em modo de acrescentar("ab") */
    if(!(p = fopen(NOME_DO_ARQUIVO1,"ab")))
    {
        printf("Erro! Impossivel abrir o arquivo %s!\n", NOME_DO_ARQUIVO1);
        exit(0);
    }

/*------------------------------------------------------------------------*/
    char NOME_DO_ARQUIVO2[13];
    printf("Digite o nome do arquivo-2 : ");
    fgets(NOME_DO_ARQUIVO2,12,stdin);
    for(j=0; NOME_DO_ARQUIVO2[j]; j++)
    {
        if(NOME_DO_ARQUIVO2[j]=='\n')
        {
            /**Elimina o \n da string lida */
            NOME_DO_ARQUIVO2[j]=0;
        }
    }

    /**abre o arquivo em modo de ler("rb") */
    if(!(E = fopen(NOME_DO_ARQUIVO2,"rb")))
    {
        printf("Erro! Impossivel abrir o arquivo %s!\n", NOME_DO_ARQUIVO2);
        exit(0);
    }
/*------------------------------------------------------------------------*/
    int re=0;
    while(!feof(E))
    {    re++;
        ch = getc (E);
        if(ferror(E))
        {
            printf("erro lendo o arquivo");
            break;
        }
    }
    rewind(E);

    int xx=0;
    while(xx<re-1)
    {
        xx++;
        ch = getc (E);
        if(ferror(E))
        {
            printf("erro lendo o arquivo");
            break;
        }
        putc (ch, p);
        if(ferror(p))
        {
            printf("erro na gravacao do arquivo");
            break;
        }
    }

    fclose(p);
    fclose(E);
    clrscr();
}

// - 56
//*********************************************************************************
//**************************** Usando o #define ***********************************
//*********************************************************************************
//******************************* define.cpp **************************************

#include <stdio.h>

#define max(A, B) ((A) > (B) ? (A) : (B))

main ()
{
    float x,n,m;
    printf("digite n:");
    scanf("%f", &n);
    printf("digite m:");
    scanf("%f", &m);
    x = max( n , m );
    printf (" n = %f, m = %f, x = %f", n,m,x);
}

// - 57
//*********************************************************************************
//**************************** escrevendo em um arquivo ***************************
//*********************************************************************************
//*********************************** editor.cpp **********************************

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


main ()
{    
    int i;
    char ch;
    char NOME_DO_ARQUIVO[13];
    FILE *p;
    printf("\n --- EDITOR ------------( para sair use \"*\" e <ENTER> )\n");
    printf("\nDigite o nome do arquivo : ");
    fgets(NOME_DO_ARQUIVO,12,stdin);
    for(i=0; NOME_DO_ARQUIVO[i]; i++)
    {
        if(NOME_DO_ARQUIVO[i]=='\n')
        {    
            /**Elimina o \n da string lida */
            NOME_DO_ARQUIVO[i]=0;
        }
    }
    /**abre o arquivo em modo de acrescentar("a") */
    if(!(p = fopen(NOME_DO_ARQUIVO,"a")))
    {
        printf("Erro! Impossivel abrir o arquivo %s!\n", NOME_DO_ARQUIVO);
        exit(0);
    }
    system("cls.exe");
    printf("\n --- EDITOR ------------ ( para sair use \"*\" e <ENTER> )\n");
    printf("\n ---------------------------------------------------------\n\n\n");

    do
    {
        ch = getchar();
        if(ch == '*')
        {
            break;
        }
        putc(ch,p);
    } while( 1 );
    fclose(p);
    clrscr();
}

/**pode-se usar este codigo no lugar do DO-WHILE:
------------------------------------------------------------------
    for(    ;    ch!='*'    ;    ch=getchar()    )
    {
        putc(ch,p);
    }
----------------------------- OU ENTÃO ---------------------------
    ch = '\n';
    while(ch!='*')
    {
        putc(ch,p);
        ch=getchar();
    }

*/


// - 58
//*********************************************************************************
//******************************* STRUCT-SEEK-FEOF ********************************
//*********************************************************************************
//********************************** cidade.cpp ***********************************


/**-------- fread - rewind - fflush - fseek -------------*/

#include <stdio.h>
#include <stdlib.h>

/*----------------------------- STRUCT -----------------------------*/
struct cidades
{
    int codigo;
    char nome[50],uf[3];
}
cidade;
/*------------------------- FIM STRUCT -----------------------------*/





/*----------------------------- MAIN -----------------------------*/
int main(void)
{
    FILE *arquivo;
    int achou, cod_temp;
    if ((arquivo=fopen("cidades.dat","r+b"))==NULL)
    {
        if ((arquivo=fopen("cidades.dat","w+b"))==NULL)
        {
            fprintf(stderr,"\n\tNão consegui criar o arquivo das Cidades\n");
            exit(1);
        }
    }
    do
    {
        printf("\nCodigo: ");
        scanf("%d",&cod_temp);
        
        fflush(stdin);            // <-- OBS-1!!!!
        
        if (cod_temp==0) break;
        rewind(arquivo);        // <-- OBS-2!!!!
        achou=0;

        while(fread(&cidade,sizeof(cidade),1,arquivo)==1 && !feof(arquivo))    //<--OBS!!!
        {
            if (cidade.codigo==cod_temp)
            {
                printf("\n---- Codigo ja cadastrado ----");
                printf("\ncodigo %d", cidade.codigo);
                printf("\nnome = %s", cidade.nome);
                printf("\nUF = %s", cidade.uf);
                printf("\n------------------------------");
                printf("\n");
                printf("\nTecle algo . . .");
                getchar();
                achou=1;
                break;
            }
        }
        if (!achou)
        {
            cidade.codigo=cod_temp;
            printf("Nome..: ");
            scanf("%s",&cidade.nome);
            printf("Estado..: ");
            scanf("%s",&cidade.uf);
            fseek(arquivo,0,SEEK_END);    //<-- OBS-3!!!
            fwrite(&cidade,sizeof(cidade),1,arquivo);
        }
    } while(1);
    fclose(arquivo);
    return(0);
}
/*----------------------------- FIM MAIN -----------------------------*/

// - 59
//*********************************************************************************
//***************************** usando fopen **************************************
//*********************************************************************************
//******************************** temp.cpp ***************************************

/**Escrever um programa que crie um ficheiro de texto contendo 4 nomes
de cidades e respectivas temperaturas médias num dado dia. */



#include <stdio.h>
#include <stdlib.h>

main()
{
    int i;
    char *cidade[4]={"Porto", "Aveiro", "Coimbra", "Lisboa"};
    float temp[4]={12.5, 11.8, 12.2, 14};

    FILE *fout;
    if(!(fout=fopen("exp.dat","w")))
    {
        printf("impossivel");
        exit(1);
    }

    for (i=0; i<4; i++)
    {
        fprintf(fout,"%s %f\n", cidade[i], temp[i]);
    }

    fclose(fout);
    printf("Escrita do ficheiro terminada\n");
}


// - 60
//*********************************************************************************
//****************** executanto um arquivo executal externo ***********************
//*********************************************************************************
//********************************* execv.cpp *************************************

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    system("C:\\path\\NOME_DO_EXECUTAVEL(pode ser com/exe");
    return 0;
}

// - 61
//*********************************************************************************
//******************* gravando a sequencia de fibunaci em arquivo *****************
//*********************************************************************************
//********************************** pascal.cpp ***********************************

#include <stdio.h>
#include <stdlib.h>

main()
{        
    FILE *p;
    if (!(p = fopen("str.txt","w")))
    {            
        printf("Erro! Impossivel abrir o arquivo!\n");
        exit(1);
    }



    int i, z, n;
    int numero;
    printf("digite o valor maximo:");
    scanf(" %11d", &numero);
    for(i=0, n=1; i<=n; i+n)
    {
        fprintf(p,"%11d ", i);
        z = i;
        i = n;
        n = z+n;
        if(numero < n)
        {
            break;
        }
    }


    fclose(p);
    printf("concluido");
}

// - 62
//*********************************************************************************
//****************************** invertendo frase *********************************
//*********************************************************************************
//********************************* frase.cpp *************************************

#include <stdio.h>
#include <string.h>

int main ()
{

    int i=0, tamanho,j=0;
    char frase [20], invertida [20];


    
    printf("Programa inverte string com ate 20 caracteres\n");
    printf("Entre com a string a ser invertida :");
    gets (frase);

    tamanho = strlen(frase); /*devolve o tamanho da string lida*/
    for (i=tamanho;i>=0;i--)
    {
        invertida[j]=frase[i];
        printf ("%c", invertida[j]);
        j = j + 1;
    }
    printf("\n");
    return(0);
}


// - 63
//*********************************************************************************
//***************** Programa lê Matriz 3 X 3 e busca n° solicitado ****************
//*********************************************************************************
//********************************** matriz.cpp ***********************************

#include <stdio.h>

int main ()
{
    int m[3][3], l, c, busca;

    /**Lendo a Matriz */
    printf ("Entre com os elementos da Matriz: ");
    for (l=0; l<3; l++)
    {
        for (c=0; c<3; c++)
        {
        printf ("\n Digite o elemento m[%d][%d] :", l+1, c+1);
        scanf ("%d", &m[l][c]);
        }
    }

    /**Lendo o número desejado e procurando na Matriz */
    printf ("\n Digite o número a procurar: ");
    scanf ("%d", &busca);
    for (l=0; l<3; l++)
    {
        for (c=0; c<3; c++)
        {
            if (m[l][c] == busca)
            {
                printf ("\n Linha %2d e Coluna %2d", l+1, c+1);
            }
        }
                
    }
}

// - 64
//*********************************************************************************
//***************************** testa se o numero é par ***************************
//*********************************************************************************
//************************************ par.cpp ************************************

#include <stdio.h>

main()
{
    int NUMERO;
    printf("digite um numero para saber se ele e' par: ");
    scanf("%d", &NUMERO);

    if (!(NUMERO % 2))
    {
        printf ("O numero %d e' par", NUMERO);
    }
    else
    {
        printf ("O numero %d e' impar", NUMERO);
    }
}

// - 65
//*********************************************************************************
//************************************ FUNCAO *************************************
//*********************************************************************************
//*********************************** func.cpp ************************************

#include<stdio.h>

void g (void)
{
    printf("g\n");
}

void f (void)
{
    printf("F\n");
    g();
}

int main(void)
{
    f();
}

// - 66
//*********************************************************************************
//************************ salvando caracteres ANSI em txt ************************
//*********************************************************************************
//*********************************** ansi.cpp ************************************

#include<stdio.h>
#include<stdlib.h>

main()
{
    FILE *p;
    if(!(p=fopen("ansi.txt", "w")))
    {
        printf("impossivel!");
        exit(1);
    }
    int a;
    for (a=0; a!=8; a++)
    fprintf(p,"%3d -- %c \t",a,a);
    for (a=14; a!=26; a++)
    fprintf(p,"%3d -- %c \t",a,a);
    fprintf(p," 26 -- SK\t");
    for (a=27; a!=259; a++)
    fprintf(p,"%3d -- %c \t",a,a);
    fclose(p);
}

// - 67
//*********************************************************************************
//******************************** sistem e PAUSE *********************************
//*********************************************************************************
//********************************** sist.cpp *************************************

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char cod;
    printf("Trabalhando com ASCII =-P\n\n");
    printf("Digite qualquer coisa ae:\n\n");
    scanf("%c", &cod);
    printf("Esse eh codigo em ASCII referente ao caractere %d: %c \n\n",cod,cod);
    system("PAUSE");
    return(0);
}

// - 68
//*********************************************************************************
//******************* imprime caracteres de 1 a 255 (GOTOXY) **********************
//*********************************************************************************
//********************************* gotoxy1.cpp ***********************************

#include<stdio.h>
#include<conio.h>

void main(void)
{
    int cont, tela, controle=1;

    clrscr();
    for(tela=1, cont=1; cont<=255; cont++, tela++)
    {
        printf("ALT+%d = %c\n",cont,cont);
        if(tela%21 == 0)
        {
        gotoxy(20,24); printf("Tela %d - Tecle ENTER",controle++);
        getch();
        clrscr();
        }
    }
}


// - 69
//*********************************************************************************
//******************************* fflush(stdin) ***********************************
//*********************************************************************************
//********************************** fflu.cpp *************************************

#include<stdio.h>
#include<conio.h>
#include<ctype.h>

#define MAX 100

main(void)
{
    char letras[MAX];

    int cont=-1;
    int maiusculas=0, total=0, minusculas=0;


    clrscr();
    printf("Fique livre para digitar o que quiser:\n");
    printf("Para sair tecle $ e em seguida tecle <ENTER> \n\n");
    do
    {
        cont++;
                //se eu colocar fflush(stdin);
                //limpa-se <enter>
        scanf("%c",&letras[cont]);
        ++total;
        if(letras[cont] >= 'A' && letras[cont] <='Z')
        {
            ++maiusculas;
        }
        if(letras[cont] >='a' && letras[cont] <='z')
        {
            ++minusculas;
        }

    } while(letras[cont]!='$');
    printf("Numero de caracteres digitados incluindo ENTER's e ESPACOS EM BRANCO= %d",total);
    printf("\nMaiusculas digitadas = %d",maiusculas);
    printf("\nMinusculas digitadas = %d",minusculas);
    getch();
}

// - 70
//*********************************************************************************
//***************************** usando GOTOXY *************************************
//*********************************************************************************
//****************************** gotoxy2.cpp **************************************

#include <stdio.h>
#include <conio.h>

int main()
{
    clrscr();
    gotoxy(10,10);
    printf("Oi, estou vivo");
    gotoxy(40,5);
    printf("Continuo vivo, em outra posicao");
    getch();
    return 0;
}



// - 71
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************** gotoxy.cpp ***********************************

#include <stdio.h>
#include <conio.h>

int main()
{
    clrscr();
    gotoxy(10,10);
    printf("Oi, estou vivo");
    gotoxy(40,5);
    printf("Continuo vivo, em outra posicao");
    getch();
    return 0;
}

// - 72
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************** apontador1.cpp *********************************

#include <stdio.h>

main()
{
    char s[]= "abcd";
    char *ps = s;
    int i;
    for (i=3; i>=0; i--)
    {
        printf(" apontado = %c\n", *(ps+i));
        printf("!apontado = %d\n\n", (ps+i));
    }
}


// - 73
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************** apontador2.cpp *********************************

#include <stdio.h>

main()
{
    char STRING[100];
    int n;
    char *ps = gets(STRING);
    printf("%s%n\n", STRING, &n);
    int i=0;
    for (; i<n; i++)
    {
        printf(" apontado = %c\n", *(ps+i));
        printf("!apontado = %d\n\n", (ps+i));
    }
}

// - 74
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************** apontador2.cpp ******************************

#include <stdio.h>
#include <string.h>

main()
{
    char STRING[100];
    char *ps = gets(STRING);
    int n = strlen(STRING);
    int i=0;
    for (; i<n; i++)
    {
        printf(" apontado = %c\n", *(ps+i));
        printf("!apontado = %d\n\n", (ps+i));
    }
}

// - 75
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

/**--------------------- DO-WHILE.cpp ------------------*/
#include <stdio.h>

main()
{
    char ch;

    // se mudarmos o valor de "char ch" para "int ch"
    // aparecera' uma carinha no caractere inicial

    while(ch!='*')
    {
        printf("%c",ch);
        ch=getchar();
    }
}

/**--------------------- FOR.cpp ------------------*/

#include <stdio.h>

main()
{    
    int ch;
    for(    ;    ch!='*'    ;    ch=getchar()    )
    {
        printf("%c",ch);
    }
}

// - 76
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* tamanho.cpp ***********************************

#include <stdio.h>
#include <string.h>

main()
{
    int tamanho;
    char STRING[100];
    tamanho = strlen(gets(STRING));
    printf ("tamanho da palavra é = %d", tamanho);
}

// - 77
//*********************************************************************************
//************** verificando e imprimindo a possivel existencia de um email *******
//*********************************************************************************
//************************************** email.cpp ********************************


#include <stdio.h>
#include <stdlib.h>

int main ()
{
    char s[500], x[35];
    int i=0, j=0;
    printf("Entre com o texto: ");
    gets(s);
    while(s[i] != '@') /**procura pela caractere @ */
    i++;
    while(s[i] != ' ') /**volta procurando um espaço */
    i--;
    ++i;
    while(s[i] != ' ') /**avança lendo o e-mail */
    {
        x[j]=s[i];
        ++j;
        ++i;
    }
    printf("\n\n%s\n\n", x);
    system("pause");
    return (0);
}


// - 78
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* iostream.cpp **********************************

include<iostream.h>

main()
{
    char t[30];
    cin>>t;
    cout<<t;
    return(0);
}

// - 79
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

#include <dir.h>
#include <stdlib.h>

int main()
{
    chdir("c:/");
    system("dir");
}

// - 80
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* iostream.cpp **********************************

#include <iostream.h>

void sample(char *s, int i=5)
{
    cout << "parameter 1 = "<< s << endl ;
    cout << "parameter 2 = "<< i << endl;
}

main()
{
    sample("test1");
    sample("test2",10);
    return 0;
}

// - 81
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************** lista.cpp **************************************

#include <iostream.h>
#include <string.h>

typedef struct
{
    char nome[20];
    char cidade [20];
    char pais[20];
}estrutura_entrada;

const int MAX=10;
estrutura_entrada lista[MAX];
int numInLista;

void entrada_nome()
{
    if (numInLista < MAX)
    {
        cout << "Nome: ";
        cin >> lista[numInLista].nome;
        cout << "Cidade: ";
        cin >> lista[numInLista].cidade;
        cout << "Estado: ";
        cin >> lista[numInLista].pais;
        numInLista++;
    }
    else
    {
        cout << "Lista cheia\n";
    }
}

void nome_escolhido(int i)
{
    cout << endl;
    cout << lista[i].nome << endl;
    cout << lista[i].cidade << endl;
    cout << lista[i].pais << endl;
}

void mostra_lista()
{
    int i;
    for (i=0; i < numInLista; i++)
    {
        nome_escolhido(i);
    }
    cout << endl;
}

void busca_nome()
{
    char s[20];
    int i;
    int found=0;
    if (numInLista==0)
    {
        cout << "\nLista vazia\n";
    }
    else
    {
        cout << "Entre com o nome: ";
        cin >> s;
        for (i=0; i < numInLista; i++)
        {
            if (strcmp(s,lista[i].nome)==0)
            {
                nome_escolhido(i);
                found=1;
            }
        }
        if (!found)
        {
            cout << "\nNÆo consta.\n\n";
        }
    }
}

void Menu_entrada()
{
    cout << "\n--- Menu da lista de endereços ---\n";
    cout << " 1 - Adicionar a lista\n";
    cout << " 2 - Mostrar a lista\n";
    cout << " 3 - Procurar nome\n";
    cout << " 4 - Sair\n\n";
    cout << "Entre com sua escolha: ";
}

void main()
{
    char escolha[10];
    int sair=0;
    numInLista=0;
    while (!sair)
    {
        Menu_entrada();
        cin >> escolha;
        switch(escolha[0])
        {
            case '1':
                entrada_nome();
                break;
            case '2':
                mostra_lista();
                break;
            case '3':
                busca_nome();
                break;
            case '4':
                sair=1;
                break;
            default:
                cout << "\nEscolha inv lida.\n\n";
        }
    }
}


// - 82
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************* movendo.cpp *******************************

#include <stdio.h>
#include <conio.h>

#define CIMA 72
#define BAIXO 80
#define ESQ 77
#define DIR 75

void main ( )
{
    int i,x,y;
    char c;
    char g=1;
    _setcursortype(_NOCURSOR);
    clrscr();
    x=15;
    y=10;
    gotoxy(x,y);
    printf("%c",g);
    do
    {
        c = getch();
        if (c == 0)
        {
            c=getch();
            switch (c)
            {
                case CIMA:
                    gotoxy(x,y);
                    printf(" ");
                    if(y != 1)
                    {
                        y--;
                    }
                    gotoxy(x,y);
                    printf("%c",g);
                    break;
    
                case BAIXO:
                    gotoxy(x,y);
                    printf(" ");
                    if (y != 24)
                    {
                        y++;
                    }
                    gotoxy(x,y);
                    printf("%c",g);
                    break;
    
                case ESQ:
                    gotoxy(x,y);
                    printf(" ");
                    if (x != 80)
                    {
                        x++;
                    }
                    gotoxy(x,y);
                    printf("%c",g);
                    break;
    
                case DIR:
                    gotoxy(x,y);
                    printf(" ");
                    if (x != 1)
                    {
                        x--;
                    }
                    gotoxy(x,y);
                    printf("%c",g);
                    break;
            }

        }
    }while(c !='a');
}


// - 83
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ editor2.cpp ********************************

#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
    FILE *fp;
    char ch;
    if(argc !=2)
    {
        printf("Voce esqueceu de entrar o nome do arquivo \n");
        exit(1);
    }
    if((fp=fopen(argv[1],"w"))==NULL)
    {
        printf("Arquivo nao pode ser aberto\n");
        exit(1);
    }
    do
    {
        ch = getchar();
        putc(ch,fp);
    } while(ch!='$');
    fclose(fp);
}


// - 84
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************** hex.cpp **************************************

//mostra o que tem dentro de um arquivo em hexadecinal

    
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>

#ifndef __cplusplus
typedef enum { false, true } bool;
#endif

typedef unsigned char byte;

void PrintLine(const byte *line, int linesize, long pos)
{
    int c;

    printf("%04lX : ", pos);
    for(c = 0; c < linesize; c++)
    printf("%02X ", line[c]);

    printf("- ");
    for(c = 0; c < linesize; c++)
        printf("%c", line[c] < 32 ? '.' : line[c]);
    printf("\n");
}

bool ReadFromFile(const char *filename)
{
    byte buffer[17];
    long size, total;
    FILE *file = fopen(filename, "rb");

    if(!file)
    return false;

    total = 0;
    while(!feof(file))
    {
        size = fread(buffer, sizeof(byte), sizeof(buffer), file);
        PrintLine(buffer, size, total);
        total += size;
    }
    fclose(file);
    return true;
}


void main(int argc, char *argv[])
{
    if(argc < 2)
    {
        printf("Uso: readfile arquivo.ext.\n");
        return;
    }

    if(!ReadFromFile(argv[1]))
    {
        printf("Erro lendo arquivo %s.\n", argv[1]);
        return;
    }
}

// - 85
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************* frag.cpp **********************************

/**--------------------- fragmentador de arquivo ---------------------
devido a um problema que tive em colocar no dico-virtual um arquivo muito grande,
tive que bolar uma maneira de fragmenta-lo em partes menores para
pudesse reconstrui-lo mais tarde. após a fragmentação, garde os arquivos em ZIP,
pois assim evitará a auto-correção da transferencia pela ineternet.
Essa foi a solução:
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    FILE *ai;
    char ch,g;
    char arq1[20];
    printf("\ndigite o nome do arquivo para dividir:");
    gets(arq1);
    if((ai=fopen(arq1,"rb"))==NULL)
    {
        printf("\nArquivo nao pode ser aberto\n");
        exit(1);
    }
    while(!feof(ai))
    {    
        FILE *af;
        char arq2[20];
        printf("\napenas <enter> para sair\n");
        printf("arquivo numero:");
        gets(arq2);
        if((af=fopen(arq2,"wb"))==NULL)
        {
            printf("\nArquivo nao pode ser aberto\n");
            exit(1);
        }
        int t=0;
        while(t<=1400000)
        {
            ch = getc (ai);
            if(ferror(ai))
            {
                printf("erro lendo o arquivo");
                break;
            }
            if(feof(ai))
            {
                break;
            }
            putc (ch, af);
            if(ferror(af))
            {
                printf("erro na gravacao do arquivo");
                break;
            }
            t++;
        }
        fclose(af);
    }
    fclose(ai);
    return(0);
}

// - 86
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ reun.cpp ***********************************


/**-------------------- reunificador de arquivo ---------------------------
    - OBS: uma união de cada vez
    - complemento de frag.cpp
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


main ()
{    
    int i,j;
    char ch;
    FILE *p, *E;
/*------------------------------------------------------------------------*/

    char NOME_DO_ARQUIVO1[13];
    printf("\nPrograma que crescenta um arquivo em outro");
    printf("\n\no primeiro nome e o que vai receber");
    printf("\no segundo nome e o que vai ser acrescentado");
    printf("\n\n\nDigite o nome do arquivo-1 : ");
    fgets(NOME_DO_ARQUIVO1,12,stdin);
    for(i=0; NOME_DO_ARQUIVO1[i]; i++)
    {
        if(NOME_DO_ARQUIVO1[i]=='\n')
        {




            /**Elimina o \n da string lida */
            NOME_DO_ARQUIVO1[i]=0;
        }
    }


    /**abre o arquivo em modo de acrescentar("ab") */
    if(!(p = fopen(NOME_DO_ARQUIVO1,"ab")))
    {
        printf("Erro! Impossivel abrir o arquivo %s!\n", NOME_DO_ARQUIVO1);
        exit(0);
    }

/*------------------------------------------------------------------------*/
    char NOME_DO_ARQUIVO2[13];
    printf("Digite o nome do arquivo-2 : ");
    fgets(NOME_DO_ARQUIVO2,12,stdin);
    for(j=0; NOME_DO_ARQUIVO2[j]; j++)
    {
        if(NOME_DO_ARQUIVO2[j]=='\n')
        {
            /**Elimina o \n da string lida */
            NOME_DO_ARQUIVO2[j]=0;
        }
    }

    /**abre o arquivo em modo de ler("rb") */
    if(!(E = fopen(NOME_DO_ARQUIVO2,"rb")))
    {
        printf("Erro! Impossivel abrir o arquivo %s!\n", NOME_DO_ARQUIVO2);
        exit(0);
    }
/*------------------------------------------------------------------------*/
    int re=0;
    while(!feof(E))
    {    re++;
        ch = getc (E);
        if(ferror(E))
        {
            printf("erro lendo o arquivo");
            break;
        }
    }
    rewind(E);

    int xx=0;
    while(xx<re-1)
    {
        xx++;
        ch = getc (E);
        if(ferror(E))
        {
            printf("erro lendo o arquivo");
            break;
        }
        putc (ch, p);
        if(ferror(p))
        {
            printf("erro na gravacao do arquivo");
            break;
        }
    }

    fclose(p);
    fclose(E);
    clrscr();
}

// - 87
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
#include<time.h>
#include<stdio.h>

int main(void)
{
    time_t timer;
    timer=time(NULL);
    printf("A hora local é %s.\n",asctime(localtime(&timer)));
    return 0;
}

// - 88
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

/*
A função toupper usa-se para converter letras minúsculas (lower case) para
maiúsculas (upper case). Isso simplifica a sintaxe da operação de teste
de comparação do caracter digitado:
*/

#include <conio.h>
#include <ctype.h>
#include <stdio.h>

int main()
{
    char c;
    c = toupper(getch());
    cprintf("%c",c);
    return 0;
}

// - 89
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
#include <conio.h>

int main()
{
    clrscr();
    cprintf( "Exemplo de \"highvideo\" y \"lowvideo\"\r\n\r\n" );
    cprintf( "Este texto tem sua propria intensidade.\r\n" );
    cprintf( "agora troquemos a intensidade.\r\n" );
    highvideo();
    cprintf( "a intensidade apartir de agora é maior.\r\n" );
    cprintf( "agora trocaremos para uma menor menor.\r\n" );
    lowvideo();
    cprintf( "tecle algo para continuar...\r\n" );
    getch();
    return 0;
}


// - 90
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
#include <conio.h>
#include <windows.h>

int main()
{
    clrscr();
    cprintf( "Exemplo de \"window\"\r\n\r\n" );
    cprintf( "A janela será de tamanho (10,10) á (50,20).\r\n" );
    window( 10, 10, 50, 20 );
    cprintf( "ESTOU DENTRO DE UMA JANELA DE TEXTO.\r\n" );
    cprintf( "tecle algo para continuar..." );
    getch();
    return 0;
}


// - 91
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
#include <conio.h>


main()
{

    clrscr();
    int x, y, z=0;
    for(x=0; x<80; x++)
    {
        for(y=0;y<25;y++)
        {
            unsigned char tcdesk[]=
            {
                x,y
            };
            puttext( x+1 , y+1 , x+1 , y+1 , tcdesk );
        }
    }
    getch();
}


// - 92
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
#include <conio.h>

int main()
{
    clrscr();
    cprintf( "Exemplo de \"delline\"\r\n\r\n" );
    cprintf( "Esta línha será apagada\r\n" );
    cprintf( "tecle para continuar..." );
    getch();
    gotoxy( 1, 3 );
    delline();
    return 0;
}


// - 93
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define ENTER 13


main()
{

    clrscr();
    int x, y;
    for(x=0; x<80; x++)
    {
        for(y=0;y<25;y++)
        {
            unsigned char tcdesk[]=
            {
                219,255
            };
            puttext( x+1 , y+1 , x+1 , y+1 , tcdesk );
        }
    }
    unsigned char ch;
    textbackground(WHITE);
    textcolor(BLACK + BLINK);
    cprintf("digite **para sair.");
    while(ch!='*')
    {
        ch=getch();
        textbackground(WHITE);
        textcolor(BLACK + BLINK);
        if(ch==ENTER){cprintf("\n%c",ch);}else{cprintf("%c",ch);}
    }
}


// - 94
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

#include <conio.h>
#include <stdio.h>

int main()
{
    clrscr();
    printf( "Exemplo de \"clreol\"\n\n" );
    printf( "Esta e uma mensagem\nescrita em varias linhas.\n" );
    printf( "Usaremos \"gotoxy\"para coloca o cursor\n");
    printf( "em uma destas linhas, para apaga-la.\n" );
    printf( "tecle para continuar...\n" );
    getch();
    gotoxy( 1, 4 );
    clreol();
    getch();
    return 0;
}


// - 95
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************


#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

main()
{
    if (MessageBox(NULL,"certo?","titulo1",MB_YESNO | MB_ICONEXCLAMATION)==IDYES)
    {
        MessageBox(NULL,"voce apertou sim.","titulo2",MB_OK | MB_ICONINFORMATION);
        
    }
    else
    {
        MessageBox(NULL,"Fechando o programa.","titulo2",MB_OK | MB_ICONSTOP);
        ShowCursor(FALSE);

    }
    exit(1);
}

// - 96
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* matriz_des.cpp ********************************

#include <stdio.h>
#include <stdlib.h>

main()
{
    int array[100][100];
    int x,y,n,i,j=0;
    char l[20];
    n=1;
    do
    {
        printf ("digite o tamanho da matriz:");
        scanf("%s",&l);
        j = atoi(l);
    }while ( j>80 );
    int f = j;
    for ( x=0, y=j ; x<=y ; x++, y--, n++ )
    {
        for ( i=x ; i<y ; i++ )
        {
            for ( j=x ; j<y ; j++ )
            {
                array[i][j] = n;
            }
        }
    }
    for ( i=0 ; i<f ; i++ )
    {
        for ( j=0 ; j<f ; j++)
        {
            printf ("%c", array[i][j]+47);
        }
    printf ("\n");
    }
}


// - 97
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************** circulo.cpp ************************************
#include <stdio.h>
#include <stdlib.h>
#include<math.h>


main()
{
    float XA, XB, yA, yB;
    int A,B,K,D,n;
    int array[80][80];
    int x,y,i,j, R;
    char l[20];

    do
    {
        printf ("digite o raio do circulo <40:");
        scanf("%s",&l);
        R = atoi(l);
    }while ( R>39 );


    for ( x=0 ; x<78 ; x++ )
    {
        for ( y=0 ; y<78 ; y++ )
        {
                array[x][y] = 177;
        }
    }

    for ( y=(39-R) ; y<(39+R) ; y++ )
    {
        XA = (39 + sqrt(R*R - pow((y-39),2)))/1.6;
        XB = (39 - sqrt(R*R - pow((y-39),2)))/1.6;
        A = XA;
        B = XB;
        K = A*1.6;
        D = B*1.6;
        n = y/1.6;
        array[A][y] = 219;
        array[B][y] = 219;
        array[n][K] = 219;
        array[n][D+1] = 219;
    }

    for ( i=0 ; i<50 ; i++ )
    {
        for ( j=0 ; j<79 ; j++)
        {
            printf ("%c", array[i][j]);
        }
        printf ("\n");
    }
}




// - 98
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ reta.cpp ***********************************

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int a,b;
int i;
float x[100], y[100];

coordenada( int s1, int s2, int i )
{
    x[i] = s1;
    y[i] = s2;
}

main()
{
    int mm;
    int nn;
    int array[100][100];

    for ( mm=0 ; mm<50 ; mm++ )
    {
        for ( nn=0 ; nn<78 ; nn++ )
        {
                array[mm][nn] = 219;
        }
    }


    //-------------------------- CORPO ----------------
    int fx, fy;
    // gg = numero de pontas
    int gg=2;

    for ( i=0 ; i<gg ; i++ )
    {
        printf ("digite x%d: ",i); scanf("%d",&a);
        printf ("digite y%d: ",i); scanf("%d",&b);
        coordenada(a,b,i);
    }
    int mx, my;
    
    // --- eixo X ---
    for ( i=0, mx=x[i], my=y[i] ; ; )
    {
        if (( y[i] - y[i+1] )!=0)
        {
            mx = ( (-1*my)*( x[i+1] - x[i] ) - ( x[i]*y[i+1] - x[i+1]*y[i] ) )/( y[i] - y[i+1] );
        }
        else
        {
            break;
        }
        if ( mx>=0 )
        {
            array[my][mx] = 255;
        }
        if ( y[i] > y[i+1] )
        {
            my--;
            if ( my<y[i+1])
            {
                break;
            }
        }
        if ( y[i] < y[i+1] )
        {
            my++;
            if ( my>y[i+1])
            {
                break;
            }
        }
    }
    

    // --- eixo Y ---
    for ( i=0, mx=x[i], my=y[i] ; ; )
    {
        if (( x[i] - x[i+1] )!=0)
        {
            my = ( (-1*mx)*( y[i] - y[i+1] ) - ( x[i]*y[i+1] - x[i+1]*y[i] ) )/( x[i+1] - x[i] );
        }
        else
        {
            break;
        }
        if ( my>=0 )
        {
            array[my][mx] = 255;
        }
        if ( x[i] > x[i+1] )
        {
            mx--;
            if ( mx<x[i+1])
            {
                break;
            }
        }
        if ( x[i] < x[i+1] )
        {
            mx++;
            if ( mx>x[i+1])
            {
                break;
            }
        }
    }
    //-------------------- fim de CORPO ------------------


    for ( mm=0 ; mm<50 ; mm++ )
    {
        for ( nn=0 ; nn<78 ; nn++ )
        {
            printf ("%c", array[mm][nn]);
        }
        printf ("\n");
    }
}



// - 99
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* ser.cpp / cli.cpp *****************************

#include <winsock2.h>
#include <stdio.h>

main ( int argc, char *argv[] )
{
// - testando os parametros -
    if ( argc < 2 )
    {
        printf ("Use %s <host>\n\n", argv [0]);
        exit (0);
    }
// - iniciando o ws_32.dll -
    printf ("iniciando WSAStartup\n");
    WSAData info;
    WORD versao;
    versao= MAKEWORD(2,2);
    if ( WSAStartup ( versao, &info ) != 0 )
    {
        printf("erro na WSAStartup\n");
        exit(1);
    }
// - testando configuração de IP -
    printf("verificando endereco IP ou host\n");
    struct hostent *he;
    he = gethostbyname (argv [1]);
    if (he == NULL)
    {
        printf("erro no nome do host\n");
        WSACleanup();
        exit(1);
    }
    printf("IP = %s\n", inet_ntoa(*(struct in_addr *)he->h_addr));
// - declarando e criando SOCKET -
    SOCKET meu_sock;
    if ( ( meu_sock = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )
    {
        printf (" erro na criaao de socket\n");
        WSACleanup();
        exit(1);
    }
    printf("socket criado");
// - declarando e criando estrutura de sock -
    printf("montando estrutura de socket\n");
    int porta = atoi( argv[2] );
    sockaddr_in meu_local;
    memset(&meu_local, 0x00, sizeof(meu_local));
    meu_local.sin_family = AF_INET;
    meu_local.sin_port = htons( porta );
    meu_local.sin_addr.s_addr = inet_addr (inet_ntoa(*(struct in_addr *)he->h_addr));
    printf("estrutura de socket feita\n");
// - ligando nome de socket a estrutura -
    printf ("iniciando bind local\n");
    if ( bind( meu_sock, (struct sockaddr *)&meu_local,sizeof(meu_local)) == SOCKET_ERROR )
    {
        closesocket(meu_sock);
        printf ("erro no bind\n");
        WSACleanup();
        exit(1);
    }    
    printf ("bind feito\n");
// - listen -
    printf ("iniciando escuta");
    if ( listen (meu_sock, 1 ) == SOCKET_ERROR )
    {
        closesocket(meu_sock);
        printf ("erro no listen\n");
        WSACleanup();
        exit(1);
    }
    printf ("detectando conexao.\n");
// - aceitando a conexão -
    SOCKET clientes_sock;
    sockaddr clientes_local;
    int clientes_local_size = sizeof( clientes_local );
    if ( ( clientes_sock = accept ( meu_sock, &clientes_local, &clientes_local_size)) == INVALID_SOCKET )
    {
        closesocket(meu_sock);
        printf ("erro no accept\n");
        WSACleanup();
        exit(1);
    }
// - recebendo com o recv -
    printf ("enviar mensagem: \n");
    char buffer[80];
    do
    {
        gets(buffer);
        if(!send(clientes_sock,buffer,80,0))
        {
            printf ("erro no send");
            exit(1);
        }
    }while( strcmp(buffer,"FIN") );
// - fechando o sochet -
    shutdown (meu_sock, SD_SEND);
    WSACleanup();
    printf ("finalizando WSAStartup");
    closesocket(clientes_sock);
    closesocket(meu_sock);
}


// --- CORTE ------------ cli. cpp ---------------------



#include <winsock2.h>
#include <stdio.h>

main ( int argc, char *argv[] )
{
// - testando os parametros -
    if ( argc < 2 )
    {
        printf ("Use %s <host>\n\n", argv [0]);
        exit (0);
    }
// - iniciando o ws_32.dll -
    printf ("iniciando WSAStartup\n");
    WSAData info;
    WORD versao;
    versao= MAKEWORD(2,2);
    if ( WSAStartup ( versao, &info ) != 0 )
    {
        printf("erro na WSAStartup\n");
        exit(1);
    }
// - testando configuração de IP -
    printf("verificando endereco IP ou host\n");
    struct hostent *he;
    he = gethostbyname (argv [1]);
    if (he == NULL)
    {
        printf("erro no nome do host\n");
        WSACleanup();
        exit(1);
    }
    printf("IP = %s\n", inet_ntoa(*(struct in_addr *)he->h_addr));
// - declarando e criando SOCKET -
    SOCKET meu_sock;
    if ( ( meu_sock = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )
    {
        printf (" erro na criaao de socket\n");
        WSACleanup();
        exit(1);
    }
    printf("socket criado");
// - declarando e criando estrutura de sock -
    printf("montando estrutura de socket\n");
    int porta = atoi( argv[2] );
    sockaddr_in meu_local;
    memset(&meu_local, 0x00, sizeof(meu_local));
    meu_local.sin_family = AF_INET;
    meu_local.sin_port = htons( porta );
    meu_local.sin_addr.s_addr = inet_addr (inet_ntoa(*(struct in_addr *)he->h_addr));
    printf("estrutura de socket feita\n");
// - ligando nome de socket a conexao -
    printf ("iniciando connect\n");
    if ( connect( meu_sock, (struct sockaddr *)&meu_local, sizeof(meu_local) ) == SOCKET_ERROR )
    {
        closesocket(meu_sock);
        printf ("erro no connect\n");
        WSACleanup();
        exit(1);
    }    
    printf ("connect feito\n");
// - recebebendo com o recv -
    printf ("mensagem recebida: \n");
    char buffer[80];
    do
    {
        if ( !(recv(meu_sock,buffer,80,0)))
        {
        printf ("erro no recv");
        exit(1);
        }
        printf("%s\n",buffer);
    }while ( strcmp(buffer,"FIN") );
// - fechando o sochet -
    shutdown (meu_sock, SD_SEND);
    WSACleanup();
    printf ("finalizando WSAStartup");
    closesocket(meu_sock);
}

// - 100
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

// ----------------- kkser.cpp

#include <winsock2.h>
#include <stdio.h>

void main(void)
{

// - iniciando o ws_32.dll -
    printf ("iniciando WSAStartup\n");
    WSAData info;
    WORD versao;
    versao= MAKEWORD(2,2);
    if ( WSAStartup ( versao, &info ) != 0 )
    {
        printf("erro na WSAStartup\n");
        exit(1);
    }

    struct sockaddr_in me, target;
    SOCKET sock;
    sock=socket(AF_INET,SOCK_DGRAM,0);
    char linha[81];

    memset((char *)&me,0,sizeof(me));
    me.sin_family=AF_INET;
    me.sin_addr.s_addr=htonl(INADDR_ANY); /**endereco IP local */
    me.sin_port=htons(0); /**porta local (0=auto assign) */
    bind(sock,(struct sockaddr *)&me,sizeof(me));

    memset((char *)&target,0,sizeof(target));
    target.sin_family=AF_INET;
    target.sin_addr.s_addr=inet_addr("127.0.0.1"); /**host local */
    target.sin_port=htons(8450); /**porta de destino */
    do
    {
        gets(linha);
        sendto(sock,linha,81,0,(struct sockaddr *)&target,sizeof(target));
    }
    while(strcmp(linha,"exit"));
// - fechando o sochet -
    shutdown (sock, SD_SEND);
    WSACleanup();
    printf ("finalizando WSAStartup");
    closesocket(sock);
}



// --- CORTA ------- kkcli.cpp

#include <winsock2.h>
#include <stdio.h>


void main(void)
{
// - iniciando o ws_32.dll -
    printf ("iniciando WSAStartup\n");
    WSADATA info;
    WORD versao;
    versao= MAKEWORD(2,2);
    if ( WSAStartup ( versao, &info ) != 0 )
    {
        printf("erro na WSAStartup\n");
        exit(1);
    }

    struct sockaddr_in me, from;
    SOCKET sock;
    sock=socket(AF_INET,SOCK_DGRAM,0);
    int adl=sizeof(me);
    char linha[81];

    memset((char *)&me,0,sizeof(me));
    me.sin_family=AF_INET;
    me.sin_addr.s_addr=htonl(INADDR_ANY); /**endereco IP local */
    me.sin_port=htons(8450); /**porta local */

    if(SOCKET_ERROR!=bind(sock,(struct sockaddr *)&me,sizeof(me)))
    do
    {
    recvfrom(sock,linha,81,0,(struct sockaddr *)&from,&adl);
    puts(linha);
    }
    while(strcmp(linha,"exit"));
    else puts("Porta ocupada");

// - fechando o sochet -
    shutdown (sock, SD_SEND);
    WSACleanup();
    printf ("finalizando WSAStartup");
    closesocket(sock);
}

// - 101
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************* lista.cpp ***************************************


//struct ffblk {
// long     ff_reserved;
// long     ff_fsize;     /**file size */
// unsigned long ff_attrib;     /**attribute found */
// unsigned short ff_ftime;     /**file time */
// unsigned short ff_fdate;     /**file date */
// char     ff_name[256]; /**found file name */
// };

#include <dir.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(void)
{
    struct ffblk ff;
    int done;
    int total=0;
    int pause = 0;

    done = findfirst("*.exe",&ff,0);
    while ( !done )
    {
        total++;
        printf(" %s\n", ff.ff_name);
        done = findnext(&ff);
        pause++;
        if (pause == 20)
        {
            printf ("\n");
            system("pause");
            printf ("\n");
            pause = 0;
        }
    }
    printf("---------------------------------\n");
    printf(" total de arquivos = %d", total);
    printf ("\n");
    return total;
}






// - 102
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ memmove.cpp ********************************
#include <stdio.h>
#include <string.h>

int main()
{
    char a[8] = "abcdefg";
    char *ptr;
    int i;

    memmove( ptr, a, 5 );
    for( i=0; i<7; i++ )
    {
        printf( "a[%d]=%c\n", i, a[i] );
    }
    printf( "\n\n\n" );
    for( i=0; i<5; i++ )
    {
        printf( "ptr[%d]=%c\n", i, ptr[i] );
    }
    printf( "\n" );
    return 0;
}


// - 103
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ strtok.cpp *********************************
#include <stdio.h>
#include <string.h>

int main()
{
    char s1[15] = "abcd efgh ijlme";
    char *s2 = "ha"; //<--------------- letras escolhidas para serem excluidas
    char *ptr;

    printf( "s1=%s\n", s1 );
    ptr = strtok( s1, s2 );
    do    
    {
        printf( "-%s", ptr );
    }while( (ptr = strtok( NULL, s2 )) != NULL );

    return 0;
}

// - 104
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************** strrchr.cpp ************************************

/*
pega a ultima string depois do 'a'
- strrchr -
oposto de (memchr)
*/

#include <stdio.h>
#include <string.h>

int main()
{
    char s[11] = "Ola amigos";
    char c = 'a';
    printf( "s=%s\t", s );
    printf( "c=%c\n", c );
    printf( "strrchr=%s\n", strrchr( s, c ) );
    return 0;
}

// - 105
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//******************************** memchr.cpp *************************************

/*
pega a primeira string antes do 'a'
- memchr -
oposto de (strrchr)
*/

#include <stdio.h>
#include <string.h>

int main()
{
    char str[] = "Erase uma vez...";
    char *pontero;
    pontero = (char *)memchr( str, 'a', 5 );
    printf( "%s\n", str);
    printf( "%s\n", pontero );
    return 0;
}


// - 106
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ atexit.cpp *********************************
#include <stdio.h>
#include <stdlib.h>

void antes_de_salir(void)
{
    puts( "vamos..." );
}

int main( void )
{
    atexit( antes_de_salir );
    puts( "digite algo antes de sair." );
    getchar();
    return 0;
}


// - 107
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//********************************* modf.cpp **************************************

/*
pega a parte decimal
*/

#include <stdio.h>
#include <math.h>

int main()
{
    double valor = 6.54321, *iptr, resultado;
    resultado = modf( valor, iptr );
    printf( "modf( %f, %f ) = %f\n", valor, *iptr, resultado );
    return 0;
}


// - 108
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//************************************ fabs.cpp ***********************************

/**- modulo de um valor - */

#include <stdio.h>
#include <math.h>

int main()
{
    float x = -6.54321;
    printf( "fabs( %f ) = %f\n", x, fabs(x) );
    return 0;
}

// - 109
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

#include<stdio.h>
#include<conio.h>
#include<graphics.h>

#define LEFT 75
#define RIGHT 77
#define UP     72
#define DOWN 80
#define ESC    27
#define PASSO 5
#define RAIO 50

void opengraph(void);

main()
{
    int key, x, y;
    key = 0;
    x = 100;
    y = 100;
    opengraph();
    do
    {
        circle(x, y, RAIO);
        key = getche();
        cleardevice();
        if(key == LEFT) x = x - PASSO;
        if(key == RIGHT) x = x + PASSO;
        if(key == UP)    y = y - PASSO;
        if(key == DOWN) y = y + PASSO;
    }while(key != ESC);
    closegraph();
    return(0);
}

void opengraph(void)
{
    int driver, mode;
    detectgraph(&driver, &mode);
    initgraph(&driver, &mode, "");
}

// - 110
//*********************************************************************************
//********************************** PERMUTA.C ************************************
//*********************************************************************************
//*********************************************************************************


#include <stdio.h>
#include <stdlib.h>

char *cresc[50];
int fim,n,maximo,pot,nume=1;
FILE *fp;

char *recebidos;



//******************************************************
int potencia(int valor)
{
    if(valor>1)
    {
        valor*= potencia( valor-1 );
    }
    return (valor);
}



//******************************************************
int se(int i, int a)
{
    if(a>0)
    {
        int novamente = se(i, a-1);
        if( (cresc[i]!=cresc[a]) && (novamente) )
        {
            fim = 1 ;
        }
        else
        {
            fim = 0 ;
        }
    }
    if(a==0)
    {
        if(cresc[i]!=cresc[a])
        {
            fim = 1 ;
        }
        else
        {
            fim = 0 ;
        }
    }
    if(a==-1)
    {
        fim = 1 ;
    }
    return (fim);
}




//******************************************************
void proxima(int i, int maximo)
{
    int r;
    i++;
    for(r=0; r<=maximo-1; r++ )
    {
        cresc[i]=&recebidos[r];
        if(se(i, i-1))
        {
            proxima(i,maximo);

            if(i==maximo-1)
            {
                for(n=0; n<=maximo-1; n++)
                {
                    putc(*cresc[n],fp);
                }

                fprintf(fp, "= sequencia num-%i \n", nume );

                if((nume==pot)&&(maximo!=0))
                {
                    fprintf(fp,"fim");
                }
                nume++;
            }
        }
    }
}



//******************************************************
void main()
{
    int entrada;
    int r,i;
    printf("de a quantidade de letras:");
    scanf("%d", &maximo);
    printf("agora digite os caracteres.\n");
    if( (fp=fopen("permuta.txt", "w"))==NULL )
    {
        printf("nao foi possivel abrir esse arquivo.");
        exit (1);
    }
    for(entrada=0; entrada<maximo; entrada++)
    {
        printf("\nValor:");
        recebidos[entrada]=getche();
    }    
    printf("\n");
    pot=potencia(maximo);
    for( i=0, r=0; r<=maximo-1; r++ )
    {
        cresc[i]=&recebidos[r];
        if((maximo!=1)&&(maximo!=0))
        {
            proxima(i,maximo);
        }
        else
        {
            fprintf(fp, " %c = sequencia num-1 \nfim ", *cresc[i]);
        }
    }
    fclose(fp);
}


// - 111
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

#include <stdio.h>
#include <string.h>
#define SIZE 80
void main(void)
{
    char buf1[SIZE], buf2[SIZE];
    strcpy(buf1, "Quando, no curso do ...");
    memcpy(buf2, buf1, SIZE);
    printf(buf2);
}

// - 112
//*********************************************************************************
//*********************************************************************************
//******************************** JOGO DA VELHA **********************************
//*********************************************************************************

#include <stdio.h>
#include <stdlib.h>


//*********************variaveis globais ********************
char tecla[9]={'1','2','3','4','5','6','7','8','9'};
struct image
{
    char caractere;
    int valor;
};

struct image posicao[9];
char quem_comeca,contra_quem;
int vez=0;
char computador;



//***********************************************************
char primeira_jogada()
{
    printf("\nvoce comeca? (S/N) ");
    quem_comeca=getch();
    if((quem_comeca=='S')||(quem_comeca=='s'))
    {
        computador='X';
    }
    else
    {
        computador='O';
    }
}


//***********************************************************
char inicio()
{
    printf("\n\njogar contra o computador? (S/N)");
    contra_quem=getch();
    if((contra_quem=='S')||(contra_quem=='s'))
    {
        primeira_jogada();
    }
    else
    {
        computador='Z';
    }
}


//***********************************************************
void tabuleiro()
{int x;
    printf(" use os numeros para jogar ou \"Q\" para sair\n\n");
    printf("    \x37\xb3\x38\xb3\x39     %c\xb3%c\xb3%c\n",posicao[6].caractere,posicao[7].caractere,posicao[8].caractere);
    printf("    \xc4\xc5\xc4\xc5\xc4     \xc4\xc5\xc4\xc5\xc4\n");
    printf("    \x34\xb3\x35\xb3\x36     %c\xb3%c\xb3%c\n",posicao[3].caractere,posicao[4].caractere,posicao[5].caractere);
    printf("    \xc4\xc5\xc4\xc5\xc4     \xc4\xc5\xc4\xc5\xc4\n");
    printf("    \x31\xb3\x32\xb3\x33     %c\xb3%c\xb3%c\n",posicao[0].caractere,posicao[1].caractere,posicao[2].caractere);

printf("\n\n\n");
for(x=0; x<9; x++)
printf("valor-%i = %i\n", x, posicao[x].valor);
}



//***********************************************************
char ver_quem_joga(int vezz)
{
    char quem_joga_e;
    if(vezz%2)
    {
        quem_joga_e='X';
    }
    else
    {
        quem_joga_e='O';
    }
    return (quem_joga_e);
}




//***********************************************************
char jogada(char kk,int quem_joga_e,int peso)
{
    int ii, marca=0;
    for(ii=0; ii<9; ii++)
    {
        if((kk==tecla[ii])&&(posicao[ii].caractere==' '))
        {
            posicao[ii].caractere=quem_joga_e;
            posicao[ii].valor=peso;
            marca=1;
        }
    }
    if(marca==0)
    {
        kk='N';
    }
    else
    {
        kk=quem_joga_e;
    }
    return (kk);
}


//***********************************************************
char escolha_do_PC(int peso)
{
    char *livres, *testes, *casas_totais, *marcados;
    int maximo=0, i, maximo2=0;
    for(i=0; i<9; i++)
    {
        casas_totais[i]=posicao[i].caractere;
    }
    for(i=0; i<9; i++)
    {
        if(casas_totais[i]==' ')
        {
            livres[maximo]=casas_totais[i];
            maximo++;
        }
        else
        {
            marcados[maximo2]=casas_totais[i];
            maximo2++;
        }
    }
    

/*    maximo--;
    maximo2--;
    return(livres[maximo]);*/
}



//***********************************************************
void pega_jogada(int peso, char quem_joga_e)
{
    char kk;
    do
    {
        if(quem_joga_e==computador)
        {
            kk=escolha_do_PC(peso);
        }
        else
        {
            kk=getch();
        }
        if((kk=='q')||(kk=='Q'))
        {
            exit (1);
        }
        kk=jogada(kk,quem_joga_e,peso);
    }while(kk== 'N');
}


//***********************************************************
int julgamento(int peso)
{
    if((
    ((posicao[0].valor+posicao[1].valor+posicao[2].valor)!=3*peso )&&
    ((posicao[3].valor+posicao[4].valor+posicao[5].valor)!=3*peso )&&
    ((posicao[6].valor+posicao[7].valor+posicao[8].valor)!=3*peso )&&
    ((posicao[0].valor+posicao[4].valor+posicao[8].valor)!=3*peso )&&
    ((posicao[2].valor+posicao[4].valor+posicao[6].valor)!=3*peso )&&
    ((posicao[0].valor+posicao[3].valor+posicao[6].valor)!=3*peso )&&
    ((posicao[1].valor+posicao[4].valor+posicao[7].valor)!=3*peso )&&
    ((posicao[2].valor+posicao[5].valor+posicao[8].valor)!=3*peso )
    )&&!(
    (posicao[0].caractere!=' ')&&
    (posicao[1].caractere!=' ')&&
    (posicao[2].caractere!=' ')&&
    (posicao[3].caractere!=' ')&&
    (posicao[4].caractere!=' ')&&
    (posicao[5].caractere!=' ')&&
    (posicao[6].caractere!=' ')&&
    (posicao[7].caractere!=' ')&&
    (posicao[8].caractere!=' ')
    ))
    {
        return (1);
    }
    else
    {
        return (0);
    }
}


//***********************************************************
int objetivo(int peso)
{
    if(
((posicao[0].valor+posicao[1].valor+posicao[2].valor)==3*peso )||
((posicao[3].valor+posicao[4].valor+posicao[5].valor)==3*peso )||
((posicao[6].valor+posicao[7].valor+posicao[8].valor)==3*peso )||
((posicao[0].valor+posicao[4].valor+posicao[8].valor)==3*peso )||
((posicao[2].valor+posicao[4].valor+posicao[6].valor)==3*peso )||
((posicao[0].valor+posicao[3].valor+posicao[6].valor)==3*peso )||
((posicao[1].valor+posicao[4].valor+posicao[7].valor)==3*peso )||
((posicao[2].valor+posicao[5].valor+posicao[8].valor)==3*peso ))
    {
        return (1);
    }
    else
    {
        return (0);
    }
}



//***********************************************************
void main()
{
    char kk;
    char quem_joga_e;
    int peso,i;
    for(i=0; i<9; i++)
    {
        posicao[i].caractere=' ';
        posicao[i].valor=0;
    }
    clrscr();
    inicio();
    clrscr();
    tabuleiro();
    do
    {
        quem_joga_e=ver_quem_joga(vez);
        if(quem_joga_e=='X')
        {
            peso=1;
        }
        else
        {
            peso=-1;
        }
        pega_jogada(peso, quem_joga_e);
        clrscr();
        tabuleiro();
        vez++;
    }while( julgamento(peso) );
    if(objetivo(peso))
    {
        if(vez%2)
        {
            printf("\n    vitoria de \"O\"!\n");
        }
        else
        {
            printf("\n    vitoria de \"X\"!\n");
        }
    }
    else
    {
        printf("\n     EMPATE!\n");
    }
}

// - 113
//*********************************************************************************
//******************************* QUADRADOS MAGICOS *******************************
//*********************************************************************************
//*********************************************************************************

#include <stdio.h>
#include <conio.h>
#include <alloc.h>


int n,maximo,fim;
int planetario;
int **quadrado;
int *cresc;
int raiz;
FILE *fp;

//******************************************************
int *aloca_cresc()
{
    cresc = (int )malloc(sizeof(int) **16);
    if(!cresc)
    {
        printf("erro na alocacao de *aloca_cresc");
        return 0;
    }
}


//******************************************************
void deleta_cresc(int *cresc)
{
    if(cresc)
    {
        free(cresc);
    }
}


//******************************************************
void deleta_quadrado(int **quadrado)
{
    int cy;
    for(cy = 0; cy < 4; cy++)
    if(quadrado[cy])
    {
        free(quadrado[cy]);
    }
    if(quadrado)
    {
        free(quadrado);
    }
}


//******************************************************
int **aloca_quadrado()
{
    int cy;
    int **quadrado;
    quadrado = (int **)malloc(sizeof(int *) **4);
    if(!quadrado)
    {
        printf("erro na alocacao de *aloca_quadrado");
        return 0;
    }
    for(cy = 0; cy < 4; cy++)
    {
        quadrado[cy] = (int *)malloc(sizeof(int) **4);
        if(!quadrado[cy])
        {
            deleta_quadrado(quadrado);
            printf("erro na alocacao de **aloca_quadrado");
            return 0;
        }
    }
    return quadrado;
}




//******************************************************
int linha(int ih)
{
    int jh;
    int valorh;
    valorh = 0;
    for(jh=0; jh<raiz; jh++)
    {
        valorh += quadrado[ih][jh];
    }
    return (valorh);
}


//******************************************************
int todas_linhas(int ih)
{
    if(ih<raiz)
    {
        if( (linha(ih)==planetario)&&(todas_linhas(ih+1)) )
        {
            return (1);
        }
        else
        {
            return (0);
        }
    }
    else
    {
        return (1);
    }
}


//******************************************************
int coluna(int jh)
{
    int ih;
    int valorh;
    valorh = 0;
    for(ih=0; ih<raiz; ih++)
    {
        valorh += quadrado[ih][jh];
    }
    return (valorh);
}


//******************************************************
int todas_colunas(int jh)
{
    if(jh<raiz)
    {
        if( (coluna(jh)==planetario)&&(todas_colunas(jh+1)) )
        {
            return (1);
        }
        else
        {
            return (0);
        }
    }
    else
    {
        return (1);
    }
}


//******************************************************
int diagonal1()
{
    int ih, valorh=0;
    for(ih=0; ih<raiz; ih++)
    {
        valorh+=quadrado[ih][ih];
    }
    if(valorh==planetario)
    {
        return (1);
    }
    else
    {
        return (0);
    }
}


//******************************************************
int diagonal2()
{
    int ih, valorh=0;
    for(ih=0; ih<raiz; ih++)
    {
        valorh+=quadrado[ih][raiz-ih-1];
    }
    if(valorh==planetario)
    {
        return (1);
    }
    else
    {
        return (0);
    }
}


//******************************************************
void iguala_aos_permutados()
{
    int nn, jj, n=0;
    for(nn=0; nn<raiz; nn++)
    {
        for(jj=0; jj<raiz; jj++)
        {
            quadrado[nn][jj]=cresc[n];
            n++;
        }
    }
}


//******************************************************
void imprime()
{
    int mh,nh;
    for(nh=0; nh<raiz; nh++)
    {
        for(mh=0; mh<raiz; mh++)
        {
            fprintf(fp,"- %i ", quadrado[nh][mh]);
        }
        fprintf(fp,"\n");
    }
    fprintf(fp,"\n\n");
}


//******************************************************
void compara()
{
    if((todas_colunas(0))&&(todas_linhas(0))&&(diagonal2())&&(diagonal1()))
    {
        imprime();
    }
}





//******************************************************
int se(int i, int a)
{
    if(a>0)
    {
        if( (cresc[i]!=cresc[a]) && (se(i, a-1)) )
        {
            fim = 1 ;
        }
        else
        {
            fim = 0 ;
        }
    }
    if(a==0)
    {
        if(cresc[i]!=cresc[0])
        {
            fim = 1 ;
        }
        else
        {
            fim = 0 ;
        }
    }
    if(a==-1)
    {
        fim = 1 ;
    }
    return (fim);
}



//******************************************************
void proxima(int i, int maximo)
{
    int n=0,nn,jj;
    i++;
    for(cresc[i]=1; cresc[i]<=maximo; cresc[i]++ )
    {
        if(se(i, i-1))
        {
            proxima(i,maximo);

            if(i==maximo-1)
            {
                iguala_aos_permutados();
                compara();
            }
        }
    }
    i--;
}






//******************************************************
main()
{
    int i;
    if( (fp=fopen("permuta.txt", "w"))==NULL )
    {
        printf("nao foi possivel abrir esse arquivo.");
        exit (1);
    }
    i=0;
    printf("achando todos os possiveis quadrados magicos de 3x3.\n");
    printf("    aguarde...\n");
    raiz=3;//******************aqui foi colocado o valor da matriz
    maximo=raiz*raiz;
    planetario= (((raiz*raiz*raiz)+raiz)/2);
    cresc=aloca_cresc();
    quadrado=aloca_quadrado();
    for(cresc[i]=1; cresc[i]<=maximo; cresc[i]++ )
    {
        if(maximo>1)
        {
            proxima(i,maximo);
        }
        else
        {
            printf("%i = sequencia num-%i\nfim", cresc[0], 1);
        }
    }
    deleta_quadrado(quadrado);
    deleta_cresc(cresc);
    fclose(fp);
    printf("Feito!");
}

// - 114
//*********************************************************************************
//************************************* exercicio *********************************
//*********************************************************************************
//******************************* strcpy, memcpy, struct **************************

#include <stdio.h>
#include <string.h>
#include <mem.h>

#define SIZE 80

struct teste
{
    char letra;
    int numero;
};

struct teste luiz;

void main(void)
{
    char buf1[SIZE], buf2[SIZE], buf3[SIZE];

    strcpy(buf1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    memcpy(buf2, buf1, SIZE);
    printf("%s\n\n",buf2);

    luiz.numero = 0;
    luiz.letra = 'd';
    memset(&luiz,'g',0);

    printf("%c\n",luiz.letra);
    printf("%i\n\n",luiz.numero);
    
    memset(buf2, '0', 27);
    strcpy(buf3, "Quando, no curso do ...");
    memcpy(buf2, buf3, 23);
    printf("%s\n",buf2);
}


// - 115
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************
//*********************************************************************************

DICA - Manipulando Arquivos

O C/C++ possibilita a total manipulação de grandes arquivos de uma maneira altamente
eficaz através de comandos e funções. Dominá-los é pré-requisito para aqueles que
pretendem programar nessa linguagem. Veja como executar as principais ações de
manipulação de arquivos:

Gravação de Dados
Os dados podem ser gravados em arquivos de três maneiras diferentes: formatados, como
conjunto de caracteres ou como estruturas.

Arquivos Formatados:
Neles, você deve utilizar a função fprintf(), que é uma derivação da função printf() e
que possui a seguinte sintaxe:

fprintf(nome_do_ponteiro_de_arquivo, "tipo_de_dados", dados);

Para iniciar a abertura do arquivo, você pode utilizar a função fopen(), cuja sintaxe é
a seguinte:

poteiro_de_arquivo = fopen("nome_do_arquivo", "codigo");

Onde:
O nome do arquivo deve ser uma string de caracteres que compreende um nome de arquivo
válido e onde possa ser incluída uma especificação de caminho (path). Já o código deve
ser uma string contendo o estado desejado para abertura.
Veja a tabela com os valores que poderão ser colocados no código e o seu significado:

Código Significado
"r" Abre um arquivo para leitura.
"w" Cria um arquivo para escrita.
"a" Acrescenta dados para um arquivo existente.
"rb" Abre um arquivo binário para leitura.
"wb" Cria um arquivo binário para escrita.
"ab" Acrescenta dados a um arquivo binário existente.
"r+" Abre um arquivo para leitura/escrita.
"w+" Cria um arquivo para leitura/escrita
"a+" Acrescenta dados ou cria um arquivo para leitura/escrita.
"r+b" Abre um arquivo binário para leitura/escrita.
"w+b" Cria um arquivo binário para leitura/escrita.
"a+b" Acrescenta ou cria um arquivo binário para leitura/escrita.
"rt" Abre um arquivo texto para leitura.
"wt" Cria um arquivo texto para ecrita.
"at" Acrescenta dados a um arquivo texto.
"r+t" Abre um arquivo texto para leitura/escrita.
"w+t" Cria um arquivo texto para leitura/escrita.
"a+t" Acrescenta dados ou cria um arquivo texto para leitura/escrita.


Exemplo de uso da função:

------------------------------------------

#include <stdio.h>
#include <conio.h>

void main()
{
    FILE *fp; // Ponteiro do arquivo
    char texto[] = {"Turbo C++ Page"}; // Armazena string na variável

     fp = fopen("Arq.txt", "w"); // Abre o arquivo como modo escrita
    fprintf(fp, "%s", texto); // imprime string de texto dentro do arquivo

    fclose(fp); // Fecha ponteiro do arquivo

getch(); // Espera uma tecla ser pressionada
}

------------------------------------------------


Entenda: Neste programa foi declarada uma string constante chamada texto, que recebeu o tipo de
formatação "%s" na função fprintf.
No diretório padrão, foi criado um arquivo ASCII chamado Arq.txt, que recebeu a string
Turbo C++ Page. A função fclose foi usada para fechar o arquivo.

Conjunto de caracteres
Neles, você deve utilizar a função puts no lugar de fprintf. Para isso, utilize a sintaxe:

puts(caracter, ponteiro_para_o_arquivo);

Estruturas
Nesse caso, substitua essas funções pale fwrite. Veja a sua sintaxe:

fwrite(estrutura, tamanho(estrutura), índice, ponteiro_do_arquivo);

Acompanhe o exemplo:
----------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef struct entrada
{
    char nome[20];
    float deve;
};
void main()
{
    FILE *fp;
    entrada meus_dados[15];

strcpy(meus_dados[0].nome, "Luiz");
    meus_dados[0].deve = 0.001;

strcpy(meus_dados[1].nome, "Elaine");
    meus_dados[1].deve = 13.89;

fp = fopen("escritor.dat", "w");
fwrite(meus_dados, sizeof(meus_dados), 1, fp);

fclose(fp);
getch()
}


--------------------
Leitura de Arquivos

Existem três formas diferentes de se ler um arquivo. Ele pode estar formatado,
unido em um conjunto ou com a estrutura inteira. No primeiro caso, você deve
utilizar a função fscanf, que possui a sintaxe:

fscanf(ponteiro_de_arquivo, "tipo das variáveis", variáveis);

No segundo caso, utilize a função getc e, para o terceiro, a função fread que
possui a sintaxe:

fread(estrutura, tamanho(estrutura), índice, ponteiro_do_arquivo);