CSharp bsico
por
Verso 1.03
07-04-2014
Bibliografia recomendada:
2
6.13 Convert.Int?? (16, 32 ou 64) .................................................................................. 40
6.14 Convert.ToByte.................................................................................................................... 40
6.15 Math.Log10 ............................................................................................................................. 40
6.16 Random ....................................................................................................................................... 40
6.17 Math.PI .................................................................................................................................... 40
6.18 Converso de graus para radianos ........................................................................ 41
7. Comandos em C# .................................................................................................................................. 41
7.1 Tipos de comandos em C# ................................................................................................ 41
7.1.1 Sequncia em C# ........................................................................................................... 41
7.1.2 Seleo em C#................................................................................................................ 41
7.1.3 Repetio em C# ........................................................................................................... 43
7.2 Comando if em C# ................................................................................................................. 43
7.2.1 if encadeados em C# ................................................................................................. 44
7.3 O comando switch em C# ................................................................................................... 45
7.4 Comando while no C# .......................................................................................................... 48
7.5 O comando for no C# .......................................................................................................... 50
7.6 O loop do { } while no C#............................................................................................ 52
7.7 Interrupo de loops em C# ......................................................................................... 52
7.7.1 O comando break em C# ............................................................................................ 52
7.7.2 O comando continue no C# ..................................................................................... 53
7.8 O mtodo Environment.Exit () .................................................................................... 54
8. Sada formatada com String.Format ..................................................................................... 54
9. Lista de exerccios (comandos) ............................................................................................ 57
10. Vetores, Matrizes e Strings em C# .................................................................................. 60
10.1 Vetores em C# ...................................................................................................................... 61
10.2 Strings em C# ...................................................................................................................... 62
10.3 Matrizes (Multidimensional) em C# ...................................................................... 63
10.4 Vetor de Strings em C# ................................................................................................ 64
10.5 Inicializao de matrizes e vetores em C# ................................................... 65
10.6 Inicializao de um vetor de caracteres em C# ......................................... 65
10.7 Inicializao de matrizes multidimensionais em C#................................ 65
10.8 Inicializao de vetores e matrizes sem tamanho em C# ...................... 65
10.9 Classificao de dados ou ordenao (sort) em C# .................................. 67
10.10 Lista de exerccios (vetores) ............................................................................. 69
11. Manipulao de Strings em C# .............................................................................................. 72
11.1 Mtodos para manipular Strings em C# ............................................................... 72
11.2 Lista de exerccios (Strings)................................................................................ 74
12. Mtodos estticos definidos pelo programador em C#.......................................... 76
12.1 Valores de retorno em C#............................................................................................ 77
12.2 Passagem de parmetros por valor em C# .......................................................... 80
12.3 Passagem de parmetros por refernciaem C# ................................................ 80
12.4 Mtodos que devolvem valores no-inteiros em C# .................................... 82
12.5 Argumentos do Main (String [] args) em C# ................................................... 82
12.6 Recursividade em C#........................................................................................................ 84
12.7 Lista de Exerccios (mtodos)................................................................................ 86
13. Classes existentes em C# ........................................................................................................ 88
13.1 Object (classe base de objetos) em C# ............................................................ 89
13.2 List (lista tipada de objetos) em C# ............................................................... 89
13.3 ArrayList (lista de arrays) em C# ...................................................................... 91
13.4 IList (lista de objetos indexados) em C# ..................................................... 92
13.5 Stack (Pilha) em C#........................................................................................................ 93
13.6 Queue (Fila) em C# .......................................................................................................... 94
14. Entrada e sada em disco (Arquivos) em C# ............................................................... 95
14.1 Mtodos para manipular arquivos em C# ............................................................ 95
14.2 Abertura de um arquivo texto em C#.................................................................... 95
14.3 Listar um diretrio em C# ......................................................................................... 96
3
14.4 Manipulao de um arquivo texto de palavras em C#................................ 98
14.5 Arquivo Texto em C#...................................................................................................... 101
14.6 Lista de exerccios (arquivos) ........................................................................... 105
14.7 Arquivos binrios em C# ............................................................................................ 109
15. Conceitos diversos em C# ...................................................................................................... 111
15.1 Operadores bit a bit em C# ..................................................................................... 111
15.2 Formas abreviadas de C# ............................................................................................ 112
16. Listas Lineares: Pilha, Fila e Fila Circular em C#........................................ 112
16.1 Implementao de um lista em vetor em C# ................................................... 113
16.2 Implementao de uma Pilha em C# ...................................................................... 116
16.3 Implementao de uma Fila em C# ......................................................................... 118
16.4 Implementao de uma Fila Circular em C# ................................................... 119
17. Tratamento de erros em C#.................................................................................................... 121
17.1 Tratamento de excees em C# ................................................................................ 122
17.2 Tratamento de erros na entrada de nmero inteiro em C#.................. 122
17.3 Tratamento de erros: Diviso por zero em C# ............................................ 123
18. Herana em C# ................................................................................................................................ 124
18.1 Herana simples em C# ................................................................................................. 124
18.2 Controle de acesso na definio de uma classe derivada em C# ... 125
18.3 Tipos de acessos (especificadores de acesso) em C# ........................... 126
18.4 Lista de exerccios sobre Herana em C#...................................................... 128
18.4.1 Herana (primeiro) em C# ..................................................................................... 128
18.4.2 Herana (segundo) em C# ....................................................................................... 129
18.4.3 Herana (terceiro) em C# ..................................................................................... 130
19. Coletor de Lixo (Garbage Collector) em C# ............................................................. 132
20. Construtor e finalizador em C#........................................................................................ 133
21. Data e Hora em C# ....................................................................................................................... 135
22. Eliminar problemas na converso na entrada de dados ..................................... 135
4
1. Arquitetura de um programa em C#
namespace nomePrograma
{
class nome_da_classe
{
Exemplos:
using System;
namespace ProgA
{
class MainClass
{
public static void Main (string[] args)
{
float x = 3, y = 4, t = x + y;
Resultado do Programa:
Soma: 7
using System;
namespace ProgB
{
class MainClass
{
public static void Main (string[] args)
{
float x, y, t;
Resultado do Programa:
x = 3
y = 4
Soma: 7
5
1.2 Elementos bsicos de um mtodo esttico em C#
static tipo_de_retorno nome_do_mtodo(tipo_do_agumento nome_do_argumento, ...)
{
corpo_do_mtodo;
return(valor_de_retorno);
}
2. Estrutura de um programa em C#
2.1 Identificadores em C#
6
2.2 Comentrios do programador em C#
/* ----------------------------------------------------
Mtodo: STRING
Argumentos de entrada: x, y
Argumentos de sada: c[], t[]
Retorno: Sem Retorno
------------------------------------------------------- */
using System;
namespace Prog1
{
class MainClass
{
public static void Main (string[] args)
{
int dia, mes, ano;
dia = 16;
mes = 11;
ano = 2013;
// Console.WriteLine ("Data: " + dia + "/" + mes + "/" + ano); // forma alternativa de imprimir na tela
Console.WriteLine ("Data: {0}/{1}/{2}", dia, mes, ano);
}
}
}
Resultado do Programa:
Data: 16/11/2013
7
2.4 Palavras reservadas do C#
Exemplos:
int i, j ,k;
float a, b;
char ch;
8
Alocao de memria: Forma de reservar espao de memria (RAM) para
alocar uma informao (esttica ou dinmica).
using System;
namespace Prog2
{
class MainClass
{
static double resultado; // varivel global
9
Resultado do Programa:
Base: 3
Expoente: 4
Resposta = 81
2.6 Constantes em C#
Exemplos:
10
Observaes:
using System;
namespace Hexadecimal
{
class MainClass
{
public static void Main (string[] args)
{
for (int valorDecimal = 0;valorDecimal < 16; valorDecimal++) {
string valorHexadecimal = valorDecimal.ToString("X");
Console.WriteLine ("Hexadecimal: "+ valorHexadecimal);
// int hexaToDecimal = int.Parse(valorHexadecimal, System.Globalization.NumberStyles.HexNumber);
// Console.WriteLine("Hexadecimal para Decimal: " + hexaToDecimal);
}
}
}
}
Resultado do Programa:
Hexadecimal: 0
Hexadecimal: 1
Hexadecimal: 2
Hexadecimal: 3
Hexadecimal: 4
Hexadecimal: 5
Hexadecimal: 6
Hexadecimal: 7
Hexadecimal: 8
Hexadecimal: 9
Hexadecimal: A
Hexadecimal: B
Hexadecimal: C
Hexadecimal: D
Hexadecimal: E
Hexadecimal: F
11
Vetor de Strings:
Vetor de caracteres:
using System;
3. Tipos de dados em C#
12
long 9223372036854775808 64 8 System.Int64
9223372036854775807
ulong 0 18446744073709551615 64 8 System.UInt64
object qualquer tipo System.Object
short 32768 32767 16 2 System.Int16
ushort 0 65535 16 2 System.UInt16
string Seqncia de caracteres 16 2 System.String
(cada)
Resumo:
// -------------------------------------------------------- Prog3.cs
using System;
namespace Prog3
{
public class Vetor
{
// -------------------------- atributos
13
// ------------------------------ construtor
// ------------------------------ add
// ------------------------------ exibe
// ----------------------------------------------- Prog3.cs
using System;
namespace Prog3
{
class MainClass
{
public static void Main (string[] args)
{
Vetor v = new Vetor (5); // declarao do objeto v da classe Vetor
v.add (10);
v.add (20);
v.add (30);
v.add (40);
v.add (50);
v.exibe ();
v.add (60); // testar o limite do vetor de 5 elementos
v.exibe ();
}
}
}
Resultado do Programa:
Vetor: [10 20 30 40 50 ]
Erro: Vetor excedeu Limite
Vetor: [10 20 30 40 50 ]
v.remove();
v.exibe();
Console.WriteLine("Total de Elementos: " + v.length());
int pri = v.primeiro();
Console.WriteLine("Primeiro: " + pri);
int ult = v.ultimo();
Console.WriteLine("ltimo: " + ult);
int elemento = 20;
14
bool flag = v.existe(elemento);
if (flag) {
Console.WriteLine("Status: Existe elemento 20");
} else {
Console.WriteLine("Status: No Existe elemento 20");
}
v.removeElemento(elemento);
flag = v.existe(elemento);
if (flag) {
Console.WriteLine("Status: Existe elemento " + elemento);
} else {
Console.WriteLine("Status: No Existe elemento " + elemento);
}
v.exibe();
v.removePosicao(1);
v.exibe();
Resultado do Programa:
Vetor: [10 20 30 40 50 ]
Erro: Vetor excedeu Limite
Vetor: [10 20 30 40 50 ]
Vetor: [10 20 30 40 ]
Total de Elementos: 4
Primeiro: 10
ltimo: 40
Status: Existe elemento 20
Status: No Existe elemento 20
Vetor: [10 30 40 ]
Vetor: [10 40 ]
// -------------------------------------------------------- Prog3a.cs
using System;
namespace Prog3a
{
class MainClass
{
public static void Main (string[] args)
{
Vetor v = new Vetor (5);
v.add (10);
v.add (20);
v.add (30);
v.add (40);
v.add (50);
v.exibe ();
v.add (60); // testa o limite do vetor de 5 elementos
v.exibe ();
v.remove();
v.exibe();
Console.WriteLine("Total de Elementos: " + v.length());
int pri = v.primeiro();
Console.WriteLine("Primeiro: " + pri);
int ult = v.ultimo();
Console.WriteLine("ltimo: " + ult);
int elemento = 20;
bool flag = v.existe(elemento);
if (flag) {
Console.WriteLine("Status: Existe elemento 20");
} else {
Console.WriteLine("Status: No Existe elemento 20");
}
v.removeElemento(elemento);
flag = v.existe(elemento);
if (flag) {
Console.WriteLine("Status: Existe elemento " + elemento);
} else {
Console.WriteLine("Status: No Existe elemento " + elemento);
}
v.exibe();
v.removePosicao(1);
v.exibe();
15
}
}
}
Soluo do Problema:
using System;
namespace Prog3a
{
public class Vetor
{
// -------------------------- atributos
// ------------------------------ construtor
// ------------------------------ add
// ------------------------------ remove
// ------------------------------ removeElemento
// ------------------------------ removePosicao
16
Console.WriteLine ("Erro: Posio Invlida");
} else {
for (int i = pos; i < n; i++) {
vetor [i] = vetor [i + 1];
}
n--;
}
}
// ------------------------------ exibe
// ------------------------------- length
// ------------------------------- primeiro
// ------------------------------- ultimo
// ------------------------------- existe
Resultado do Programa:
Vetor: [10 20 30 40 50 ]
Erro: Vetor excedeu Limite
Vetor: [10 20 30 40 50 ]
Vetor: [10 20 30 40 ]
Total de Elementos: 4
Primeiro: 10
ltimo: 40
Status: Existe elemento 20
Status: No Existe elemento 20
Vetor: [10 30 40 ]
Vetor: [10 40 ]
17
polimorfismo, herana, associao (agregao e composio) e classes
abstratas e concretas.
Abstrao
Encapsulamento (encapsulao)
Herana
Associao
18
entre objetos da mesma classe), binria (vnculo ocorre entre dois
objetos de classes diferentes) ou mltipla (vnculo ocorre entre mais
de 2 objetos de classes diferentes). Cada associao pode possuir
caractersticas de (a) cardinalidade ou multiplicidade (indica quantos
objetos so possveis em cada associao) e (b) navegao (existe a
possibilidade dos objetos acessarem outros objetos da mesma
associao).
Uma associao pode ser de duas formas: agregao
(Relacionamento com caractersticas onde existe um grau menos intenso
de coeso entre os elementos, pode haver um certo grau de
independncia) ou composio (relacionamento com caractersticas onde
existe um alto grau de coeso e total grau de dependncia entre os
elementos).
// -------------------------------------------------------- Data.cs
using System;
namespace Prog4
{
public class Data
{
// ------------------------------- atributos
19
private int dia, mes, ano;
// ------------------------------- construtor
// ----------------------------------------------------------- Prog4.cs
using System;
namespace Prog4
{
class MainClass
{
public static void Main (string[] args)
{
Data data = new Data(7, 6, 2013);
Resultado do Programa:
Data: 07/06/2013
// ------------------------------------------ TestaCirculo.cs
using System;
namespace TestaCirculo
{
class MainClass
{
public static void Main (string[] args)
{
Circulo circ = new Circulo();
circ.setaRaio(3);
circ.calculaArea();
double area = circ.getArea();
Console.WriteLine("rea: " + area);
}
}
}
2
Observao: area = pi . raio onde pi 3.1416
Crculo
double area, raio
setaRaio
calculaArea
20
getArea
Diagrama de classe
// --------------------------------------------- Peso.cs
using System;
namespace Peso
{
class MainClass
{
public static void Main (string[] args)
{
PesoIdeal piHomem = new PesoIdeal('H', 1.67);
PesoIdeal piMulher = new PesoIdeal('m', 1.65);
piHomem.calculaPesoIdeal();
Console.WriteLine("Peso Ideal Homem: " + piHomem.getPesoIdeal());
piMulher.calculaPesoIdeal();
Console.WriteLine("Peso Ideal Mulher: " + piMulher.getPesoIdeal());
}
}
}
Resultado do Programa:
PesoIdeal
double altura, pi
char sexo
calculaPesoIdeal
getPesoIdeal
Diagrama de classe
// --------------------------------------------------------------- ValidaCPF.cs
using System;
namespace ValidaCPF
{
class MainClass
{
public static void Main (string[] args)
{
String s = "123456789";
CPF cpf = new CPF(s);
Resultado do Programa:
Digito verificador: 09
CPF: 123456789-09
21
CPF
String cpf
int digito
verificaCPF
Diagrama de classe
Como calcular os Dgitos do CPF:
1 2 3 4 5 6 7 8 9
x x x x x x x x x
10 9 8 7 6 5 4 3 2
-- -- -- -- -- -- -- -- --
10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 = 210
11 - (210 % 11) = 10
3) O clculo do segundo dgito feito da mesma forma que o primeiro, porm com os 9
dgitos da base do CPF e o primeiro dgito verificador encontrado, iniciando por 11 e
indo at 2.
1 2 3 4 5 6 7 8 9 0
x x x x x x x x x x
11 10 9 8 7 6 5 4 3 2
-- -- -- -- -- -- -- -- -- --
11 + 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 = 255
11 - (255 % 11) = 9
// ------------------------------------------------------- TestaDiaSemana.cs
using System;
namespace TestaDiaSemana
{
class MainClass
{
public static void Main (string[] args)
{
DiaSemana dia = new DiaSemana(17, 11, 2013);
dia.verificaDiaSemana();
dia.exibeDiaSemana();
}
}
}
Resultado do Programa:
DiaSemana
int dia, mes, ano
String semama
22
verificaDiaSemana
exibeDiaSemana
Diagrama de classe
Para qualquer clculo com datas essencial que se disponha do Dia do Sculo para a(s)
data(s) em questo. O Dia do sculo o nmero de dias decorridos desde o inicio do
sculo (1 de janeiro de 1901) at a data em questo. Se usa como referncia 1901 porque
a maioria das datas com as quais se trabalha ainda so do sculo passado. L por 2040 ou
mais poder se mudar para 2001.
Dia_do_Seculo = (ano - 1901) * 365 + (ano - 1901) DIV 4 + dia + (ms - 1) *31 - [(ms *
4 + 23) DIV 10] * [(ms + 12) DIV 15] + [(4 - ano MOD 4) DIV 4) * [(ms + 12) DIV 15]
Para saber o Dia_da_Semana basta dividir por 7 e entrar com o resto na tabela abaixo:
0 Segunda
1 Tera
2 Quarta
3 Quinta
4 Sexta
5 Sbado
6 Domingo
Observao: DIV diviso inteira de dois nmeros e MOD o resto inteiro da diviso de
dois nmeros
// ------------------------------------------------- TestData.cs
using System;
namespace TestData
{
class MainClass
{
public static void Main (string[] args)
{
Data data = new Data();
Resultado do Programa:
Data
int dia, mes, ano
setaData
extenso
Diagrama de classe
23
3.2.3.6 Implemente os mtodos sortForcaBruta e bubleSort na
classe Vetor vista no item 3.2.
// --------------------------------------------------- Ordena.cs
using System;
namespace Ordena
{
class MainClass
{
public static void Main (string[] args)
{
Vetor v = new Vetor (5);
v.add (30);
v.add (20);
v.add (10);
v.add (50);
v.add (40);
v.exibe ();
v.add (60); // testar o limite do vetor de 5 elementos
v.exibe ();
v.sortForcaBruta();
v.exibe();
// v.bubbleSort();
// v.exibe();
}
}
}
// --------------------------------------------------- TestaPessoa.cs
using System;
namespace TestaPessoa
{
class MainClass
{
public static void Main (string[] args)
{
Pessoa p1 = new Pessoa();
Pessoa p2 = new Pessoa();
Pessoa p3 = new Pessoa();
Resultado do Programa:
24
Pessoa
String nome, ano
char sexo
setaDados
calculaIdade
exibePessoa
Diagrama de classe
// ----------------------------------------------------- TestaPessoaVetor2.cs
using System;
namespace TestaPessoa2
{
class MainClass
{
public static void Main (string[] args)
{
Pessoa [] pessoa = new Pessoa[3];
Resultado do Programa:
Pessoa
String nome, ano
char sexo
setaDados
calculaIdade
exibePessoa
Diagrama de classe
// -------------------------------------------------- Sort.cs
using System;
namespace Sort
{
class MainClass
{
25
public static void Main (string[] args)
{
Pessoa pessoa = new Pessoa(7);
pessoa.insereDados("Beatriz", 11);
pessoa.insereDados("Debora", 13);
pessoa.insereDados("Ftima", 15);
pessoa.insereDados("Geni", 16);
pessoa.insereDados("Carla", 12);
pessoa.insereDados("Eva", 14);
pessoa.insereDados("Ana", 10);
pessoa.exibeDados();
pessoa.sort();
pessoa.exibeDados();
}
}
}
Resultado do Programa:
Lista de Pessoas
Nome: Beatriz Idade: 11
Nome: Debora Idade: 13
Nome: Ftima Idade: 15
Nome: Geni Idade: 16
Nome: Carla Idade: 12
Nome: Eva Idade: 14
Nome: Ana Idade: 10
Lista de Pessoas
Nome: Ana Idade: 10
Nome: Beatriz Idade: 11
Nome: Carla Idade: 12
Nome: Debora Idade: 13
Nome: Eva Idade: 14
Nome: Ftima Idade: 15
Nome: Geni Idade: 16
Pessoa
String [] nome
int [] idade
int n
insereDados
exibeDados
sort
Diagrama de classe
using System;
namespace TestAgenda
{
class MainClass
{
public static void Main (string[] args)
{
Agenda agenda = new Agenda(5);
agenda.insereTelefone("Ana", "99811234");
agenda.insereTelefone("Beatriz", "99812345");
agenda.insereTelefone("Carla", "99813456");
agenda.insereTelefone("Debora", "99814567");
agenda.insereTelefone("Eva", "99815678");
agenda.insereTelefone("Ftima", "99816789");
String fone = "99815678";
String nome = agenda.consultaNome(fone);
if (nome.CompareTo("") != 0) {
Console.WriteLine("Nome: " + nome + " - Telefone: " + fone);
} else {
Console.WriteLine("ERRO: Usurio no Encontrado");
}
26
fone = "99810123";
nome = agenda.consultaNome(fone);
if (nome.CompareTo("") != 0) {
Console.WriteLine("Nome: " + nome + " - Telefone: " + fone);
} else {
Console.WriteLine("ERRO: Usurio no Encontrado");
}
}
}
}
Resultado do Programa:
Agenda
String [] nome
String [] fone
int n
int max
insereTelefone
consultaNome
Diagrama de classe
using System;
namespace TestaData
{
public class Data
{
private int dia, mes, ano; // atributos da classe
public Data ()
{
}
}
}
namespace TestaData
{
class MainClass
{
public static void Main (string[] args)
{
Data data = new Data(19, 11, 2013);
Console.WriteLine(data.toString());
}
}
}
27
Exemplo da definio de uma classe Calculadora:
using System;
namespace Calc
{
public class Calculadora
{
// ............................................. lista de atributos da classe
private double x, y, resp;
private char op;
private int erro;
// ---------------------------- entradaDados
public void entradaDados ()
{
Console.Write ("Digite um Valor: ");
String s = Console.ReadLine ();
x = Convert.ToDouble (s);
do {
Console.Write ("Operador [+ - * / Rr Pp Ss Cc Tt]: ");
s = Console.ReadLine ();
op = s [0];
} while (!strChr ("+-*/RrPpSsCcTt", op));
if (!strChr ("RrSsCcTt", op)) {
Console.Write ("Digite outro Valor: ");
s = Console.ReadLine ();
y = Convert.ToDouble (s);
}
}
// ---------------------------- operaCalculadora
public void operaCalculadora ()
{
switch (op) {
case '+':
resp = soma (x, y);
break;
case '-':
resp = subtracao (x, y);
break;
case '*':
resp = multiplicacao (x, y);
break;
case '/':
if (y == 0)
erro = 1; // divisao por zero
else
resp = divisao (x, y);
break;
case 'R':
case 'r':
if (x < 0)
erro = 2; // raiz negativa
else
resp = raizQuadrada (x); // Raiz Quadrada
break;
case 'P':
case 'p':
resp = power (x, y); // potencia
break;
case 'S':
case 's':
resp = seno (x); // seno
break;
case 'C':
28
case 'c':
resp = cosseno (x); // cosseno
break;
case 'T':
case 't':
if (x == 90 || x == 180) {
erro = 3;
} else {
resp = tangente (x); // tangente
}
break;
}
}
// ---------------------------- exibeCalculadora
public void exibeCalculadora ()
{
if (erro == 1) {
Console.WriteLine ("Erro: Divisao por Zero");
} else {
if (erro == 2) {
Console.WriteLine ("Erro: Raiz Complexa");
} else {
if (erro == 3) {
Console.WriteLine ("Erro: Tangente Infinita");
} else {
Console.WriteLine ("Resposta: " + resp);
}
}
}
}
// ---------------------------- soma
private double soma (double x, double y)
{
return(x + y);
}
// ---------------------------- subtracao
private double subtracao (double x, double y)
{
return(x - y);
}
// ---------------------------- multiplicacao
private double multiplicacao (double x, double y)
{
return(x * y);
}
// ---------------------------- divisao
private double divisao (double x, double y)
{
if (y == 0) {
erro = 1;
return(-1);
}
return(x / y);
}
// ---------------------------- raizQuadrada
private double raizQuadrada (double x)
{
return(Math.Sqrt (x));
29
}
// ---------------------------- power
private double power (double x, double y)
{
return(Math.Pow (x, y));
}
// ---------------------------- seno
private double seno (double x)
{
const double pi = 3.14158;
double rads;
rads = x * pi / 180.0;
return(Math.Sin (rads));
}
// ---------------------------- cosseno
private double cosseno (double x)
{
const double pi = 3.14158;
double rads;
rads = x * pi / 180.0;
return(Math.Cos (rads));
}
// ---------------------------- tangente
private double tangente (double x)
{
const double pi = 3.14158;
double rads;
rads = x * pi / 180.0;
return(Math.Tan (rads));
}
}
}
using System;
namespace Calc
{
class MainClass
{
public static void Main (string[] args)
{
Calculadora calc = new Calculadora();
calc.entradaDados();
calc.operaCalculadora();
calc.exibeCalculadora();
}
}
}
Modificadores de Acesso:
30
mtodos da classe base (superclasse). Deixa acessvel os
atributos e/ou mtodos para todas as outras classes (classe
base) e subclasses (classe derivada).
using System;
namespace SobreCarga
{
class MainClass
{
public static void Main (string[] args)
{
imprime ("Pelotas-RS");
imprime (123.45);
imprime (123.45f);
imprime (123);
imprime ('A');
}
Resultado do programa:
String: Pelotas-RS
Double: 123,45
Float: 123,45
Inteiro: 123
Caracter: A
31
Ponteiro um tipo de dado (varivel) que permite acessar um endereo
qualquer.
using System;
namespace Ponteiro
{
class MainClass
{
public static void Main (string[] args)
{
unsafe { // necessrio configurar para executar
char x = 'A';
char *p;
Resultado do programa:
Valor de x...: A
Caracter ....: A
Resumo: x -> 65
&x -> 100
32
p -> &x -> 100
*p -> 65
&p -> 200
Definio:
tipo_dado_base *nome_do_ponteiro;
Operadores de ponteiros
using System.IO;
namespace Input
{
class MainClass
{
public static void Main (string[] args)
{
TextReader leitor = System.Console.In;
TextWriter escritor = System.Console.Out;
escritor.Write("Digite seu nome: ");
string nome = leitor.ReadLine();
escritor.WriteLine("Nmero de Caracteres: {0}", nome.Length);
}
}
}
Resultado do Programa:
33
4.2 Entrada e sada de dados utilizando Console
A seguir visto outra forma de entrada e sada utilizando a
classe Console.
using System;
namespace EntradaSaida
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("Digite seu Nome: ");
string nome = Console.ReadLine();
Console.WriteLine("Nmero de Caracteres: {0}", nome.Length);
}
}
}
Resultado do Programa:
using System;
namespace Caracter
{
class MainClass
{
public static void Main (string[] args)
{
for (int ch = 0; ch < 255; ch++) {
Console.Write ("Cdigo: " + ch + " - Caracter: " + (char)ch);
Console.ReadKey ();
}
}
}
}
Resultado do Programa:
Cdigo: 35 - Caracter: #
Cdigo: 36 - Caracter: $
Cdigo: 37 - Caracter: %
Cdigo: 38 - Caracter: &
Cdigo: 39 - Caracter: '
Cdigo: 40 - Caracter: (
Cdigo: 41 - Caracter: )
Cdigo: 42 - Caracter: *
Cdigo: 43 - Caracter: +
Cdigo: 44 - Caracter: ,
Cdigo: 45 - Caracter: -
Cdigo: 46 - Caracter: .
Cdigo: 47 - Caracter: /
34
Cdigo: 48 - Caracter: 0
Cdigo: 49 - Caracter: 1
Cdigo: 50 - Caracter: 2
Cdigo: 51 - Caracter: 3
Cdigo: 52 - Caracter: 4
5. Operadores em C#
So smbolos especiais que obrigam o compilador a executar
determinadas operaes. Estas operaes podem ser aritmticas,
comparativas ou lgicas.
35
Operador lgica Ao
&& ou & AND (e)
|| ou | OR (ou)
! NOT (no)
Observao:
Exemplo:
Equivalncia
36
varivel = constante; x = 3;
varivel = varivel; x = y;
varivel = expresso; x = a + b;
varivel = mtodo(x); x = Math.sqrt(y);
using System;
namespace Operadores
{
class MainClass
{
public static void Main (string[] args)
{
// leitura do ano atual
Console.Write("Ano ATUAL: ");
String s = Console.ReadLine();
int ano_atual = Convert.ToInt32 (s);
Resultado do Programa:
if ((produto = x * y) < 0)
5.6 Casts em C#
using System;
namespace Cast
37
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("x = ");
String s = Console.ReadLine();
int x = Convert.ToInt32(s);
Console.Write("y = ");
s = Console.ReadLine();
int y = Convert.ToInt32(s);
// necessrio um cast (float) pois a diviso de dois inteiros resula em um inteiro
float resp = (float) x / y; // CAST para float
Console.WriteLine("Diviso: {0:0.00}", resp);
}
}
}
Resultado do Programa:
x = 3
y = 4
Diviso: 0,75
5.7 Expresses em C#
6.1 Math.Abs
6.3 Math.Acos
38
Faixa: 0 pi
6.4 Math.Atan
6.5 Math.Sin
6.6 Math.Cos
6.7 Math.Tan
6.8 Math.Exp
6.9 Math.Pow
6.10 Math.Sqrt
6.11 Math.Log
39
Sintaxe: double Math.Log (double x);
6.12 Convert.ToDouble
6.14 Convert.ToByte
6.15 Math.Log10
6.16 Random
using System;
namespace Gera
{
class MainClass
{
public static void Main (string[] args)
{
Random rnd = new Random ();
int numero = rnd.Next (10);
Console.WriteLine ("Nmero: " + numero);
}
}
}
Resultado do Programa:
Nmero: 6
6.17 Math.PI
40
6.18 Converso de graus para radianos
7. Comandos em C#
7.1.1 Sequncia em C#
7.1.2 Seleo em C#
Exemplo:
ou
41
using System;
namespace Raiz
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("Digite um valor: ");
String s = Console.ReadLine();
Double x = Convert.ToDouble(s);
if (x < 0)
{
// esta instruo s executada se o valor de x for negativo
x = Math.Abs(x);
}
Double raiz = Math.Sqrt(x);
Console.WriteLine("Raiz Quadrada: {0:0.00}", raiz);
}
}
}
Resultado do Programa:
using System;
namespace Ternario
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("Digite um valor: ");
String s = Console.ReadLine();
int x = Convert.ToInt32(s);
Console.Write("Digite outro valor: ");
s = Console.ReadLine();
int y = Convert.ToInt32(s);
int menor = x < y ? x : y; // operador ternrio
Console.WriteLine("menor: " + menor);
42
int maior = x > y ? x : y; // operador ternrio
Console.WriteLine("maior: " + maior);
}
}
}
Resultado do Programa:
Digite um valor: 3
Digite outro valor: 4
menor: 3
maior: 4
7.1.3 Repetio em C#
using System;
namespace Repete
{
class MainClass
{
public static void Main (string[] args)
{
const int n = 10;
int i = 0;
do {
Console.WriteLine("n = " + i);
i++;
} while (i < n);
}
}
}
Resultado do Programa:
n = 0
n = 1
n = 2
n = 3
n = 4
n = 5
n = 6
n = 7
n = 8
n = 9
7.2 Comando if em C#
Sintaxe:
if (condio) if (condio)
{ {
comando 1; comando;
} ou }
43
else {
comando 2;
}
if (condio) if (condio)
{ {
comando 1; comando 1;
comando 2; comando 2;
} comando 3;
else }
{
comando 3;
comando 4; // todos os comando so compostos
}
using System;
namespace Par
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("Digite um nmero: ");
String s = Console.ReadLine();
int numero = Convert.ToInt32(s);
if ((numero % 2) == 0) {
Console.WriteLine ("Nmero PAR");
}
else {
Console.WriteLine ("Nmero IMPAR");
}
}
}
}
Resultado do Programa:
Digite um nmero: 7
Nmero IMPAR
7.2.1 if encadeados em C#
using System;
44
namespace Numero
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Digite um nmero: ");
String s = Console.ReadLine ();
int num = Convert.ToInt32 (s);
if (num == 0) {
Console.WriteLine ("Nmero Zero");
} else {
if (num > 0) {
Console.WriteLine ("Nmero Positivo");
} else {
Console.WriteLine ("Nmero Negativo");
}
}
}
}
}
Resultado do Programa:
Digite um nmero: 0
Nmero Zero
Sintaxe:
switch (varivel)
{
case constante_1 : seqncia de comandos;
break;
case constante_2 : seqncia de comandos;
break;
.
.
.
default: seqncia de comandos;
}
45
using System;
namespace TestaSwitch
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Digito: ");
String s = Console.ReadLine ();
byte digito = Convert.ToByte (s);
switch (digito) {
case 0:
Console.WriteLine ("Zero");
break;
case 1:
Console.WriteLine ("Um");
break;
case 2:
Console.WriteLine ("Dois");
break;
case 3:
Console.WriteLine ("Trs");
break;
case 4:
Console.WriteLine ("Quatro");
break;
case 5:
Console.WriteLine ("Cinco");
break;
case 6:
Console.WriteLine ("Seis");
break;
case 7:
Console.WriteLine ("Sete");
break;
case 8:
Console.WriteLine ("Oito");
break;
case 9:
Console.WriteLine ("Nove");
break;
default:
Console.WriteLine ("ERRO: No um Dgito");
break;
}
}
}
}
Resultado do Programa:
Digito: 7
Sete
using System;
namespace SwitchChar
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Digito: ");
String s = Console.ReadLine ();
char digito = s [0];
switch (digito) {
46
case '0':
Console.WriteLine ("Zero");
break;
case '1':
Console.WriteLine ("Um");
break;
case '2':
Console.WriteLine ("Dois");
break;
case '3':
Console.WriteLine ("Trs");
break;
case '4':
Console.WriteLine ("Quatro");
break;
case '5':
Console.WriteLine ("Cinco");
break;
case '6':
Console.WriteLine ("Seis");
break;
case '7':
Console.WriteLine ("Sete");
break;
case '8':
Console.WriteLine ("Oito");
break;
case '9':
Console.WriteLine ("Nove");
break;
default:
Console.WriteLine ("ERRO: No um Dgito");
break;
}
}
}
}
Resultado do Programa:
Digito: 6
Seis
using System;
namespace SwitchMenu
{
class MainClass
{
static void inclusao() {
Console.WriteLine("Opo Escolhida: Incluso");
}
47
case 'i':
case 'I': inclusao();
break;
case 'a':
case 'A': alteracao();
break;
case 't':
case 'T': termino();
break;
default: Console.WriteLine("ERRO: Opo Invlida");
break;
}
}
}
}
Resultado do Programa:
[I]ncluso
[A]lterao
[T]rmino
Qual a opo: a
Opo Escolhida: Alterao
Sintaxe:
Exemplo:
48
for (int i = 0; i <= 1000; i++); // comando for no repete nenhum comando
Verifique: Note que no final dos dois comandos (while e for) existe
apenas um ponto-e-vrgula, isto o sinal de comando vazio, ou seja,
os comandos while e for que teriam outros comandos no os tem,
caracterizando comandos vazios.
Exemplo:
for (int x = 1; x <= 10; x++); // note o ponto-e-vrgula no final do comando for
Console.WriteLine(x = {0}, x); // impresso x = 11 na tela, porque?
using System;
namespace Letras
{
class MainClass
{
public static void Main (string[] args)
{
char letra = 'A'; // inicializao da varivel de controle
Resultado do Programa:
Letra: A
Letra: B
Letra: C
Letra: D
Letra: E
Letra: F
Letra: G
Letra: H
Letra: I
Letra: J
Letra: K
Letra: L
Letra: M
Letra: N
Letra: O
.
.
.
Letra: V
49
Letra: W
Letra: X
Letra: Y
Exemplos:
using System;
namespace For
{
class MainClass
{
public static void Main (string[] args)
{
for (int i = 1; i <= 10; i++) { // inicializao: i = 1
Console.Write("{0} ",i); // condio: i <= 10
} // incremento: i++
Console.WriteLine ();
}
}
}
Resultado do Programa:
1 2 3 4 5 6 7 8 9 10
50
Programa exemplo: O programa imprime na tela: i = 1 - j = 9
i = 2 - j = 8
// --------------------------- Fonte: For2.cs i = 3 j = 7
i = 4 j = 6
using System;
namespace For2
{
class MainClass
{
public static void Main (string[] args)
{
for (int i = 1, j = 9; i != j; i++,j--) {
Console.WriteLine ("i = {0} - j = {1}", i, j);
}
}
}
}
Resultado do Programa:
i = 1 - j = 9
i = 2 - j = 8
i = 3 - j = 7
i = 4 - j = 6
inicializao;
while (condio)
{
comando;
incremento; // ou decremento
}
ou
inicializao;
do {
comando;
incremento; // ou decremento
} while (condio);
using System;
namespace ForReach
{
class MainClass
{
public static void Main (string[] args)
{
string[] nomes = { "Paulo", "Roberto", "Gomes", "Luzzardi" };
foreach (string nome in nomes) {
Console.WriteLine (nome);
}
}
}
}
Resultado do programa:
Paulo
51
Roberto
Gomes
Luzzardi
Sintaxe:
do {
comando;
} while (condio);
using System;
namespace While
{
class MainClass
{
public static void Main (string[] args)
{
int i = 1;
do {
Console.Write("{0} ",i);
i++;
} while (i <= 10);
Console.WriteLine ();
}
}
}
Resultado do Programa:
1 2 3 4 5 6 7 8 9 10
52
using System;
namespace Break
{
class MainClass
{
public static void Main (string[] args)
{
char tecla;
do {
Console.Write ("Tecla ou [F]im: ");
String s = Console.ReadLine ();
tecla = s [0];
if (tecla == 'F' || tecla == 'f') {
// encerra o lao quando o usurio teclar 'F' ou 'f'
break;
}
Console.WriteLine ("Tecla: " + (char)tecla + " - Cdigo: " + (int)tecla);
} while (true); // lao eterno
}
}
}
Resultado do Programa:
Tecla ou [F]im: a
Tecla: a - Cdigo: 97
Tecla ou [F]im: b
Tecla: b - Cdigo: 98
Tecla ou [F]im: A
Tecla: A - Cdigo: 65
Tecla ou [F]im: B
Tecla: B - Cdigo: 66
Tecla ou [F]im: f
using System;
namespace Continue
{
class MainClass
{
public static void Main (string[] args)
{
for (int i = 0; i < 20; i++) {
if (i % 2 == 1) { // 0 par, 1 impar
continue;
}
// imprime somente nmeros pares
Console.WriteLine("Par: {0}", i);
}
}
}
}
Resultado do Programa:
Par: 0
Par: 2
Par: 4
Par: 6
Par: 8
53
Par: 10
Par: 12
Par: 14
Par: 16
Par: 18
Par: 20
Nos laos while e do {} while um comando continue faz com que o
controle do programa execute diretamente o teste da condio e depois
continue o processo do lao.
Sintaxe:
String String.Format("string de controle", lista de variveis);
using System;
namespace Cpf
{
class MainClass
{
public static void Main (string[] args)
{
long cpf = 12345678909;
Resultado do programa:
cpf: 123.456.789-09
54
f ponto flutuante {0:f} -12345.00
g genrico {0:g} -12345
n numrico {0:n} -12,345.00
r arredonda {0:r} System.FormatException
x hexadecimal {0:x4} 07b
55
hh hora com 2 dgitos 02
hh hora em 24 horas 14
mm minuto com 2 dgitos 30
mm ms com 2 dgitos 11
mmm nome do ms curto Nov
mmmmmm nome do ms Novembro
ss Segundos com 2 dgitos 34
tt AM/PM PM
aa Ano com 2 dgitos 13
aaaa Ano com 4 dgitos 2013
: separador {0:hh:mm:ss} 22:13:34
/ separador {0:dd/mm/aaaa} 21/11/2013
using System;
namespace Formato
{
class MainClass
{
public static void Main (string[] args)
{
DateTime data = DateTime.Now; // l a data do sistema
String Format = String.Format("{0:yy yyyy}", data);
Console.WriteLine ("Data: " + Format);
String Format1 = String.Format("{0:M MM MMM MMMM}", data);
Console.WriteLine ("Data: " + Format1);
String Format2 = String.Format("{0:d dd ddd dddd}", data);
Console.WriteLine ("Data: " + Format2);
String Format3 = String.Format("{0:h hh H HH}", data);
Console.WriteLine ("Data: " + Format3);
String Format4 = String.Format("{0:m mm}", data);
Console.WriteLine ("Data: " + Format4);
String Format5 = String.Format("{0:s ss}", data);
Console.WriteLine ("Data: " + Format5);
String Format6 = String.Format("{0:f ff fff ffff}", data);
Console.WriteLine ("Data: " + Format6);
String Format7 = String.Format("{0:F FF FFF FFFF}", data);
Console.WriteLine ("Data: " + Format7);
String Format8 = String.Format("{0:t tt}", data);
Console.WriteLine ("Data: " + Format8);
String Format9 = String.Format("{0:z zz zzz}", data);
Console.WriteLine ("Data: " + Format9);
56
Resultado do programa:
Data: 13 2013
Data: 11 11 nov novembro
Data: 21 21 qui quinta-feira
Data: 11 11 23 23
Data: 10 10
Data: 15 15
Data: 1 10 100 1009
Data: 1 1 1 1009
Data: P PM
Data: -2 -02 -02:00
Valor: R$ 123,00
Valor: R$ 123,000000
Valor: 123
Valor: 000000000123
Valor: 1,230000E+002
Valor: 123,00
Valor: 123
Valor: 123,00
Valor: 123,0000
Valor: 7B
Valor: 07b
Exemplo (Tela):
n1 + n2 * 2 + n3 * 3 + n4
Mdia = ---------------------------
7
Mdia Conceito
9,0 ou acima de 9,0 A
entre 7,5 (inclusive) e 9,0 B
entre 6,0 (inclusive) e 7,5 C
abaixo de 6,0 D
57
Exemplo: Comprimento da circunferncia: 36 <enter>
Dimetro: 11.46
Raio: 5.73
Continua [S/N]? N <enter>
Exemplo (Tela):
Exemplo (Tela):
9.6 Reescreva o programa anterior recebendo via teclado uma letra para
o tipo de animal [G]ado, [E]qinos ou [O]vinos, preo unitrio do
animal e quantidade de animais comprado. O programa deve calcular e
imprimir na tela: preo total pago e a comisso do escritrio de
remate (gado: 5%, eqinos: 7% e ovinos: 3%), conforme exemplo abaixo:
Exemplo (Tela):
58
anos, meses e dias vividos. O programa deve calcular e imprimir a data
de nascimento no seguinte formato: dd/mm/aaaa.
Exemplo (Tela):
59
Exemplo: Temperatura: 30 <enter>
Tipo de converso (converte para: [C]elsius ou [F]ahrenheit): F <enter>
Temperatura em Fahrenheit: 86
Continua [S/N]? S <enter>
Temperatura: 86 <enter>
Tipo de converso (converte para: [C]elsius ou [F]ahrenheit): C <enter>
Temperatura em Celsius: 30
Continua [S/N]? n <enter>
Frmula: C
9 . --- = F - 32
5
minutos segundos
ngulos em graus = graus + ---------- + ----------
60 3600
Exemplo:
Graus: 45 <enter>
Minutos: 45 <enter>
Segundos: 45 <enter>
ngulo em Graus: 45.76
Continua [S]im ou [N]o? S <enter>
Graus: 45 <enter>
Minutos: 10 <enter>
Segundos: 15 <enter>
ngulo em Graus: 45.17
Continua [S]im ou [N]o? N <enter>
60
Uma vantagem na utilizao de um vetor poder armazenar vrios
valores (elementos), na memria RAM, ao mesmo tempo, permitindo, por
exemplo, compar-los e classific-los.
Onde:
primeiro elemento: 0
ltimo elemento: nmero_de_elementos 1
nmero de bytes ocupados na memria RAM:
nmero_de_elementos x quantidade_de_bytes_de_um_elemento
using System;
namespace Vetor1
{
class MainClass
{
public static void Main (string[] args)
{
const int max = 5;
int [] vetor = new int[max];
Resultado do programa:
61
Valor: 1
Valor: 2
Valor: 3
Valor: 4
Valor: 5
vetor[0] = 1
vetor[1] = 2
vetor[2] = 3
vetor[3] = 4
vetor[4] = 5
using System;
namespace Vetor2
{
class MainClass
{
public static void Main (string[] args)
{
const int max = 5;
int[] vetor = { 1, 2, 3, 4, 5 };
Resultado do programa:
vetor[0] = 1
vetor[1] = 2
vetor[2] = 3
vetor[3] = 4
vetor[4] = 5
10.2 Strings em C#
using System;
namespace Vetor3
{
class MainClass
{
public static void Main (string[] args)
{
String [] vetor = { "Paulo", "Roberto", "Gomes", "Luzzardi" };
int max = vetor.Length;
Resultado do programa:
vetor[0] = Paulo
vetor[1] = Roberto
vetor[2] = Gomes
62
vetor[3] = Luzzardi
using System;
namespace Vetor4
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("String: ");
String s = Console.ReadLine ();
int n = s.Length;
char[] vetorCaracter = new char[n];
Resultado do programa:
String: pelotas
Vetor: satolep
using System;
namespace Vetor5
{
class MainClass
{
// --------------------------- entradaDados
static int entradaDados ()
{
Console.Write ("Nmero de Palpites: ");
String s = Console.ReadLine ();
int n = Convert.ToInt32 (s);
return(n);
}
// --------------------------- verificaRepetido
static bool verificaRepetido (int j, int n, int num, int[,]sena)
{
63
bool repetido = false;
}
}
}
Resultado do programa:
Nmero de Palpites: 5
Palpite: 06 09 11 25 36 37
Palpite: 07 17 31 45 54 58
Palpite: 12 17 20 24 38 55
Palpite: 26 28 43 47 54 58
Palpite: 16 33 45 47 48 55
64
Para criar um vetor de Strings, deve-se utilizar um vetor de
Strings.
nome[0] = Senac;
nome[1] = UCS;
nome[2] = UFPel;
0 1 2
s i m
int[,] y = { { 1, 1 }, { 2, 4 }, { 3, 9 }, { 4, 16 } };
y[0][0] = 1 y[2][0] = 3
y[0][1] = 1 y[2][1] = 9
y[1][0] = 2 y[3][0] = 4
y[1][1] = 4 y[3][1] = 16
65
Na inicializao de uma matriz (ou vetor), se no for
especificado seu tamanho, ento o compilador C# cria uma matriz (ou
vetor) grande o suficiente para conter todos os inicializadores
presentes.
using System;
namespace String3
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Numero de Elementos: ");
String s = Console.ReadLine ();
int numElementos = Convert.ToInt32 (s);
String[] nome = new String[numElementos];
int[] idade = new int[numElementos];
for (int i = 0; i < numElementos; i++) {
Console.Write ("Nome: ");
nome [i] = Console.ReadLine ();
Console.Write ("Idade: ");
s = Console.ReadLine ();
idade [i] = Convert.ToInt32 (s);
}
for (int i = 0; i < numElementos; i++) {
String extenso = String.Format("{0,-20:C}", nome[i]) + String.Format("{0:00}", idade [i]);
Console.WriteLine (extenso);
}
}
}
}
Resultado do programa:
Nmero de Elementos: 3
Nome: paulo
Idade: 51
Nome: renato
Idade: 49
Nome: francisco
Idade: 53
paulo 51
renato 49
francisco 53
using System;
namespace Matriz
{
class MainClass
{
public static void Main (string[] args)
{
const int max = 10;
int[,] a = new int [max,max];
int[,] b = new int [max,max];
int[,] c = new int [max,max];
66
int col, lin, m, n;
Resultado do programa:
C[1,1] = 3
C[1,2] = 7
C[2,1] = 11
C[2,2] = 15
using System;
namespace ForcaBruta
{
class MainClass
{
public static void Main (string[] args)
{
67
Console.Write("Nmero de Elementos: ");
String s = Console.ReadLine();
int numElementos = Convert.ToInt32(s);
String [] nome = new String[numElementos];
for (int i = 0;i < numElementos;i++) {
Console.Write("Nome: ");
nome[i] = Console.ReadLine();
}
Console.WriteLine("\nNomes ORDENADOS\n");
for (int i = 0; i < numElementos; i++) {
Console.WriteLine("Nome: {0}", nome[i]);
}
}
}
}
Resultado do programa:
Nmero de Elementos: 5
Nome: Beatriz
Nome: Debora
Nome: Ana
Nome: Eva
Nome: Carla
Nomes ORDENADOS
Nome: Ana
Nome: Beatriz
Nome: Carla
Nome: Debora
Nome: Eva
using System;
namespace Bubble
{
class MainClass
{
public static void Main (string[] args)
{
bool sort;
int k = numElementos - 1;
do {
sort = false;
for (int i = 0; i < k; i++) {
if (nome[i].CompareTo(nome[i+1]) > 0) {
String temp = nome[i];
nome[i] = nome[i+1];
68
nome[i+1] = temp;
sort = true;
}
}
k--;
} while (sort);
Console.WriteLine("\nNomes ORDENADOS\n");
for (int i = 0; i < numElementos; i++) {
Console.WriteLine("Nome: {0}", nome[i]);
}
}
}
}
Resultado do programa:
Nmero de Elementos: 5
Nome: Eva
Nome: Carla
Nome: Debora
Nome: Ana
Nome: Beatriz
Nomes ORDENADOS
Nome: Ana
Nome: Beatriz
Nome: Carla
Nome: Debora
Nome: Eva
69
tela a posio do nmero no vetor ou ERRO: Nmero no encontrado (veja
exemplos abaixo):
Exemplo: Nmero: 50 <enter>
Nmero: 30 <enter>
Nmero: 20 <enter>
Nmero: 10 <enter>
Nmero: 40 <enter>
Nmero: 0 <enter>
Valor: 20 <enter>
Posio no vetor: 2
Valor: 40 <enter>
Posio no vetor: 4
Valor: 60 <enter>
ERRO: Nmero no encontrado
Valor: 0 <enter>
70
Idade: 13 <enter>
Continua [S/N]? s <enter>
Nome: Carla <enter>
Idade: 14 <enter>
Continua [S/N]? N <enter>
Carla 14
Beatriz 13
Ana 12
71
11. Manipulao de Strings em C#
A linguagem C# possui uma classe especifica para manipular
strings, ou seja, permite manipular uma cadeia de caracteres.
Construtor Tipo
String (Char *) Ponteiro de caracteres
String(Char[])) Vetor de caracteres.
String(SByte*) Ponteiro de bytes
String(Char, Int32) Caracter repetido n vezes
String(Char*, Int32, Int32) Ponteiro de caracteres com uma posio e um comprimento
String(Char[], Int32, Int32) Vetor de caracteres com uma posio e um comprimento
String(SByte*, Int32, Int32) Ponteiro de caracteres com uma posio e um comprimento
Mtodo Funcionamento
Compare(String, Compara duas Strings e retorna um nmero inteiro que indica sua
String) posio relativa na ordem de classificao
Concat(String[]) Concatena os elementos de um vetor de Strings
Retorna um valor indicando se o objeto String ocorre dentro desta
Contains
instncia
Cria uma nova instncia de String com o mesmo valor de um
Copy
objeto String especificado
Copia um nmero especificado de caracteres de uma posio
CopyTo especificada nesta instncia para uma posio especificada em
um vetor de caracteres
Determina se esta instncia e outro objeto String especificado tm
Equals(String)
o mesmo valor.
Equals(String,
Determina se dois objetos String especificados tm o mesmo valor
String)
Retorna o ndice da primeira ocorrncia nesta String do caractere
IndexOf(Char)
especificado
Retorna o ndice da primeira ocorrncia da String especificada
IndexOf(String)
nesta instncia
Insere uma String especificada em uma posio especificada nesta
Insert
instncia
Exclui todos os caracteres desta String, comeando em uma posio
Remove(Int32)
especificada e continuando at a ltima posio
Exclui um nmero especificado de caracteres desta instncia,
Remove(Int32, Int32)
comeando em uma posio especificada
Retorna uma nova seqncia na qual todas as ocorrncias de um
Replace(Char, Char) caracter especificado so substitudos por um outro caractere
especificado
Retorna uma nova seqncia na qual todas as ocorrncias de
Replace(String,
uma String especificada so substitudas por outra String
String)
especificada
Retorna um vetor de Strings que contm os substrings nesta
Split(Char[]) instncia que so delimitados por elementos de um vetorde
caracteres especificado
Retorna um vetor de Strings que contm os substrings nesta
Split(Char[], Int32) instncia que so delimitados por elementos de um vetorde
caracteres especificado
Substring(Int32) Recupera uma substring desta instncia
Substring(Int32,
Recupera uma substring desta instncia
Int32)
ToCharArray() Copia os caracteres nesta instncia para um vetor de caracteres
72
ToCharArray(Int32, Copia os caracteres em uma substring especificada nesta instncia
Int32) para um vetor de caracteres
ToLower() Retorna uma cpia da string convertida para caracteres minsculos
ToString() Retorna a instncia da String
Retorna uma cpia desta String convertida para caracteres
ToUpper()
maisculos
Exemplos:
using System;
namespace Converter
{
class MainClass
{
public static void Main (string[] args)
{
String s = "Paulo Roberto Gomes Luzzardi";
Resultado do Programa:
using System;
namespace Inverte
{
class MainClass
{
public static void Main (string[] args)
{
char op;
do {
Console.Write("Nome: ");
String s = Console.ReadLine();
Console.Write("Invertido: ");
int n = s.Length; // nmero de caracteres da String s
for (int i = n-1;i >= 0;i--) {
Console.Write(s[i]); // acesso a cada caracter de s
}
Console.WriteLine();
do {
Console.Write("Continua [S/N]? ");
s = Console.ReadLine();
op = s[0];
} while ("SsNn".IndexOf(op) == -1); // verifica se op SsNn
} while ("Ss".IndexOf(op) != -1);
}
}
}
Resultado do Programa:
Nome: pelotas
73
Invertido: satolep
Continua [S/N]? s
Nome: satolep
Invertido: pelotas
Continua [S/N]? N
using System;
namespace StringFormat
{
class MainClass
{
public static void Main (string[] args)
{
float numero = 123.4567f;
Resultado do Programa:
74
Observao: O programa deve imprimir na tela as seguintes mensagens de erro, se for o
caso: Letra antecessora no existe, Letra sucessora no existe ou Posio invlida.
75
Fim: 15 <enter>
ERRO: Fim Invlido
Continua [S/N]? N <enter>
Forma Geral:
corpo do mtodo;
return(x);
}
using System;
namespace Rand
{
class MainClass
{
static Random rnd = new Random (); // varivel global, no uma boa prtica de programao
// ----------------------------------------------- random
static int random (int n)
{
int numero = rnd.Next (n);
return(numero);
}
// ------------------------------------------------ main
public static void Main (string[] args)
{
for (int i = 1; i <= 10; i++) {
Console.WriteLine ("Valor: " + random (100));
}
}
}
}
Resultado do Programa:
Valor: 13
Valor: 45
Valor: 96
Valor: 29
Valor: 58
76
Valor: 10
Valor: 37
Valor: 54
Valor: 33
Valor: 95
using System;
namespace Inverso
{
class MainClass
{
// ----------------------------- Mtodo definido pelo programador
static double inverso (double x)
{
double i;
i = (double)1 / x;
return(i);
}
// -----------------------------------------Main
public static void Main (string[] args)
{
Console.Write ("x: ");
String s = Console.ReadLine ();
double x = Convert.ToDouble (s);
double inv = inverso (x); // chamada do mtodo inverso
Console.WriteLine ("Inverso = {0}", inv);
}
}
}
Resultado do Programa:
x: 4
Inverso = 0,25
using System;
namespace Metodo1
{
class MainClass
{
// ------------------------------------------------- Mtodo definido pelo programador
static double potencia (double x, int y)
{
double valor;
77
valor = Math.Exp (Math.Log (x) * y);
return(valor);
}
// ---------------------------------------------------- Main
public static void Main (string[] args)
{
Console.Write ("Base: ");
String s = Console.ReadLine ();
double _base = Convert.ToDouble (s);
Console.Write ("Expoente: ");
s = Console.ReadLine ();
int _expoente = Convert.ToInt32 (s);
double resp = potencia (_base, _expoente); // chamada do mtodo potencia
Console.WriteLine ("Potencia = {0}", resp);
}
}
}
Resultado do Programa:
Base: 3
Expoente: 4
Potencia = 81
using System;
namespace Metodo2
{
class MainClass
{
// ---------------------------------------------------------------------------- mtodo definido pelo programador
det = b * b - 4 * a * c;
if (det == 0) {
return(0);
}
else {
if (det > 0) {
return(1);
}
else {
return(-1);
}
}
}
// ------------------------------------------------------------- Main
public static void Main (string[] args)
{
Console.Write("a = ");
String s = Console.ReadLine();
float a = float.Parse(s);
Console.Write("b = ");
s = Console.ReadLine();
float b = float.Parse(s);
Console.Write("c = ");
s = Console.ReadLine();
float c = float.Parse(s);
int retorno = verificaDeterminante(a,b,c);
if (retorno == 0) {
78
Console.WriteLine("Determinante ZERO");
}
else {
if (retorno > 0) {
Console.WriteLine("Determinante POSITIVO");
}
else {
Console.WriteLine("Determinante NEGATIVO");
}
}
}
}
}
Resultado do Programa:
a = 1
b = 2
c = -4
Determinante POSITIVO
using System;
namespace Metodo3
{
class MainClass
{
// --------------------------------------------- ImprimeNumero
static void imprimeNumero (int n)
{
Console.WriteLine ("Nmero digitado foi {0}", n);
}
// -------------------------------------------- ImprimeNumero
static void imprimeNumero (float n)
{
Console.WriteLine ("Nmero digitado foi {0}", n);
}
// --------------------------------------------- Main
public static void Main (string[] args)
{
Console.Write ("Digite um nmero inteiro: ");
String s = Console.ReadLine ();
int x = int.Parse (s);
imprimeNumero (x);
Console.Write ("Digite outro nmero real: ");
s = Console.ReadLine ();
float y = float.Parse (s);
imprimeNumero (y);
}
}
}
Resultado do Programa:
79
12.2 Passagem de parmetros por valor em C#
using System;
namespace Metodo4
{
class MainClass
{
// ------------------------ desenhaRetangulo
static void desenhaRetangulo (int ci, int li, int cf, int lf)
{
int c, l;
Resultado do Programa:
####################
####################
####################
####################
####################
####################
####################
####################
####################
####################
80
// ------------------------------------------------- Fonte: Troca.cs
using System;
namespace Troca
{
class MainClass
{
static void troca(ref int x, ref int y) // ref - referncia
{
int temp = x;
x = y;
y = temp;
}
public static void Main (string[] args)
{
int x = 3, y = 4;
Console.WriteLine ("x = {0} - y = {1}", x, y);
Resultado do Programa:
x = 3 - y = 4
x = 4 - y = 3
using System;
namespace Troca2
{
class MainClass
{
unsafe static void troca(int *x, int *y) // unsafe cdigo inseguro
{
int temp = *x;
*x = *y;
*y = temp;
}
public static void Main (string[] args)
{
unsafe {
int x = 3, y = 4;
Console.WriteLine ("x = {0} - y = {1}", x, y);
Resultado do Programa:
x = 3 - y = 4
x = 4 - y = 3
81
12.4 Mtodos que devolvem valores no-inteiros em C#
using System;
namespace Divisao
{
class MainClass
{
// -------------------------------------------- mtodo definido pelo programador
static float divisao (int x, int y)
{
return((float)x / y);
}
// -------------------------------------------- Main
public static void Main (string[] args)
{
Console.Write ("x = ");
String s = Console.ReadLine ();
int x = int.Parse (s);
Console.Write ("y = ");
s = Console.ReadLine ();
int y = int.Parse (s);
float resposta = divisao (x, y);
Console.WriteLine ("Diviso = {0}", resposta);
}
}
}
Resultado do Programa:
x = 3
y = 4
Diviso = 0,75
Programa recebe:
argv[0] = pelotas
82
// --------------------------------------- Fonte: Inverter.cs
using System;
namespace Inverter
{
class MainClass
{
public static void Main (string[] args)
{
int n, argc = args.Length;
if (argc != 1) {
Console.WriteLine("Sintaxe: Inverter <palavra>\n");
}
else {
Console.Write("Palavra: ");
n = args[0].Length;
for (int i = n-1; i >= 0; i--) {
Console.Write("{0}", args[0][i]);
}
Console.WriteLine();
}
}
}
}
Resultado do Programa:
MacBook-Air-de-Paulo:Inverter pluzzardi$ ls -l
total 24
-rw-r--r-- 1 pluzzardi staff 1663 22 Nov 23:55 Inverter.csproj
-rw-r--r-- 1 pluzzardi staff 401 22 Nov 23:57 Program.cs
-rwxr-xr-x 1 pluzzardi staff 3584 22 Nov 23:58 Program.exe
drwxr-xr-x 3 pluzzardi staff 102 22 Nov 23:55 Properties
drwxr-xr-x 3 pluzzardi staff 102 22 Nov 23:55 bin
drwxr-xr-x 3 pluzzardi staff 102 22 Nov 23:55 obj
MacBook-Air-de-Paulo:Inverter pluzzardi$ mono Program.exe pelotas
Palavra: satolep
MacBook-Air-de-Paulo:Inverter pluzzardi$
Programa recebe:
agv[0] = dbeacgf
using System;
namespace Ordem
{
class MainClass
{
public static void Main (string[] args)
{
int argc = args.Length;
int numCar;
if (argc != 1) {
Console.WriteLine("Sintaxe: Ordem <palavra> \n");
}
else {
83
numCar = args[0].Length;
char [] ch = new char[numCar];
for (int i = 0;i < numCar;i++) {
ch[i] = args[0][i];
}
for (int i = 0; i < numCar-1; i++) {
for (int j = i+1; j < numCar; j++) {
if (ch[i] > ch[j]) {
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
}
for (int i =0;i < numCar;i++) {
Console.Write("{0}", ch[i]);
}
Console.WriteLine();
}
}
}
}
Resultado do Programa:
12.6 Recursividade em C#
using System;
namespace Fatorial
{
class MainClass
{
// ----------------------------------------- fatorial
do {
do {
Console.Write("n = ");
String s = Console.ReadLine();
n = int.Parse(s);
} while (n < 0 || n > 100);
long fat = fatorial(n);
84
Console.WriteLine("Fatorial: {0}", fat);
} while (n != 0);
}
}
}
Resultado do Programa:
n = 5
Fatorial: 120
n = 10
Fatorial: 3628800
n = 15
Fatorial: 1307674368000
n = 20
Fatorial: 2432902008176640000
n = 30
Fatorial: -8764578968847253504 // erro
n = 0
Fatorial: 1
using System;
namespace Soma
{
class MainClass
{
// ----------------------------------- soma
static long soma (int n)
{
long s;
if (n == 1) {
return(1);
}
s = n + soma (n - 1); // recursividade
return(s);
}
// ---------------------------------------------------- Main
public static void Main (string[] args)
{
int n;
long sum;
do {
do {
Console.Write ("n = ");
String s = Console.ReadLine ();
n = int.Parse (s);
} while (n < 0 || n > 19);
if (n > 0) {
sum = soma (n);
Console.WriteLine ("Soma: {0}", sum);
}
} while (n != 0);
}
}
}
Resultado do Programa:
n = 1
Soma: 1
n = 2
Soma: 3
n = 3
Soma: 6
n = 4
Soma: 10
n = 5
85
Soma: 15
n = 6
Soma: 21
n = 7
Soma: 28
n = 8
Soma: 36
n = 0
using System;
namespace Palavras
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("Nome: ");
String nome = Console.ReadLine();
int n = numeroPalavras(nome);
Console.WriteLine("Seu nome tem {0} palavra(s)", n);
}
// ---------------------------- numeroPalavras
}
}
Resultado do Programa:
using System;
namespace Quadrante
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("x: ");
String s = Console.ReadLine ();
int x = int.Parse (s);
Console.WriteLine ("y: ");
s = Console.ReadLine ();
int y = int.Parse (s);
int n = verificaQuadrante (x, y);
Console.WriteLine ("Quadrante: {0}", n);
}
// ---------------------------- verificaQuadrante
}
}
Resultado do Programa:
2 | 1
x: 1 <enter> ________________________
86
y: 2 <enter> |
Quadrante: 1 3 | 4
using System;
namespace Placa
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Qual a placa de seu carro [xxx9999]: ");
String placa = Console.ReadLine ();
char fim = finalPlaca (placa);
Console.WriteLine ("Final da Placa : {0}", fim);
}
// ---------------------------- finalPlaca
}
}
Resultado do Programa:
using System;
namespace Vogais
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write("Nome: ");
String nome = Console.ReadLine();
int vogais = numVogais(nome);
Console.WriteLine("Vogais: {0}", vogais);
}
// -------------------------- numVogais
}
}
Resultado do Programa:
Frmula: h2 = a2 + b2
using System;
namespace Hipotenusa
{
class MainClass
87
{
public static void Main (string[] args)
{
Console.Write ("Cateto Adjacente: ");
String s = Console.ReadLine ();
float a = float.Parse (s);
Console.Write ("Cateto Oposto: ");
s = Console.ReadLine ();
float b = float.Parse (s);
float h = calculaHipotenusa (a, b);
Console.WriteLine ("Hipotenusa: {0}", h);
}
// ---------------------------- calculaHipotenusa
}
}
Resultado do Programa:
using System;
namespace Reajuste
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Salrio (R$): ");
String s = Console.ReadLine ();
float salario = float.Parse (s);
Console.Write ("ndice de Reajuste: ");
s = Console.ReadLine ();
float indice = float.Parse (s);
float reajuste = calculaReajuste (salario, indice);
Console.WriteLine ("Salrio Atualizado (R$): {0}", reajuste);
}
// ---------------------------- calculaReajuste
}
}
Resultado do Programa:
88
HashTable Representa uma coleo de pares de chave / valor
que so organizados com base no cdigo de hash da
chave
Queue Fila
Stack Pilha
Collections (Colees)
using System;
namespace Objeto
{
class MainClass
{
public static void Main (string[] args)
{
Object[] objeto = new Object[3];
Resultado do Programa:
A classe List permite criar uma lista tipada com qualquer tipo,
ou seja, o programador escolhe que tipo vai poder utilizar, isto pode
ser chamado de lista genrica.
89
Pacote: using System.Collections.Generic;
Construtor Descrio
List<T>() Inicializa com uma nova instncia da classe List<T> vazia
Inicializa com uma nova instncia da classe List<T> com elementos
List<T>(IEnumerable<T>)
copiados de uma coleo especificada
Inicializa com uma nova instncia da classe List<T> vazia com uma
List<T>(Int32)
quantidade especificada
Mtodo Funcionamento
Add Adiciona um objeto para o fim da List<T>
Pesquisa o List<T> para um elemento utilizando o comparador padro e
BinarySearch(T)
retorna o ndice
Clear Remove todos os elementos da List<T>
Contains Determina se um elemento est presente na List<T>
CopyTo(T[]) Copia todo o List<T> para um vetor
Equals(Object) Verifica se o objeto especificado igual ao objeto atual
Exists Determina se o List<T> contm os elementos
Pesquisa um elemento e retorna a primeira ocorrncia dentro de toda a
Find
List<T>
FindAll Recupera os elementos
Pesquisa um elemento e retorna a ltima ocorrncia dentro de toda a
FindLast
List<T>.
ForEach Percorre todos os elemento da List<T>
GetType Obtm o tipo do objeto
IndexOf(T) Procura o objeto e retorna o ndice
Insert Insere um elemento para o List<T>
Remove Remove a primeira ocorrncia de um objeto no List<T>
RemoveAll Remove todos os elementos especificados
Sort() Ordena os elementos do List<T>
ToArray Copia os elementos do List<T> para um vetor
ToString Retorna em forma de string
using System;
using System.Collections.Generic;
namespace TestList
{
class MainClass
{
public static void Main (string[] args)
{
var pessoas = new List<string> { "Paulo Roberto", "Renato Luis", "Francisco", "Ana Maria", "Julia Helena" };
Resultado do Programa:
Paulo Roberto
Renato Luis
Francisco
90
Ana Maria
Julia Helena
Construtor() Descrio
Inicializa uma nova instncia da classe ArrayList que est vazia e
ArrayList()
tem a capacidade de padro inicial
Inicializa uma nova instncia da classe ArrayList que contm os
ArrayList(ICollection) elementos copiados de coleo especificada e que possui a mesma
capacidade inicial que o nmero de elementos copiou
Inicializa uma nova instncia da classe ArrayList que est vazia e
ArrayList(Int32)
tem a capacidade inicial especificada
Mtodo Descrio
Add Adiciona um objeto no final do ArrayList
BinarySearch(Object) Procura um objeto em um ArrayList ordenado
Clear Remove todos os elementos de ArrayList
Clone Cria uma cpia de ArrayList
Contains Verifica se um elemento est no ArrayList
CopyTo(Array) Copia o ArrayList a um vetor 1D
CopyTo(Array, Int32) Copia o ArrayList a um vetor 1D, a partir do ndice especificado
Equals(Object) Verifica se o objeto especificado igual ao objeto atual
Retorna o ArrayList que representa um subconjunto dos elementos do
GetRange
ArrayList.
GetType Obtm o tipo do ArrayList
Pesquisa por objetos e retorna o ndice da primeira ocorrncia
IndexOf(Object)
dentro de ArrayList
Insert Insere um elemento em ArrayList no ndice
Remove Remove a primeira ocorrncia de um objeto do ArrayList
RemoveAt Remove o elemento no ndice de ArrayList
RemoveRange Remove um intervalo de elementos de ArrayList
Repeat Retorna ArrayList cujos elementos so cpias do valor
Reverse() Inverte a ordem dos elementos do ArrayList
Copia elementos da coleo de um intervalo de elementos do
SetRange
ArrayList
Sort() Ordena os elementos em ArrayList
ToArray() Copia elementos de ArrayList para um novo vetor
ToString Retorna uma string que representa o objeto
using System;
using System.Collections;
namespace TestaArrayList
{
class MainClass
{
91
public static void Main (string[] args)
{
ArrayList nome = new ArrayList ();
nome.Add("Paulo Roberto");
nome.Add (51);
nome.Add("Renato Luis");
nome.Add (49);
nome.Add("Francisco Carlos");
nome.Add (53);
nome.Add("Ana Maria");
nome.Add (55);
nome.Add("Julia Helena");
nome.Add (54);
Resultado do Programa:
Paulo Roberto
51
Renato Luis
49
Francisco Carlos
53
Ana Maria
55
Julia Helena
54
Mtodo Descrio
Add Adiciona um item a IList.
Clear Remove todos os itens de IList.
Contains Determina se IList contm um valor especfico.
Copia os elementos da ICollection para um Array, inicial de um determinado
CopyTo
Array ndice. (Herdado de ICollection)
Retorna um enumerador que executa iteraes atravs de uma coleo.
GetEnumerator
(Herdado de IEnumerable)
IndexOf Determina o ndice de um item especfico em IList.
Insert Insere um item a IList no ndice especificado.
Remove Remove a primeira ocorrncia de um determinado objeto de IList.
RemoveAt Remove o item de IList no ndice especificado.
using System;
using System.Collections.Generic;
class IListTeste
{
static void exibeLista (IList<int> lista)
{
foreach (int value in lista) {
Console.WriteLine ("Elemento: " + value);
}
Console.WriteLine ("Total de Elementos: {0}", lista.Count);
}
92
public static void Main (string[] args)
{
int[] vetor = new int[3];
vetor [0] = 10;
vetor [1] = 20;
vetor [2] = 30;
exibeLista (vetor);
Resultado do Programa:
Elemento: 10
Elemento: 20
Elemento: 30
Total de Elementos: 3
Elemento: 40
Elemento: 50
Elemento: 60
Elemento: 70
Total de Elementos: 4
Mtodo Descrio
Count Retorna o nmero de elementos da pilha
Clear Remove todos os objetos da pilha
Clone Create uma copia da pilha
Contains Verifica se um elemento est na pilha
CopyTo Copia a pilha para um array 1D
Equals(Object) Determina se o objeto especificado igual ao objeto
GetType Obtm o tipo
Peek Retorna o objeto no topo da pilha sem remov-lo
Pop Remove e retorna o objeto no topo da pilha
Push Insere um objeto no topo da pilha
ToArray Copia a pilha para um novo vetor
ToString Retorna uma string que representa o objeto atual
using System;
using System.Collections;
namespace Pilha
{
class MainClass
{
public static void Main (string[] args)
93
{
Stack pilha = new Stack();
int nodo;
do {
Console.Write("Nodo: ");
String s = Console.ReadLine();
nodo = int.Parse(s);
if (nodo != 0) {
pilha.Push(nodo);
}
} while (nodo != 0);
String extenso = "";
int n = pilha.Count;
Console.WriteLine ("Nmero de Elementos: " + n);
for (int i = 0;i < n;i++ ) {
extenso = extenso + pilha.Pop () + " ";
}
Console.WriteLine("Pilha: " + extenso);
}
}
}
Resultado do Programa:
Nodo: 10
Nodo: 20
Nodo: 30
Nodo: 40
Nodo: 50
Nodo: 0
Nmero de Elementos: 5
Pilha: 50 40 30 20 10
Mtodo Descrio
Clear Remove todos os objetos da fila
Clone Create uma cpia da fila
Contains Verifica se um elemento est na fila
CopyTo Copia os elementos da fila para um vetor 1D
Dequeue Remove e retorna o objeto do incio da fila
Enqueue Adiciona um objeto no fim da fila
Equals(Object) Determine se um objeto especfico igual a um objeto da fila
GetType Obtm o tipo do elemento da fila
Peek Retorna o objeto no incio do fila sem remov-lo
ToArray Copia os elementos da fila para um vetor 1D
ToString Retura uma string que representa os objetos da fila
using System;
using System.Collections;
namespace Fila
{
class MainClass
{
94
public static void Main (string[] args)
{
Queue fila = new Queue();
int nodo;
do {
Console.Write("Nodo: ");
String s = Console.ReadLine();
nodo = int.Parse(s);
if (nodo != 0) {
fila.Enqueue(nodo);
}
} while (nodo != 0);
String extenso = "";
int n = fila.Count;
for (int i = 0;i < n;i++) {
extenso = extenso + fila.Dequeue() + " ";
}
Console.WriteLine("Fila: " + extenso);
}
}
}
Resultado do Programa:
Nodo: 10
Nodo: 20
Nodo: 30
Nodo: 40
Nodo: 50
Nodo: 0
Nmero de Elementos: 5
Fila: 10 20 30 40 50
Mtodo Descrio
Close Fecha o arquivo
Equals(Object) Verifica se o arquivo igual ao arquivo especificado
Peek Retorna o prximo caracter disponvel
L o prximo caracter de fluxo de entrada e avana a posio do por
Read()
um caracter, ou seja, acesso sequencial
Read(Char[], Int32, L o mximo especificado de caracteres de fluxo atual em um buffer,
Int32) comeando no ndice especificado
L o nmero mximo especificado de caracteres de fluxo atual e grava
ReadBlock
os dados de um buffer, comeando no ndice especificado
L uma linha de caracteres e retorna os dados como uma cadeia de
ReadLine
caracteres
ToString Retorna uma string que representa o objeto atual
95
Programa exemplo: O programa abre um arquivo texto e exibe o nmero de
bytes do referido arquivo.
using System;
using System.IO;
namespace File1
{
class MainClass
{
public static void Main (string[] args)
{
String path = "/Users/pluzzardi/";
Console.Write ("Nome do Arquivo Texto: ");
String nomeArquivo = Console.ReadLine ();
nomeArquivo = path + nomeArquivo;
try {
long bytes = 0;
using (StreamReader file = new StreamReader (nomeArquivo)) {
string line;
while ((line = file.ReadLine ()) != null) {
bytes = bytes + line.Length;
}
Console.WriteLine ("Arquivo: " + nomeArquivo);
Console.WriteLine ("Bytes: " + bytes);
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
}
}
Resultado do Programa:
ou
Mtodo Descrio
Close Fecha o arquivo
Dispose() Libera qualquer recurso utilizado pelo arquivo
Equals(Object) Verifica se o arquivo especificado igual ao arquivo atual
Limpa todos os buffers para o gravador atual e fora gravao em
Flush
disco
ToString Retorna uma string que representa o arquivo atual
Write(tipo_base) Grava o tipo_base no arquivo
Grava um terminador de linha para a cadeia de caracteres de texto ou
WriteLine()
para o fluxo
WriteLine(tipo_base) Grava o tipo_base no arquivo com newLine
96
// ------------------------------------------- Fonte: FileDir.cs
using System;
using System.IO;
namespace FileDir
{
public class MainClass
{
public static void Main ()
{
DirectoryInfo diretorio = new DirectoryInfo ("/Users/pluzzardi");
// --------------------------------------------------------------------- listar diretrio
DirectoryInfo[] fileDir = diretorio.GetDirectories ();
Console.WriteLine ("Lista de Diretrios: ");
foreach (DirectoryInfo dirinfo in fileDir) {
Console.WriteLine (dirinfo.Name);
}
// ---------------------------------------------------------------------- listar arquivos
Console.WriteLine ("Lista de Arquivos: ");
FileInfo[] files = diretorio.GetFiles ("*.*");
foreach (FileInfo fileinfo in files) {
Console.WriteLine (fileinfo.Name);
}
}
}
}
Resultado do Programa:
Lista de Diretrios:
.Trash
.config
.cups
.dropbox
.local
.netbeans-derby
.ssh
Desktop
Documents
Downloads
Dropbox
Library
Movies
Music
NetBeansProjects
Pictures
Projects
Public
Lista de Arquivos:
.CFUserTextEncoding
.DS_Store
.bash_history
.gbas
.viminfo
Frutas.txt
Leitura.zip
Luzzardi.txt
frutas.luz
nomes.txt
using System;
using System.IO;
namespace FileDir2
{
public class MainClass
{
public static void Main ()
97
{
Console.Write ("Pathname: ");
String pathName = Console.ReadLine ();
DirectoryInfo diretorio = new DirectoryInfo (pathName);
// --------------------------------------------------------------------- listar diretrio
DirectoryInfo[] fileDir = diretorio.GetDirectories ();
Console.WriteLine ("Lista de Diretrios: ");
foreach (DirectoryInfo dirinfo in fileDir) {
Console.WriteLine (dirinfo.Name);
}
// ---------------------------------------------------------------------- listar arquivos
Console.WriteLine ("Lista de Arquivos: ");
FileInfo[] files = diretorio.GetFiles ("*.*");
foreach (FileInfo fileinfo in files) {
Console.WriteLine (fileinfo.Name);
}
}
}
}
Resultado do Programa:
Pathname: /Users/pluzzardi
Lista de Diretrios:
.Trash
.config
.cups
.dropbox
.local
.netbeans-derby
.ssh
Desktop
Documents
Downloads
Dropbox
Library
Movies
Music
NetBeansProjects
Pictures
Projects
Public
Lista de Arquivos:
.CFUserTextEncoding
.DS_Store
.bash_history
.gbas
.viminfo
Frutas.txt
Leitura.zip
Luzzardi.txt
frutas.luz
nomes.txt
5 <enter>
carambola
beringela
abacate
ervilha
damasco
98
using System;
using System.IO;
namespace FileWrite
{
class MainClass
{
public static void Main (string[] args)
{
String line;
String path = "/Users/pluzzardi/";
String nomeArquivo = "palavras.dat";
nomeArquivo = path + nomeArquivo;
if (!File.Exists (nomeArquivo)) {
try {
using (StreamWriter file = new StreamWriter (nomeArquivo)) {
Console.Write ("Nmero de palavras: ");
String s = Console.ReadLine ();
int numeroPalavras = int.Parse (s);
file.WriteLine(s);
for (int i = 1; i <= numeroPalavras; i++) {
Console.Write ("Palavra: ");
line = Console.ReadLine ();
file.WriteLine (line);
}
file.Close();
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
} else {
Console.WriteLine ("Erro: Arquivo j existe");
}
}
}
}
Resultado do Programa:
Arquivo gerado:
5
carambola
beringela
abacate
ervilha
damasco
using System;
using System.IO;
namespace FileRead
{
class MainClass
{
public static void Main (string[] args)
{
String path = "/Users/pluzzardi/";
String nomeArquivo = "palavras.dat";
nomeArquivo = path + nomeArquivo;
try {
99
using (StreamReader file = new StreamReader (nomeArquivo)) {
string line;
while ((line = file.ReadLine ()) != null) {
Console.WriteLine(line);
}
file.Close();
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
}
}
Resultado do Programa:
5
carambola
beringela
abacate
ervilha
damasco
using System;
using System.IO;
namespace FileConsulta
{
class MainClass
{
public static void Main (string[] args)
{
int numeroLinhas;
String path = "/Users/pluzzardi/";
String nomeArquivo = "palavras.dat";
nomeArquivo = path + nomeArquivo;
try {
using (StreamReader file = new StreamReader (nomeArquivo)) {
numeroLinhas = System.IO.File.ReadAllLines(nomeArquivo).Length;
Console.WriteLine("Nmero de Linhas: " + numeroLinhas);
String [] linhas = new String[numeroLinhas];
string line;
int n = 0;
while ((line = file.ReadLine ()) != null) {
linhas[n] = line;
n++;
}
file.Close();
int posicao;
do {
Console.Write("Posio da Linha [1.." + numeroLinhas + "]: ");
String s = Console.ReadLine();
posicao = int.Parse(s);
if (posicao >= 1 && posicao <= numeroLinhas) {
Console.WriteLine("Linha: " + linhas[posicao - 1]);
} else {
Console.WriteLine("Erro: Posio Invlida");
}
} while (posicao != 0);
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
100
}
}
Resultado do Programa:
Nmero de Linhas: 6
Posio da Linha [1..6]: 1
Linha: 5
Posio da Linha [1..6]: 2
Linha: carambola
Posio da Linha [1..6]: 3
Linha: beringela
Posio da Linha [1..6]: 4
Linha: abacate
Posio da Linha [1..6]: 5
Linha: ervilha
Posio da Linha [1..6]: 6
Linha: damasco
Posio da Linha [1..6]: 7
Erro: Posio Invlida
Posio da Linha [1..6]: 0
Erro: Posio Invlida
15
abacaxi
abacate
banana
pitanga
goiaba
morango
carambola
kiwi
laranja
bergamota
tomate
uva
caqui
lima
jaca
using System;
using System.IO;
namespace Leitura
{
class MainClass
{
public static void Main (string[] args)
{
int numeroLinhas;
String path = "/Users/pluzzardi/";
String nomeArquivo = "frutas.txt";
nomeArquivo = path + nomeArquivo;
try {
using (StreamReader file = new StreamReader (nomeArquivo)) {
numeroLinhas = System.IO.File.ReadAllLines(nomeArquivo).Length;
Console.WriteLine("Nmero de Linhas: " + numeroLinhas);
String [] linhas = new String[numeroLinhas];
string line;
int n = 0;
while ((line = file.ReadLine ()) != null) {
linhas[n] = line;
Console.WriteLine(line);
101
n++;
}
file.Close();
Random rnd = new Random ();
int numeroSorteado = rnd.Next (numeroLinhas);
Console.WriteLine("Palavra Sorteada: " + linhas[numeroSorteado]);
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
}
}
Resultado do Programa:
Total de palavras: 15
Palavra: abacaxi
Palavra: abacate
Palavra: banana
Palavra: pitanga
Palavra: goiaba
Palavra: morango
Palavra: carambola
Palavra: kiwi
Palavra: laranja
Palavra: bergamota
Palavra: tomate
Palavra: uva
Palavra: caqui
Palavra: lima
Palavra: jaca
Palavra Sorteada: bergamota
using System;
using System.IO;
using System.Text;
namespace Acesso
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Nome do arquivo texto: ");
string path = Console.ReadLine ();
if (File.Exists (path)) {
using (FileStream arq = File.OpenRead (path)) {
byte[] line = new byte[1024];
while (arq.Read (line, 0, line.Length) > 0) {
int i = 0;
while (line [i] != 10) {
Console.Write ((char)line [i]);
i++;
if (line [i] == 13) {
Console.WriteLine ();
}
}
}
arq.Close ();
}
} else {
Console.WriteLine ("Erro: Problema no Arquivo");
}
}
}
}
102
Resultado do Programa:
using System;
using System.IO;
namespace Bytes
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Nome do Arquivo Texto: ");
String nomeArquivo = Console.ReadLine ();
try {
using (StreamReader file = new StreamReader (nomeArquivo)) {
long linhas = System.IO.File.ReadAllLines(nomeArquivo).Length;
long bytes = 0;
string line;
while ((line = file.ReadLine ()) != null) {
bytes += line.Length;
}
file.Close();
Console.WriteLine(linhas + " Linhas(s)");
Console.WriteLine(bytes + " Byte(s)");
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
}
}
Resultado do Programa:
103
using System;
using System.IO;
namespace Listar
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Nome do Arquivo Texto: ");
String nomeArquivo = Console.ReadLine ();
try {
using (StreamReader file = new StreamReader (nomeArquivo)) {
long linhas = System.IO.File.ReadAllLines(nomeArquivo).Length;
long bytes = 0;
string line;
while ((line = file.ReadLine ()) != null) {
bytes += line.Length;
Console.WriteLine(line);
}
file.Close();
Console.WriteLine(linhas + " Linhas(s)");
Console.WriteLine(bytes + " Byte(s)");
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
}
}
Resultado do Programa:
using System;
using System.IO;
namespace Linha
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("Nome do Arquivo Texto: ");
String nomeArquivo = Console.ReadLine ();
Console.Write ("Nmero da Linha: ");
int numeroLinha = int.Parse (Console.ReadLine());
int linha = 1;
try {
using (StreamReader file = new StreamReader (nomeArquivo)) {
104
string line;
while ((line = file.ReadLine ()) != null) {
if (numeroLinha == linha) {
Console.WriteLine(linha + ": " + line);
}
linha++;
}
file.Close();
}
} catch (Exception e) {
Console.WriteLine ("Erro: Arquivo no existe");
Console.WriteLine (e.Message);
}
}
}
}
Resultado do Programa:
Exemplo:
ou
Exemplo:
Exemplo:
105
(20345) Bytes copiados
Exemplo:
Exemplo:
Exemplo:
ou
Exemplo:
106
Nome: Debora <enter>
Nome: Carla <enter>
Nome: Fatima <enter>
Nome: Ana <enter>
Nome: <enter>
Exemplo:
Exemplo:
Exemplo:
Exemplo:
107
Idade: 41
Sexo: MASCULINO
Nome: Renato Luis
Idade: 38
Sexo: MASCULINO
Nome: Ana Maria
Idade: 44
Sexo: FEMININO
Exemplo:
using System.IO;
using System.Text;
namespace FileSeek
{
class MainClass
{
public static void Main (string[] args)
{
int nl, linha = 1;
Console.Write ("Nome do arquivo texto: ");
string path = Console.ReadLine ();
if (File.Exists (path)) {
using (FileStream arq = File.OpenRead (path)) {
byte[] line = new byte[1024];
while (arq.Read (line, 0, line.Length) > 0) {
do {
bool existe = false;
Console.Write ("Nmero da Linha: ");
String s = Console.ReadLine ();
nl = int.Parse (s);
Console.Write (linha + ": ");
int i = 0;
while (line [i] != 10) {
if (nl == linha) {
Console.Write ((char)line [i]);
existe = true;
}
i++;
if (line [i] == 13) {
linha++;
}
}
if (!existe) {
Console.Write("Erro: Linha no existe");
}
linha = 1;
Console.WriteLine ();
} while (nl != 0);
}
// arq.Seek (0, SeekOrigin.Begin);
arq.Close ();
}
} else {
Console.WriteLine ("Erro: Problema no Arquivo");
}
108
}
}
}
Resultado do Programa:
Arquivos Texto
o StreamReader - escrever em arquivos texto
o StreamWriter - ler de arquivos texto
Arquivos Binrios
o BinaryWriter escrever em arquivos binrios
o BinaryReader ler de arquivos binrios
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
109
namespace BinaryWrite
{
class MainClass
{
public static void Main (string[] args)
{
String nome;
Console.Write ("Nome do arquivo binrio: ");
String nomeArquivo = Console.ReadLine ();
FileStream file = new FileStream (nomeArquivo, FileMode.Create);
BinaryWriter binario = new BinaryWriter (file);
do {
Console.Write ("Nome: ");
nome = Console.ReadLine ();
if ("".CompareTo (nome) != 0) {
Console.Write ("Idade: ");
String s = Console.ReadLine ();
int idade = int.Parse (s);
Console.Write ("Sexo [M/F]: ");
s = Console.ReadLine ();
char sexo = s [0];
binario.Write (nome);
binario.Write (idade);
binario.Write (sexo);
}
} while ("".CompareTo (nome) != 0);
binario.Close ();
file.Close ();
}
}
}
Resultado do Programa:
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace BinaryRead
{
class MainClass
{
public static void Main (string[] args)
{
String nome;
long bytesLidos = 0;
Console.Write ("Nome do arquivo binrio: ");
String nomeArquivo = Console.ReadLine ();
if (File.Exists (nomeArquivo)) {
FileStream file = new FileStream (nomeArquivo, FileMode.Open);
BinaryReader binario = new BinaryReader (file);
long bytes = file.Length;
Console.WriteLine ("Bytes: " + bytes);
while (bytes > 0) {
nome = binario.ReadString ();
Console.WriteLine ("Nome: " + nome);
int idade = binario.ReadInt32 ();
Console.WriteLine ("Idade: " + idade);
char sexo = binario.ReadChar ();
Console.WriteLine ("Sexo: " + sexo);
bytesLidos = nome.Length + sizeof(Int32) + sizeof(char) + 1; // clculo do nmero de bytes lidos
110
Console.WriteLine ("Bytes Lidos: " + bytesLidos);
bytes = bytes - bytesLidos;
Console.WriteLine ("Bytes: " + bytes);
}
binario.Close ();
file.Close ();
} else {
Console.WriteLine ("Erro: Arquivo no existe");
}
}
}
}
Resultado do Programa:
Exemplo:
using System;
namespace Bit
{
class MainClass
{
public static void Main (string[] args)
{
int a = 128, b, c; // a = 128 - binrio -> 10000000
111
Console.WriteLine("c = {0}",c);
}
}
}
Resultado do Programa:
A = 128
b = 64
c = 128
Exemplo:
E - Entrada de Dados
S - Sada de Dados
112
Figura 4: Representao de uma fila e uma pilha
Entrada: 1, 2 e 3 Entrada: 1, 2 e 3
Sada: 3, 2 e 1 Sada: 1, 2 e 3
using System;
namespace Linear
{
class MainClass
{
const int SUCESSO = 0;
const int LISTA_CHEIA = 1;
const int LISTA_VAZIA = 2;
// -------------------------------------------------- criaLista
static void criaLista (int[] v)
{
v [0] = 0; // armazena o nmero de elementos da lista
}
// -------------------------------------------------- incluiFim
static int incluiFim (int m, int[] v, int valor)
{
int n = v [0];
if (n < m - 1) {
v [0]++;
v [v [0]] = valor;
return(SUCESSO);
} else
return(LISTA_CHEIA);
}
// -------------------------------------------------- exibeLista
static void exibeLista (int[] v)
{
String s = "";
int n = v [0];
113
if (n == 0)
Console.WriteLine ("Erro: Lista Vazia");
else {
for (int i = 1; i <= n; i++)
s = s + v [i] + " ";
Console.WriteLine ("Lista: " + s);
}
}
criaLista (v);
do {
Console.Write ("Elemento: ");
String s = Console.ReadLine();
valor = int.Parse (s);
if (valor != 0)
erro = incluiFim (m, v, valor);
if (erro == LISTA_CHEIA) {
Console.WriteLine("Erro: Lista Cheia");
exibeLista (v);
return;
}
} while (valor != 0);
exibeLista (v);
}
}
}
Resultado do Programa:
Elemento: 10
Elemento: 20
Elemento: 30
Elemento: 40
Elemento: 50
Elemento: 0
Lista: 10 20 30 40 50
using System;
namespace Linear2
{
class MainClass
{
const int SUCESSO = 0;
const int LISTA_CHEIA = 1;
const int LISTA_VAZIA = 2;
// -------------------------------------------------- criaLista
static void criaLista (int[] v)
{
v [0] = 0; // armazena o nmero de elementos
}
// -------------------------------------------------- incluiFim
static int incluiFim (int m, int[] v, int valor)
{
int n = v [0];
if (n < m - 1) {
v [0]++;
v [v [0]] = valor;
114
return(SUCESSO);
} else
return(LISTA_CHEIA);
}
// -------------------------------------------------- incluiInic
static int incluiInic (int m, int[] v, int valor)
{
int n = v [0];
if (n < m - 1) {
v [0]++;
for (int i = n + 1; i >= 2; i--)
v [i] = v [i - 1];
v [1] = valor;
return(SUCESSO);
} else
return(LISTA_CHEIA);
}
// -------------------------------------------------- incluiPos
static int incluiPos (int m, int[] v, int valor, int pos)
{
int n = v [0];
if (n < m - 1) {
v [0]++;
if (pos == v [0] - 1) {
v [v [0]] = v [n];
v [n] = valor;
} else {
for (int i = n + 1; i >= pos; i--) {
v [i] = v [i - 1];
Console.WriteLine ("Valor: " + v [i]);
}
v [pos] = valor;
}
return(SUCESSO);
} else
return(LISTA_CHEIA);
}
// -------------------------------------------------- tamanhoLista
static int tamanhoLista (int[] v)
{
return(v [0]);
}
// -------------------------------------------------- exibeLista
static void exibeLista (int[] v)
{
String s = "";
int n = v [0];
if (n == 0) {
Console.WriteLine ("Erro: Lista Vazia");
} else {
for (int i = 1; i <= n; i++)
s = s + v [i] + " ";
Console.WriteLine ("Lista: " + s);
}
}
criaLista (v);
do {
Console.Write ("Elemento [0 - sair]: ");
String s = Console.ReadLine ();
valor = int.Parse (s);
if (valor != 0) {
Console.Write ("[I]inicio, [P]osio ou [F]im: ");
s = Console.ReadLine();
char op = s [0];
switch (op) {
115
case 'I':
case 'i':
erro = incluiInic (m, v, valor);
break;
case 'P':
case 'p':
n = tamanhoLista (v);
do {
Console.Write ("Posio [1.." + n + "]: ");
s = Console.ReadLine ();
pos = int.Parse (s);
} while (pos < 1 && pos > n);
erro = incluiPos (m, v, valor, pos);
break;
case 'F':
case 'f':
erro = incluiFim (m, v, valor);
break;
}
if (erro == LISTA_CHEIA) {
Console.WriteLine ("Erro: Lista Cheia");
exibeLista (v);
return;
}
}
} while (valor != 0);
exibeLista (v);
}
}
}
Resultado do Programa:
Elemento [0 - sair]: 10
[I]inicio, [P]osio ou [F]im: i
Elemento [0 - sair]: 20
[I]inicio, [P]osio ou [F]im: f
Elemento [0 - sair]: 40
[I]inicio, [P]osio ou [F]im: f
Elemento [0 - sair]: 30
[I]inicio, [P]osio ou [F]im: p
Posio [1..3]: 3
Elemento [0 - sair]: 0
Lista: 10 20 30 40
using System;
namespace TestaPilha
{
class MainClass
{
public static void Main (string[] args)
{
Pilha pilha = new Pilha(5);
int nodo;
do {
Console.Write("Elemento: ");
String s = Console.ReadLine();
nodo = int.Parse(s);
116
if (nodo != 0)
pilha.push(nodo);
} while (nodo != 0);
pilha.exibe();
}
}
}
using System;
namespace TestaPilha
{
public class Pilha
{
private int topo;
private int [] dados;
// ----------------------------------------------- construtor
// ------------------------------------------------ push
// ------------------------------------------------ pop
// ------------------------------------------------ exibe
Resultado do Programa:
Elemento: 10
Elemento: 20
Elemento: 30
Elemento: 40
Elemento: 50
Elemento: 60
Erro: Pilha Cheia
Elemento: 0
Pilha: 50 40 30 20 10
117
16.3 Implementao de uma Fila em C#
using System;
namespace TestaFila
{
class MainClass
{
public static void Main (string[] args)
{
Fila fila = new Fila (5);
int nodo;
do {
Console.Write ("Elemento: ");
String s = Console.ReadLine ();
nodo = int.Parse (s);
if (nodo != 0)
fila.insereFila (nodo);
} while (nodo != 0);
nodo = fila.retiraFila ();
if (nodo == 0) {
Console.WriteLine ("Fila: Vazia");
} else {
String nodos = "";
while (nodo != 0) {
nodos = nodos + nodo + " ";
nodo = fila.retiraFila ();
}
Console.WriteLine ("Fila: " + nodos);
}
}
}
}
using System;
namespace TestaFila
{
public class Fila
{
private int inic, fim, n;
private int [] dados;
// ---------------------------------------- construtor
// ------------------------------------------------ insereFila
if (n < max) {
dados[fim] = i;
fim++;
n++;
118
}
else
Console.WriteLine("Erro: Fila Cheia");
}
// ------------------------------------------------ retiraFila
Resultado do Programa:
Elemento: 10
Elemento: 20
Elemento: 30
Elemento: 40
Elemento: 50
Elemento: 60
Erro: Fila Cheia
Elemento: 0
Fila: 10 20 30 40 50
using System;
namespace Circular
{
class MainClass
{
public static void Main (string[] args)
{
FilaCircular fila = new FilaCircular(5);
int valor;
char ch;
do {
Console.Write("[I]ncluir, [E]xcluir ou [F]im? ");
do {
String s = Console.ReadLine();
ch = s[0];
} while (ch != 'I' && ch != 'i' && ch != 'E' && ch != 'e' &&
ch != 'F' && ch != 'f');
119
switch (ch) {
case 'I':
case 'i': Console.Write("Valor: ");
String s = Console.ReadLine();
valor = int.Parse(s);
fila.insereFilaCircular(valor);
break;
case 'E':
case 'e': valor = fila.excluiFilaCircular();
Console.WriteLine("Elemento Retirado da Fila: " + valor);
break;
}
} while (ch != 'F' && ch != 'f');
fila.exibeFilaCircular();
}
}
}
using System;
namespace Circular
{
public class FilaCircular
{
private int primeiro, ultimo, tamanho;
private int [] elem;
// ------------------------------------ insereFilaCircular
if (tamanho == n) {
Console.WriteLine("ERRO: Fila Cheia");
}
else {
tamanho++;
ultimo = (ultimo + 1) % n;
elem[ultimo] = dado;
}
}
// ----------------------------------- excluiFilaCircular
if (tamanho == 0) {
Console.WriteLine("ERRO: Fila Vazia");
return(-1);
}
else {
tamanho--;
int temp = primeiro;
primeiro = (primeiro + 1) % n;
return(elem[temp]);
}
}
// -------------------------------- exibeFilaCircular
if (tamanho == 0) {
Console.WriteLine("Fila Circular: Fila Vazia");
}
120
else {
int temp = primeiro;
Console.Write("Fila Circular: ");
for (int i = 1;i <= tamanho;i++) {
Console.Write(elem[temp] + " ");
temp = (temp + 1) % n;
}
Console.WriteLine();
}
}
}
}
Resultado do Programa:
121
O tratamento de erros em C# basea-se em:
Sintaxe:
try {
// cdigo fonte normal
return;
} finally { // opcional
// cdigo executado, mesmo tendo excesso
}
using System;
namespace Inteiro
{
class MainClass
{
public static void Main (string[] args)
{
int inteiro = -999;
122
try {
Console.Write ("Inteiro: "); // cdigo protegido contra erro
String s = Console.ReadLine ();
inteiro = int.Parse (s);
return;
} catch (FormatException error) {
// error.printStackTrace(); // mostra as linhas do erro
Console.WriteLine ("ERRO: " + error); // exibe o erro
} finally { // OPCIONAL
Console.WriteLine ("INTEIRO: " + inteiro); // executa depois do catch
}
}
}
}
Inteiro: 120
INTEIRO: 120
Inteiro: abc
ERRO: System.FormatException: Input string was not in the correct format
at System.Int32.Parse (System.String s) [0x00000] in <filename unknown>:0
at Inteiro.MainClass.Main (System.String[] args) [0x00019] in
/Users/pluzzardi/Projects/Inteiro/Inteiro/Program.cs:14
INTEIRO: -999
using System;
namespace DivideZero
{
class MainClass
{
public static void Main (string[] args)
{
float x, y, div = -999;
try {
Console.Write ("Dividendo: ");
String s = Console.ReadLine ();
x = float.Parse (s);
Console.Write ("Divisor: ");
s = Console.ReadLine ();
y = float.Parse (s);
div = x / y;
Console.WriteLine ("Diviso: " + div);
} catch (FormatException error) {
Console.WriteLine ("Status: " + error);
Console.WriteLine ("Diviso: " + div);
} catch (ArithmeticException error) { // no funcionou
Console.WriteLine ("Status: " + error);
Console.WriteLine ("Diviso: " + div);
}
}
}
}
123
Resultado do Programa (sem erro): [usurio digitou 3 + 0]
Dividendo: 3
Divisor: 0
Divisao: +Infinity
18. Herana em C#
Especificadores de acesso:
public (pblico)
private (privado)
protected (protegido)
124
A inteno dar acesso aos programadores que estendero sua
classe.
using System;
namespace Heranca
{
class MainClass
{
public static void Main (string[] args)
{
Derivada objeto = new Derivada(3);
int resp;
objeto.Seta(1, 2);
resp = objeto.Soma();
Console.WriteLine("Somador (x + y + z): " + objeto.Somador(resp));
}
}
}
125
using System;
namespace Heranca
{
public class Base
{
private int x, y; // atributos privados
public Base ()
{
}
public void Seta(int a, int b)
{
x = a;
y = b;
Console.WriteLine("x = " + x);
Console.WriteLine("y = " + y);
}
using System;
namespace Heranca
{
public class Derivada : Base
{
private int z;
Resultado do Programa:
z = 3
x = 1
y = 2
Soma (x + y): 3
Somador (x + y + z): 6
126
Programa exemplo: O objetivo do programa demonstrar a utilizao de
herana simples (atributos da classe base so protegidos).
using System;
namespace Heranca1
{
class MainClass
{
public static void Main (string[] args)
{
Derivada objeto = new Derivada(3);
int resp;
objeto.Seta(1, 2);
resp = objeto.Soma();
Console.WriteLine("Somador (x + y + z): " + objeto.Somador(resp));
}
}
}
using System;
namespace Heranca1
{
public class Base
{
protected int x, y; // atributos protegidos
public Base() {
}
using System;
namespace Heranca1
{
public class Derivada : Base
{
private int z;
Resultado do Programa:
127
z = 3
x = 1
y = 2
Soma (x + y): 3
Somador (x + y + z): 6
using System;
namespace TestaHeranca
{
class MainClass
{
public static void Main (string[] args)
{
Cliente cliente = new Cliente("Paulo Roberto", "123.456-78", 1234.56);
cliente.imprimePessoa();
cliente.imprimeCliente();
}
}
}
// ----------------------------------------------------------------------- Pessoa.cs
using System;
namespace TestaHeranca
{
public class Pessoa
{
protected String nome;
protected String cpf;
public Pessoa() {
this.nome = "xxxx";
this.cpf = "xxx.xxx.xxx-xx";
}
// ----------------------------------------------------------------------- Cliente.cs
using System;
namespace TestaHeranca
{
public class Cliente : Pessoa
{
private double conta;
128
public void imprimeCliente ()
{
Console.WriteLine ("Conta: " + conta);
}
}
}
Nome: xxxx
CPF: xxx.xxx.xxx-xx
Conta: 1234.56
// -------------------------------------------------------------- Pessoa.cs
using System;
namespace TestaSexo
{
public class Pessoa
{
protected double altura;
protected char sexo;
public Pessoa() {
this.altura = 0.0;
this.sexo = 'g';
}
Pessoa
altura
sexo
imprimePessoa
Homem
pesoIdeal
calculaPesoIdealHomem
imprimePesoIdealHomem
129
Mulher
pesoIdeal
calculaPesoIdealMulher
imprimePesoIdealMulher
// ------------------------------------------------------------- TestaSexo.cs
using System;
namespace TestaSexo
{
class MainClass
{
public static void Main (string[] args)
{
Homem homem = new Homem(1.64, 'm');
Mulher mulher = new Mulher(1.59, 'f');
homem.calculaPesoIdealHomem();
homem.imprimePessoa();
homem.imprimePesoIdealHomem();
mulher.calculaPesoIdealMulher();
mulher.imprimePessoa();
mulher.imprimePesoIdealMulher();
}
}
}
Resultado do Programa:
Altura: 1,64
Sexo: m
Peso Ideal (Homem): : 61,228
Altura: 1,59
Sexo: f
Peso Ideal (Mulher): : 54,039
// ----------------------------------------------------------- TestaObjetos.cs
using System;
namespace TestaObjetos
{
class MainClass
{
public static void Main (string[] args)
{
Linha linha = new Linha(1, 2, 3, 4);
Retangulo retangulo = new Retangulo(1, 2, 3, 4);
Console.WriteLine("Linha: ");
linha.imprimeLinha();
Console.WriteLine("Retngulo: ");
retangulo.imprimeRetangulo();
}
}
}
// ------------------------------------------------------------- Objeto.cs
using System;
namespace TestaObjetos
{
public class Objeto
{
protected int x;
protected int y;
130
public Objeto() {
x = 0;
y = 0;
}
// ----------------------------------------------------------------- Linha.cs
using System;
namespace TestaObjetos
{
public class Linha
{
private Objeto p1;
private Objeto p2;
public Linha (int xi, int yi, int xf, int yf) {
p1 = new Objeto(xi, yi);
p2 = new Objeto(xf, yf);
}
Resultado do Programa:
Linha:
x = 1 - y = 2
x = 3 - y = 4
Retngulo:
x = 1 - y = 2
x = 3 - y = 2
x = 3 - y = 4
x = 1 - y = 4
131
19. Coletor de Lixo (Garbage Collector) em C#
O C# possui um coletor de lixo automtico, mas pode-se cham-lo
implicitamente atravs do mtodo: GC.Collect. Veja no exemplo abaixo:
using System;
namespace HerancaColetor
{
class MainClass
{
public static void Main (string[] args)
{
Derivada objeto = new Derivada(3);
int resp;
objeto.Seta(1, 2);
resp = objeto.Soma();
Console.WriteLine("Somador (x + y + z): " + objeto.Somador(resp));
objeto = null; // marca para coletor de lixo
GC.Collect(); // chamada do coletor de lixo
Console.WriteLine("Somador (x + y + z): " + objeto.Somador(resp));
}
}
}
using System;
namespace HerancaColetor
{
public class Base
{
protected int x, y; // atributos protegidos
public Base ()
{
}
132
}
}
using System;
namespace HerancaColetor
{
public class Derivada : Base
{
private int z;
public Derivada(int x) {
z = x;
Console.WriteLine("z = " + z);
}
Resultado do Programa:
z = 3
x = 1
y = 2
Soma (x + y): 3
Somador (x + y + z): 6
Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
at HerancaColetor.MainClass.Main (System.String[] args) [0x00040] in
/Users/pluzzardi/Projects/HerancaColetor/HerancaColetor/Program.cs:17
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not
set to an instance of an object
at HerancaColetor.MainClass.Main (System.String[] args) [0x00040] in
/Users/pluzzardi/Projects/HerancaColetor/HerancaColetor/Program.cs:17
Sintaxe: ~nome_construtor {}
using System;
namespace Finalizador
{
public class Base
{
// atributos protegidos
protected int x, y;
public Base ()
{
}
133
{
x = a;
y = b;
Console.WriteLine ("x = " + x);
Console.WriteLine ("y = " + y);
}
using System;
namespace Finalizador
{
public class Derivada : Base
{
private int z;
~ Derivada () // destrutor
{
Console.WriteLine ("Finalizador: Final do programa");
}
}
}
using System;
namespace Finalizador
{
class MainClass
{
public static void Main (string[] args)
{
Derivada objeto = new Derivada (3);
int resp;
Resultado do Programa:
z = 3
x = 1
y = 2
Soma (x + y): 3
Somador (x + y + z): 6
Finalizador: Final do programa
134
21. Data e Hora em C#
Em C# possvel verificar a data e hora da mquina. Abaixo
visto vrias formas de imprimir na tela a data e horrio.
using System;
namespace Data
{
class MainClass
{
public static void Main (string[] args)
{
DateTime data = DateTime.Now;
// ---------------------------------------------------------------- data
Console.WriteLine (data.ToShortDateString ());
Console.WriteLine(data.ToLongDateString());
// ---------------------------------------------------------------- tempo
Console.WriteLine (data.ToShortTimeString ());
Console.WriteLine(data.ToLongTimeString());
}
}
}
Resultado do Programa:
27/11/2013
quarta-feira, 27 de novembro de 2013
22:32
22:32:27
using System;
namespace EntradaDados
{
class MainClass
{
static String retiraLetras (String s)
{
string t;
if (s [0] == '-') {
t = "-";
} else {
t = "";
}
int n = s.Length;
for (int i = 0; i < n; i++) {
if (s [i] >= '0' && s [i] <= '9') {
t = t + s [i];
}
}
return(t);
}
135
public static void Main (string[] args)
{
// entrada do usurio lida e armazenada em uma String
Console.Write ("Digite um nmero: ");
String s = Console.ReadLine ();
// mtodo replace elimina todos os caracteres que no so nmeros ou -
s = retiraLetras (s);
Console.WriteLine ("s = " + s);
if ("".CompareTo (s) == 0) {
Console.WriteLine ("ERRO: Problema na Converso para Inteiro");
} else {
// converso pode ser feita sem problemas, pois a String s no possui letras
int numero = int.Parse (s);
Console.WriteLine ("Nmero: " + numero);
}
}
}
}
136