Prévia do material em texto
Introdução à Linguagem C# Histórico Operadores Professora: Juliana Santiago Teixeira C# - Definição ● É uma linguagem de programação visual dirigida por eventos e totalmente orientada a objetos, na qual os programas são criados usando-se um IDE (Integrated Development Environment). ● A linguagem C# foi criada pela Microsoft junto com a arquitetura .NET. Embora existam várias outras linguagens que suportam essa tecnologia (como VB.NET, C++, JAVA), C# é considerada a linguagem símbolo do .NET, devido as funcionalidades da plataforma .NET terem sido desenvolvidas em C#. C# - Definição ● A linguagem C# (Sharp) foi influenciada das linguagens C++ e Java que ganhou popularidade na comunidade de informática quando a Microsoft decidiu incluí-la no pacote Visual Studio. ● Utiliza muitas regras de programação para reduzir a possibilidade de erros. ● C# também tem como objetivo permitir o desenvolvimento de qualquer tipo de aplicação: Web service, aplicação Windows convencional, aplicações para serem executadas num palmtop ou handheld, aplicações para Internet etc. C# - Caracteristicas ● Simples, fácil e poderosa; ● Fortemente tipada; ● Case Sensitive ○ diferencia maiúsculas de minúsculas ● Trabalha em ambiente gerenciado ○ O programador não precisa se preocupar, por exemplo, com liberação e alocação de memória isso é feito de forma automática. Linguagem Linguagem Sintaxe Semâtica Código Exemplo Tipos primitivos Tipos primitivos Exemplos: char ‘1’, ‘a’, ‘$’ int -56, 0, 1, 1234 float -23.5, 0.0, 1.0, 3.1415, 1234.0 double Idem float void Sem valor Identificadores • Identificadores definem os nomes de variáveis, funções e vários outros objetos definidos pelo usuário. Identificadores podem variar de um a vários caracteres, o primeiro caractere deve ser uma letra ou um sublinhado e os caracteres seguintes devem ser letras, números ou sublinhados. • Letras maiúsculas e minúsculas são tratadas diferentemente. • Um identificador não pode ser igual a uma palavra-chave de C#. Identificadores Identificadores válidos • Nota, nota, idade, x1, media, fgts, nome, salario, nome_aluno Identificadores inválidos • 5X, e(13), A:B, Nota/2, !x, nome aluno, salário Variáveis • Uma variável é uma posição de memória, com um nome, que é usada para guardar um valor que pode ser modificado pelo programa • Uma variável pode ter seu valor alterado durante a execução do algoritmo • Todas as variáveis em C# devem ser declaradas antes de serem usadas Variáveis • A forma geral de uma declaração é: tipo lista_de_variáveis; onde tipo é um tipo de dado válido em C#. lista_de_variáveis pode consistir em um ou mais nomes de identificadores separados por vírgulas. Variáveis Exemplos: char letra, nome[50]; int idade, x, y; float peso, altura, media; Inicialização de variáveis • Você pode dar à maioria das variáveis em C# um valor, no mesmo momento em que elas são declaradas • A forma geral de uma inicialização é: tipo nome_da_variável = valor; Exemplo: int x = 0; Constantes • Constantes referem-se a valores fixos que o programa não pode alterar • Constantes em C# podem ser de qualquer um dos cinco tipos de dados básicos • A forma geral de uma declaração de constante é: const tipo nome_da_constante = valor; Exemplo: const float pi = 3.1415; Operador de atribuição • Em C#, você pode usar o operador de atribuição dentro de qualquer expressão válida de C#. • A forma geral do comando de atribuição é: nome_da_variável = expressão; onde expressão pode ser tão simples como uma única constante ou tão complexa quanto você necessite. Operador de atribuição Exemplo: int a, b, c; a = 5; // variável recebe um valor constante b = a; // variável recebe uma variável c = a + b – 2; // variável recebe uma expressão aritmética Atribuições múltiplas • C# permite a atribuição do mesmo valor a muitas variáveis usando atribuições múltiplas em um único comando: x = y = z = 0; Operadores aritméticos Operador Ação - Subtração, também menos unário + Adição * Multiplicação / Divisão % Resto da divisão inteira ++ Incremento -- Decremento Operador de atribuição Exemplo: int a, b, c; a = 5; b = a; c = a + b – 2; a++; // a = a + 1; b--; // b = b – 1; c = a + b; Operadores aritméticos • A precedência dos operadores aritméticos é a seguinte: Mais alta Parênteses e funções ++ -- - (menos unário) * / % Mais baixa + - Expressões aritméticas Linearização de Expressões • Para escrever programas todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas em linhas. • É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para a computacional. Expressões aritméticas Linearização de Expressões 135 3 2 (2/3+(5-3))+1= Expressão matemática tradicional Expressão computacional Operadores relacionais Operador Ação Exemplos == Igual a 3 == 3, x == y != Diferente de 5 != 4, x != y > Maior que 3 > 6, x > y >= Maior ou igual a 5>= 3, x >= y < Menor que 3 < 5, x < y <= Menor ou igual a 8 <= 9, x <= y Operadores lógicos Operador Ação ! Não && E || Ou Operadores lógicos • A precedência dos operadores lógicos é a seguinte: Mais alta ! && Mais baixa || Entrada e saída de Dados Professora: Juliana Santiago Teixeira ENTRADA E SAÍDA DE DADOS Programa Entrada 1 Entrada 2 ... Entrada n Saída 1 Saída 2 ... Saída m FUNÇÕES DE ENTRADA E SAÍDA DE DADOS Programa Número 1 Número 2 Soma Classe Console • Representa os fluxos de entrada, saída e erro padrão para aplicativos de console. Essa classe não pode ser herdada. Saída de Dados via Classe Console ● Método Console.Write ○ Grava a representação de texto do valor especificado ou valores para o fluxo de saída padrão. Saída de Dados via Classe Console ● Método Console.WriteLine ○ Grava a representação de texto do valor especificado ou valores para o fluxo de saída padrão e avança o cursor para a próxima linha. Entrada de Dados via Classe Console ● Método Console.ReadLine ○ Lê a próxima linha de caracteres do fluxo de entrada padrão. Conversão de Tipos ● Método double.Parse (String) ○ Converte a representação da cadeia de caracteres de um número no equivalente do número de ponto flutuante de precisão dupla. Estrutura Sequencial Professora: Juliana Santiago Teixeira ESTRUTURA SEQUENCIAL É uma estrutura de controle básica, em que os comandos em um programa (função) são executados um após o outro (na ordem em que são especificados). A estrutura sequencial mais básica consiste de: • Entrada de dados • Processamento • Saída de dados ESTRUTURA CONDICIONAL Professora: Juliana Santiago Teixeira Até o momento todas as instruções do programa são executadas (estrutura sequencial). Algumas instruções dependem de condições. Nem sempre todas as instruções são executadas. Necessidade de tomada de decisão pelos programas. MOTIVAÇÃO A estrutura condicional permite determinar qual é a ação a ser tomada com base no resultado de um teste lógico. A estrutura condicional pode ser formada por uma alternativa simples ou composta. ESTRUTURA CONDICIONAL Se o valor da condição for VERDADEIRO, os comandos que estão dentro do bloco if são executados. Caso contrário, o bloco if será ignorado. ESTRUTURA CONDICIONAL SIMPLES if (condição) { C1; C2; ... Cn; } VERDADEIRO onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n if (condição) { C1; C2; ... Cn; } VERDADEIRO onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n FALSO Exemplo: Elabore um algoritmo para ler dois números reais, se o valor de segundo número informado for diferente de zero, calcular e imprimir o resultado da divisão. ESTRUTURA CONDICIONAL SIMPLES ESTRUTURA CONDICIONAL COMPOSTA Se o valor da condição for VERDADEIRO os comandosque estão no bloco do if serão executados. Se o valor da condição for FALSO, os comandos que estão no bloco do else serão executados. if (condição) { α1; α2; ... αn; } else { β1; β2; ... βm; } onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso αis são comandos, 1 ≤ i ≤ n βjs são comandos, 1 ≤ j ≤ m VERDADEIRO if (condição) { α1; α2; ... αn; } else { β1; β2; ... βm; } onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso αis são comandos, 1 ≤ i ≤ n βjs são comandos, 1 ≤ j ≤ m VERDADEIRO FALSO ESTRUTURA CONDICIONAL ANINHADA if (cond1) cmd1; else if (cond2) cmd2; else if (cond3) cmd3; ... if (condn) cmdn; else cmdn+1; ESTRUTURA DE MÚLTIPLA ESCOLHA switch (x) { case v1: cmd1; cmd2; break; case v2: cmd3; break; ... case vn: cmdm-1; break; default: cmdm; } onde x é qualquer expressão do tipo char ou int vis são constantes inteiras, 1 ≤ i ≤ n cmdjs são comandos, 1 ≤ j ≤ m ESTRUTURAS DE REPETIÇÃO Professora: Juliana Santiago Teixeira A estrutura de repetição permite que um conjunto de instruções seja executado mais de uma vez. É útil sempre que uma ou mais instruções (comandos) devem ser repetidas enquanto uma certa condição estiver sendo satisfeita. Também são conhecidos como laços ou loops ou estruturas de iteração. MOTIVAÇÃO Três tipos de estruturas de repetição: while do .. while for(...) ESTRUTURAS DE REPETIÇÃO Estrutura de repetição com teste lógico no início. Os comandos que estão dentro dessa estrutura de repetição serão executados enquanto o valor da condição for verdadeiro LAÇO while while (condição) { C1; C2; ... Cn; } VERDADEIRO onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n while (condição) { C1; C2; ... Cn; } VERDADEIRO onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n FALSO Estrutura de repetição com teste lógico no final. Isso significa que um laço do .. while sempre será executado ao menos uma vez. O laço do .. while repete até que a condição se torne falsa. LAÇO do .. while do { C1; C2; ... Cn; } while (condição); VERDADEIRO onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n do { C1; C2; ... Cn; } while (condição); VERDADEIRO onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n do { C1; C2; ... Cn; } while (condição); onde condição é qualquer expressão cujo resultado seja verdadeiro ou falso Cis são comandos, 1 ≤ i ≤ n FALSO Estrutura de repetição que deve ser utilizada quando sabemos o número de vezes que determinado conjunto de instruções será executado LAÇO for for (inicialização; condição; incremento) { C1; C2; ... Cn; } onde inicialização é valor inicial que é atribuído à variável de controle do laço condição é qualquer expressão cujo resultado seja verdadeiro ou falso incremento é a forma como a variável de controle do laço será atualizada em cada iteração Cis são comandos, 1 ≤ i ≤ n VETORES E MATRIZES Professora: Juliana Santiago Teixeira Vetor é um conjunto de variáveis do mesmo tipo. O compilador aloca um espaço contínuo na memória para armazenar os elementos do vetor. VETOR Exemplos: Conjunto de inteiros: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Conjunto de strings: [“José”, “Maria”, “João”, “Ana”, “Ester”] Vetor A declaração é dada assim: tipo[] nome; DECLARAÇÃO Exemplos: int []idades = new int[6]; // vetor de tamanho 6 do tipo int DECLARAÇÃO 8 0 2 1 5 2 7 3 1 4 5 6idades Exemplos: float []pesos = new float[10]; // vetor de tamanho 10 do tipo float DECLARAÇÃO 55.6 0 62.8 1 47.1 2 73.9 3 19.8 4 5 62.3pesos 19.9 6 7 89.1 48.0 8 9 25.6 Os elementos do vetor são acessados de maneira indexada. Em C#, o vetor sempre é indexado de 0 a n-1 onde n é o tamanho do vetor. MANIPULAÇÃO 0 1 2 3 4 5 vetor Índices Os elementos do vetor são acessados de maneira indexada. Em C#, o vetor sempre é indexado de 0 a n-1 onde n é o tamanho do vetor. MANIPULAÇÃO 0 1 2 3 4 5 vetor Índices vetor[4] Matematicamente: x = 3x3 Usada em álgebra linear, resolução de sistemas de equações, logística, otimização, computação gráfica etc. MATRIZ 2. 4 8 1 3 7 1 5 11 Em C# podemos ter as seguintes estruturas de matriz: 1 dimensão (Vetor/Arranjo); 2 dimensões (tamanhos iguais ou não); Multidimensionais Cada dimensão possui seu próprio índice e tamanho. DEFINIÇÃO Exemplos: DEFINIÇÃO 1 0 2 1 3 2 4 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 1 2 3 4 Matriz bidimensional DEFINIÇÃO 1 0 2 1 3 2 4 3 5 6 7 8 9 10 11 12 13 14 15 16 0 1 2 3 17 0 18 1 19 2 20 3 21 22 23 24 25 26 27 28 29 30 31 32 0 1 2 3 0 1 Matriz tridimensional A declaração de uma matriz é da seguinte forma: tipo [, , ... , ]nome_variavel = new tipo[d1, d2, ... ,dn]; onde: tipo é o tipo dos dados que serão armazenados na matriz; nome_variavel é o nome dado à variável do tipo matriz; d1 representa o tamanho da 1ª dimensão da matriz; d2 representa o tamanho da 2ª dimensão da matriz; dN representa a n-ésima dimensão da matriz. DECLARAÇÃO Exemplos: double[ , ] X = new double[2,6]; char[ , ] MAT = new char[4,3]; Assim como nos vetores, todos os índices das matrizes iniciam em zero DECLARAÇÃO 0 1 2 0 1 2 3 0 1 2 3 0 1 4 5 Para acessar um elemento em uma matriz precisamos especificar os índices do elemento. Em uma matriz bidimensional especificamos primeiro o índice da linha seguido do índice da coluna. MANIPULAÇÃO MANIPULAÇÃO 0 1 2 3 0 1 2 3 Índices de linha Índices de coluna mat[2,3] Atribuição de valores: X[1, 4] = 5; // grava o valor 5 na 2ª linha, 5ª coluna MAT[3, 2] = ‘D’; // grava o caractere D na 4a linha, 3ª coluna MANIPULAÇÃO Podemos preencher uma matriz usando o laço for: int matrizExemplo = new int[3,2]; for(int i = 0; i < 3; i++) for(int j = 0; j < 2; j++) matrizExemplo[i,j] = int.Parse(Console.ReadLine()); MANIPULAÇÃO Acesso aos elementos: numero = matriz[3,2]; MANIPULAÇÃO Podemos criar laços cujos índices de controle nos permitem acessar os elementos da matriz: for(int i = 0; i < 3; i++){ for(int j = 0; j < 2; j++) Console.Write(matrizExemplo[i,j]; Console.WriteLine(); } MANIPULAÇÃO Funções/Procedimentos Professora: Juliana Santiago Teixeira O software deve ser dividido em partes bem definidas e, em alguns casos, reutilizáveis. Essa organização recebe o nome de modularização. DEFINIÇÃO Objetivos: Evitar repetição de código → reutilização Estruturar o código Aumentar a legibilidade → código ficar menor e mais organizado DEFINIÇÃO Tipos de módulos: Procedimento: não retorna valor Função (nome mais usado): retorna valor DEFINIÇÃO O programador pode criar quantas funções/procedimentos quiser. Às vezes, as funções precisam receber valores externos (parâmetros) e devolver algum valor produzido (retorno) Os parâmetros são representados por uma lista de variáveis colocadas dentro de parênteses, logo após o nome da função/procedimento. DEFINIÇÃO Uma função/procedimento na linguagem C# tem a seguinte forma geral: tipo_de_retorno nome_da_função (declaração_de_parâmetros) { // declaração de variáveis c1; c2; ... cn; } DEFINIÇÃO onde: tipo_de_retorno: é o tipo de valor que a função vai retornar declaração_de_parâmetros: é uma lista com a seguinte forma geral: tipo nome1, tipo nome2, ...., tipo nomen Cis são comandos, 1 ≤ i ≤ m DEFINIÇÃO IMPORTANTE! É na declaração de parâmetros que informamos ao compilador quais serão as entradas da função/procedimento, assim como informamos a saída no tipo_de_retorno. O tipo de cada parâmetro deve ser especificado. DEFINIÇÃO O tipo de uma função é definido pelotipo de valor que ela retorna por meio do comando return. Uma função é dita do tipo int quando retorna um valor do tipo int. Os tipos de funções de C# são os mesmos tipos de variáveis, exceto quando a função não retorna nada. Uma função que não retorna valor é do tipo void. TIPO DA FUNÇÃO O comando return termina a execução da função e retorna o controle para a instrução seguinte do código de chamada. A sintaxe de uma instrução return tem uma das três formas seguintes: return; return expressao; return (expressao); COMANDO return IMPORTANTE! O comando return desacompanhado de expressão somente termina a função e indica uma função do tipo void. Nessa situação, a instrução return não é obrigatória. Enquanto vários valores podem ser passados para uma função, não é permitido o retorno de mais de um valor por meio do comando return. COMANDO return int funcao1(){ int funcao2(){ return 10; int x = 0; } return x; } EXEMPLOS É feita através de uma referência ao nome da função em qualquer parte do código do programa. Ao ativar uma função, a sua execução é iniciada; após o término da função, a execução do programa continua a partir da instrução seguinte àquela que ativou a função. ATIVAÇÃO Comando1; Comando2; Função1(); Comando3; … /* Função1 é definida em outro local, no mesmo arquivo ou em outro arquivo */ Função1(){ ... } ATIVAÇÃO Função de um parâmetro: Formalizar a comunicação entre funções. Parâmetro real: É o parâmetro passado para uma função qualquer de um programa, no momento de sua ativação. Parâmetro formal: É o parâmetro definido no cabeçalho de uma função, funcionando como uma variável local desta função. PARÂMETRO int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); printf(“Resultado: %d\n”, n3); } PARÂMETRO Parâmetro formal Parâmetro real int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); Console.WriteLine(“Resultado: “ + n3); } PARÂMETRO n1 n2 n3 3 5 int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); printf(“Resultado: %d\n”, n3); } PARÂMETRO n1 n2 n3 3 5 int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); printf(“Resultado: %d\n”, n3); } PARÂMETRO n1 n2 n3 3 5 a b 3 5 int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); printf(“Resultado: %d\n”, n3); } PARÂMETRO n1 n2 n3 3 5 a b 3 5 8 int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); printf(“Resultado: %d\n”, n3); } PARÂMETRO n1 n2 n3 3 5 a b 3 5 8 int soma(int a, int b){ return a + b; } main(){ int n1 = 3, n2 = 5, n3; n3 = soma(n1, n2); printf(“Resultado: %d\n”, n3); } PARÂMETRO n1 n2 n3 3 5 a b 3 5 8 Passagem de parâmetros por valor: Sintaxe: a declaração do parâmetro formal vista até agora Funcionamento: no momento da ativação da função, os parâmetros formais recebem os valores dos parâmetros reais automaticamente Consequência: alterações nos valores dos parâmetros formais dentro da função não alteram os valores dos parâmetros reais da ativação correspondente Utilização: recomenda-se o uso da passagem de parâmetros por valor quando os parâmetros guardam apenas os dados de entrada da função PASSAGEM DE PARÂMETRO Passagem de parâmetros por referência: Sintaxe: a declaração do parâmetro formal deve ter a palavra reservada ref antes do nome do parâmetro. Funcionamento: no momento da ativação da função, os parâmetros formais recebem os endereços de memória dos parâmetros reais automaticamente, permitindo, assim, trabalhar com o próprio parâmetro real dentro da função de maneira indireta Consequência: alterações nos valores dos parâmetros formais dentro da função alteram os valores dos parâmetros reais da ativação correspondente Utilização: deve-se utilizar a passagem de parâmetros por referência quando os parâmetros funcionam como dados de saída da função PASSAGEM DE PARÂMETRO O nome de uma matriz é o endereço de memória do seu primeiro elemento. Matrizes são sempre passadas por referência. COMO PASSAR MATRIZES COMO PARÂMETRO? Escopo de um objeto: É o local aonde um objeto (variável, constante ou tipo) existe. ESCOPO Objeto local: É o objeto declarado dentro de uma função qualquer, existindo apenas dentro desta função. É criado e alocado no momento da ativação da função, sendo automaticamente desalocado no momento do término da execução da função. Objeto global: É o objeto declarado no início de um programa, existindo para todo o mesmo, inclusive dentro das funções. É criado e alocado no início da execução do programa, sendo desalocado apenas no término da execução do programa ESCOPO IMPORTANTE: Evite ao máximo o uso de variáveis globais. Elas ocupam memória o tempo todo (as locais só ocupam memória enquanto estão sendo usadas) e tornam o programa mais difícil de ser entendido. Trabalhe com parâmetros dentro de funções. ESCOPO