quarta-feira, 29 de fevereiro de 2012

Trabalhando com variaveis homogeneas bi dimensionais.


import javax.swing.JOptionPane;
public class UsandoMatriz {
    public static void main(String[] args) {
       int lin = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a quantidade   de linha da Matriz."));
       int col = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a quantidade   de coluna da Matriz."));
       int matriz[][] = new int[lin][col];
      
   for (int i=0; i<lin; i++)
         for (int j=0; j<col; j++)
             matriz[i][j] = Integer.parseInt(JOptionPane.showInputDialog(   null,"Digite o valor da posição["+(i+1)+(j+1)+"]","MATRIZ",1));
      
  System.out.println("Matriz Digitada.");
      
  for (int i=0; i<lin; i++){
  System.out.println();
         for (int j=0; j<col; j++)
             System.out.print(matriz[i][j] + "\t");
       }
    }
}

terça-feira, 28 de fevereiro de 2012

Exercicio em sala de aula


public class Quadrado {
   public static void main (String args[ ])     {
         if (args.length < 1)  {
               System.out.println("Informe um numero menor ou igual 50");
               System.out.println("e sera calculado o quadrado dos numeros");
               System.out.println("entre 1 e o numero informado\n");
               System.exit(0);
         }
         // conversao de String para inteiro (outra maneira !)
         Integer x = new Integer(args[0]);
         int a = x.intValue();
         if (a > 50)   {
               System.out.println("O numero deve ser menor que 50");
               System.exit(0);
         }
         for (int i=1;  i<=a;  i++)
                System.out.println ("O quadrado de " + i + " = " + i*i);
   }
}

quinta-feira, 23 de fevereiro de 2012

Código fonte para o exercício Listagem de Clientes em ASP.Net e C#


Código fonte  do arquivo listaclientes.asp.cs
Para que você possa testar este programa carregue o banco de dados no link abaixo
Mala direta

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;

namespace primeirosite
{
    public partial class listaclientes : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            MySqlConnection conn;
            string conexao = "Server=localhost; UserId=root; Password=; Database=maladireta;";
            conn = new MySqlConnection(conexao);
            string comando = "select id,nome,telefone from contato order by nome";
            MySqlCommand cmd = new MySqlCommand(comando);
            cmd.Connection = conn;
            conn.Open();
            MySqlDataReader dr;
            dr = cmd.ExecuteReader();
            Response.Write("<form id=\"form1\" runat=\"server\"><div>");
            Response.Write("<table style=\"width:100%\">");
            Response.Write("<tr><td colspan=\"4\" style=\"text-align: center\">");
            Response.Write("Listagem de Contatos</td>");
            Response.Write("</tr>");
            Response.Write("<tr>");
            Response.Write("<td class=\"style4\">");
            Response.Write("<asp:CheckBox ID=\"deleta\" runat=\"server\"/>");
            Response.Write("</td>");
            Response.Write("<td class=\"style2\">");
            Response.Write("Id</td>");
            Response.Write("<td class=\"style3\">");
            Response.Write("Nome</td>");
            Response.Write("<td style=\"text-align: center\">");
            Response.Write("Telefone</td>");
            Response.Write("</tr>");
            while (dr.Read()) {
                Response.Write("<tr>");
                Response.Write("<td class=\"style4\">&nbsp;</td>");
                Response.Write("<td class=\"style2\">"+dr["id"]+"</td>");
                Response.Write("<td class=\"style3\">"+dr["nome"]+"</td>");
                Response.Write("<td>" + dr["telefone"] + "</td></tr>");
            }
            conn.Close();
            Response.Write("</table>");
            Response.Write("</div></form>");
        }
    }
}

listaclientes.asp


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="listaclientes.aspx.cs" Inherits="primeirosite.listaclientes" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .style1
        {
        }
        .style2
        {
            width: 42px;
            text-align: left;
        }
        .style3
        {
            width: 641px;
            text-align: left;
        }
        .style4
        {
            width: 74px;
        }
    </style>
</head>
<body>

</body>
</html>


terça-feira, 21 de fevereiro de 2012

Como ganhar dinheiro com programas de computador?

Quando se fala em desenvolvimento de programas de computador, pensamos logo em aplicações para o comércio. De fato, é um bom nicho de mercado, porém altamente concorrido. Posso aqui dar alguns exemplos de grandes empresas do mercado de software que atuam nessa área: SAP, MICROSIGA, TOTVS, SANKHYA etc. Todas essas tem soluções para o mercado corporativo,grandes e médias empresas.
A conclusão obvia é que você não terá espaço nesse terreno de disputa. Mas como eu digo a meus alunos, não se ganha dinheiro fazendo aquilo que a maioria faz, mas se ganha, fazendo bem feito e o que poucos fazem. 
Partindo desse pressuposto devemos também selecionar bem nossos clientes, pois o que parece ser uma boa referencia também pode ser uma âncora amarrada no seu calcanhar. Procure começar fazendo pequenos trabalhos e manter uma constância de produtividade. Não deixe de documentar tudo processo de negociação bem como o projeto como um todo. Sempre que desenvolvemos algum programa o cliente no meio do caminho lembra daquela tela ou daquele campo que deveria ter para que a aplicação fique mais completa, no ponto de vista dele, mas que pode te atrapalhar e atrasar um tempo considerável. 
Se tudo esta documentado fica mais fácil mostrar que será necessário um novo prazo e consequentemente um novo valor a ser acrescentado no projeto. Lembre se de fazer algum tipo de comparação com a adoção do sistema que irá trazer algum ganho para a empresa que o contratou, assim se justifica o preço que esta cobrando. Infelizmente alguns empresários dão mais valor numa caminhonete ou carro de luxo que num sistema que vai lhe dar a possibilidade de ter um lucro mensal muito grande.  A rapidez na entrega também ajuda na obtenção de lucros, por isso você deve escolher bem a linguagem que vai usar.
Usar uma linguagem eficiente e que você domine faz parte de uma boa estrategia para se ganhar mercado. Se você estiver olhando como pessoa jurídica deve pensar numa linguagem que tem muita mão de obra no mercado e muito material de consulta, caso você seja pessoa física deve escolher uma linguagem que poucos dominam. Atualmente JAVA tem sido uma linguagem muito badalada no mercado ainda paga bons salários, mas já vejo que isso começa a cair, pois se você procurar já encontrará um numero bom de pessoas que "sabem programar", não vale o famoso Hello World. 
Porém há o COBOL que por uma questão de uma grande base instalada e porque nós os "dinossauros" estamos nos aposentando e abrem se novas vagas. Outro fator que ajuda é ter no seu perfil o conhecimento de JAVA e COBOL. Normalmente grandes empresas que pretendem migrar seus sistemas em COBOL o querem fazer para ambiente WEB e JAVA.
Outro nicho que vem crescendo no mercado é as aplicações para celulares. Quando falamos em celulares logo vem a cabeça ANDROID do GOOGLE, nome de um sistema operacional para telefones que vem ganhando muita força e se estabelece como um padrão. Existem várias historias de pessoas que ganharam dinheiro fazendo um aplicativo simples e que venderam a $US1,00  cerca de hum milhão de cópias. Normalmente as pessoas trocam de celular a cada dois anos e talvez menos e que cada vez mais elas querem mobilidade então o caminho a se trilhar é explorar programas que facilitem o dia a dia dos usuários. Que desejamos hoje quando saímos de casa? No meu caso, como chegar mais rápido a minha unidade de trabalho e antes de um PORTUGUÊS que todo dia me espera na porta apontando para o  relógio, risos, embora nos dois sabemos os motivos. O que quero dizer é que se meu celular tiver um GPS e minha Goiânia tivesse um sistema de câmeras de trânsito poderia ter uma rota alternativa que me pudesse chegar mais rápido através de um programa que me apontasse tal rota. 
Outro exemplo de aplicação é um que poderia me avisar no celular quais faturas tenho que pagar e quais as receitas que tem que receber no dia desde integrasse a um sistema web.
Concluindo, o mundo da programação tem muitas portas para serem abertas ou ainda portas abertas que ainda não foram bem exploradas. Cabe a você fazer uma boa capacitação na área de programação e ficar atento as oportunidades, tanto como empregado como empreendedor. Um autor que gosto, Alvim Toffler diz na Terceira onda, o emprego mudará radicalmente nos anos 2000 e que seremos mais 90% sem ter o que fazer, portanto explorar as principais necessidades do ser humano no seculo 21 será o caminho certo para se achar o veio de ouro na programação de computadores.
Um forte abraço e até o próximo post.

quarta-feira, 15 de fevereiro de 2012

Um calculadora com bugs, mas boa de aprender C# (versão alpha -1)


Pessoal este código cria uma calculadora no C# semelhante a do Windows. Guardando as devidas proporções.

Abaixo estão as listagens do arquivos
MainWindow.xaml
MainWindow.xaml.cs


MainWindow.xaml

<Window x:Class="Calculadora.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="404" Width="426" Background="#FFEBE5E5" WindowStyle="ThreeDBorderWindow">
    <Grid Width="358">
        <Button Content="7" Height="28" HorizontalAlignment="Left" Margin="91,127,0,0" Name="sete" VerticalAlignment="Top" Width="37" Click="sete_Click" />
        <TextBox Height="53" HorizontalAlignment="Right" Margin="0,34,54,0" Name="display" VerticalAlignment="Top" Width="213" FontFamily="Arial" FontSize="28" HorizontalContentAlignment="Right" />
        <Button Content="8" Height="28" HorizontalAlignment="Left" Margin="134,127,0,0" Name="oito" VerticalAlignment="Top" Width="37" Click="oito_Click" />
        <Button Content="9" Height="28" HorizontalAlignment="Left" Margin="177,127,0,0" Name="nove" VerticalAlignment="Top" Width="37" Click="nove_Click" />
        <Button Content="4" Height="28" HorizontalAlignment="Left" Margin="91,161,0,0" Name="quatro" VerticalAlignment="Top" Width="37" Click="quatro_Click" />
        <Button Content="5" Height="28" HorizontalAlignment="Left" Margin="134,161,0,0" Name="cinco" VerticalAlignment="Top" Width="37" Click="cinco_Click" />
        <Button Content="6" Height="28" HorizontalAlignment="Left" Margin="177,161,0,0" Name="seis" VerticalAlignment="Top" Width="37" Click="seis_Click" />
        <Button Content="1" Height="28" HorizontalAlignment="Left" Margin="91,195,0,0" Name="um" VerticalAlignment="Top" Width="37" Click="um_Click" />
        <Button Content="2" Height="28" HorizontalAlignment="Left" Margin="134,195,0,0" Name="dois" VerticalAlignment="Top" Width="37" Click="dois_Click" />
        <Button Content="3" Height="28" HorizontalAlignment="Left" Margin="177,195,0,0" Name="tres" VerticalAlignment="Top" Width="37" Click="tres_Click" />
        <Button Content="0" Height="28" HorizontalAlignment="Left" Margin="91,229,0,0" Name="zero" VerticalAlignment="Top" Width="80" Click="zero_Click" />
        <Button Content="," Height="28" HorizontalAlignment="Left" Margin="177,229,0,0" Name="virgula" VerticalAlignment="Top" Width="37" FontSize="18" Click="virgula_Click" />
        <Button Content="+" Height="28" HorizontalAlignment="Left" Margin="220,229,0,0" Name="soma" VerticalAlignment="Top" Width="37" Click="soma_Click" />
        <Button Content="-" Height="28" HorizontalAlignment="Left" Margin="220,195,0,0" Name="subtracao" VerticalAlignment="Top" Width="37" Click="subtracao_Click" />
        <Button Content="*" Height="28" HorizontalAlignment="Left" Margin="220,0,0,176" Name="multiplicacao" VerticalAlignment="Bottom" Width="37" Click="multiplicacao_Click" />
        <Button Content="/" Height="28" HorizontalAlignment="Left" Margin="220,127,0,0" Name="divisao" VerticalAlignment="Top" Width="37" Click="divisao_Click" />
        <Button Content="=" Height="60" HorizontalAlignment="Left" Margin="267,198,0,0" Name="igual" VerticalAlignment="Top" Width="37" Click="igual_Click" />
        <Button Content="1/x" Height="28" HorizontalAlignment="Left" Margin="267,0,0,176" Name="inverso" VerticalAlignment="Bottom" Width="37" Click="inverso_Click" />
        <Button Content="%" Height="28" HorizontalAlignment="Left" Margin="267,127,0,0" Name="percente" VerticalAlignment="Top" Width="37" />
        <Button Content="&lt;--" Height="28" HorizontalAlignment="Left" Margin="91,93,0,0" Name="voltar" VerticalAlignment="Top" Width="37" Click="voltar_Click" />
        <Button Content="CE" Height="28" HorizontalAlignment="Left" Margin="134,93,0,0" Name="button1" VerticalAlignment="Top" Width="37" Click="button1_Click" />
        <Button Content="C" Height="28" HorizontalAlignment="Left" Margin="177,93,0,0" Name="button2" VerticalAlignment="Top" Width="37" Click="button2_Click" />
        <Button Height="28" HorizontalAlignment="Right" Margin="0,93,54,0" Name="raiz" VerticalAlignment="Top" Width="37" Content="√" Click="raiz_Click" />
        <Button Height="28" HorizontalAlignment="Left" Margin="220,93,0,0" Name="maisoumenos" VerticalAlignment="Top" Width="37" Content="±" Click="maisoumenos_Click" />
    </Grid>
</Window>



MainWindow.xaml.cs

System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Calculadora
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        double acumula = 0;
        string operacao = "";
        public MainWindow()
        {
            InitializeComponent();
        }

        private void sete_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "7";
        }

        private void zero_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "0";
        }

        private void um_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "1";
        }

        private void dois_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "2";
        }

        private void tres_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "3";
        }

        private void quatro_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "4";
        }

        private void cinco_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "5";
        }

        private void seis_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "6";
        }

        private void oito_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "8";
        }

        private void nove_Click(object sender, RoutedEventArgs e)
        {
            display.Text += "9";
        }

        private void soma_Click(object sender, RoutedEventArgs e)
        {
           
            if (operacao == "*" || operacao=="-" || operacao == "/")
            {
                operacao = "+";
            }
            else
            {
                acumula += double.Parse(display.Text);
                display.Text = "";
                operacao = "+";
            }

        }

        private void igual_Click(object sender, RoutedEventArgs e)
        {
            if (operacao == "+")
            {
                acumula += double.Parse(display.Text);
                display.Text = acumula.ToString();
            }
            else if (operacao == "-")
            {
                acumula -= double.Parse(display.Text);
                display.Text = acumula.ToString();
            }
            else if (operacao=="*"){
                acumula *= double.Parse(display.Text);
                display.Text = acumula.ToString();
            }
            else if (operacao == "/") {
                if (double.Parse(display.Text) != 0)
                {
                    acumula /= double.Parse(display.Text);
                    display.Text = acumula.ToString();
                }
                else {
                    display.Text = "Divisão por zero";
                }
            }
        }

        private void virgula_Click(object sender, RoutedEventArgs e)
        {
            display.Text += ",";
        }

        private void subtracao_Click(object sender, RoutedEventArgs e)
        {
            if (operacao == "*" || operacao == "+" || operacao == "/")
            {
                operacao = "-";
            }  else {
                acumula = double.Parse(display.Text);
                display.Text = "";
                operacao = "-";
            }
        }

        private void multiplicacao_Click(object sender, RoutedEventArgs e)
        {
            if (operacao == "-" || operacao == "+" || operacao == "/")
            {
                operacao = "*";
            }
            else
            {
                acumula = double.Parse(display.Text);
                display.Text = "";
                operacao = "*";
            }
        }

        private void divisao_Click(object sender, RoutedEventArgs e)
        {
            if (operacao == "*" || operacao == "+" || operacao == "-")
            {
                operacao = "/";
            }
            else
            {
            acumula = double.Parse(display.Text);
            display.Text = "";
            operacao = "/";}
        }

        private void voltar_Click(object sender, RoutedEventArgs e)
        {
            int x = display.Text.Length-1;
            if (x >= 0)
            {
                display.Text = display.Text.Substring(0, x);
            }
        }

        private void inverso_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                double d = double.Parse(display.Text);
                if (d == 0)
                {
                    display.Text = "Divisão por zero!!!";
                }
                else
                {
                    d = 1 / d;
                    display.Text = d.ToString();
                }
            }
            catch (Exception Ex) {
               
                for (int i = 0; i < 100000; i++)
                {
                    display.Text = "vc é bobo. ";
                    // em espera.
                }
                display.Text = "";

            }
        }

        private void raiz_Click(object sender, RoutedEventArgs e)
        {
            double x = double.Parse(display.Text);
            if (x < 0)
            {
                display.Text = "Valor invalido.";
            }
            else {
                x = Math.Sqrt(x);
                display.Text = x.ToString();
            }

        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            acumula = 0;
            display.Text = "";
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            display.Text = "";
            operacao = "";
        }

        private void maisoumenos_Click(object sender, RoutedEventArgs e)
        {
            double x = double.Parse(display.Text)*(-1);
            display.Text = x.ToString();
        }
    }
}

Espero que tenham gostado do exemplo, vai um + ai? Mostre também para seus colegas o que estão aprendendo no curso através das redes sociais. Um Forte abraço e até o próximo post.

terça-feira, 14 de fevereiro de 2012

Listagem de Produtos em C#


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Arrayprodutos
{
    class Program
    {
        static void Main(string[] args)
        {
            string[,] produto = new string[10, 2];
            double[,] estoque = new double[10, 2];
            for (int i = 0; i < 10; i++)
            {
                Console.Write("Nome ....: ");
                produto[i, 0] = Console.ReadLine();
                Console.Write("Unidade..: ");
                produto[i, 1] = Console.ReadLine();
                Console.Write("Pr. Unit.: ");
                estoque[i, 0] = double.Parse(Console.ReadLine());
                Console.Write("Qtd Estoq: ");
                estoque[i, 1] = double.Parse(Console.ReadLine());                
            }
            for (int i = 0; i < 10; i++)
            {
                Console.Write("Nome ....: "+produto[i, 0]);
                Console.Write("Total Est. : "+(estoque[i, 0]*estoque[i, 1]));
            }
        }
    }
}

Correção exercicio de C# para calculo das médias.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace estudantes
{
    class medias
    {
        static void Main(string[] args)
        {
            string[] nome = new string[10];
            double[,] notas = new double[10, 5];
            string[] colunas = new string[6]
            {"\nnome","nota-1","nota-2","nota-3","nota-4","média" };
            for (int i = 0; i < 10; i++)
            {
                Console.Write(colunas[0]);
                nome[i] = Console.ReadLine();
                for (int k = 0; k < 4; k++)
                {
                    Console.Write(colunas[k + 1]);
                    notas[i, k] = double.Parse(Console.ReadLine());
                    notas[i, 4] += notas[i, k] / 4;
                }
            }
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(colunas[0]+nome[i]);
                for (int k = 0; k < 5; k++)
                {
                    Console.WriteLine(colunas[k + 1] + notas[i, k]);
                }
                if (notas[i, 4] >= 7) {
                    Console.WriteLine("Situação : Aprovado");
                }
                else if (notas[i, 4] >= 5 && notas[i, 4] < 7)
                {
                    Console.WriteLine("Situação : Prova final");
                }
                else {
                    Console.WriteLine("Situação : Reprovado");
                }              
            }
        }
    }
}

Demonstração de Array bi dimensional

O programa abaixo escrito na linguagem C#(C SHARP ) demonstra como usar um ARRAY bi dimensional. Definimos dois Arrays, sendo um bi dimensional e um VETOR. o ARRAY tabela define a estrutura de armazenamento e o colunas define o rotulo de cada coluna.
Forte abraço e até a próxima.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ArraysBiDimensionais
{
    class Entradados
    {
        static void Main(string[] args)
        {
            string[,] tabela = new string[10, 3];
            string[] colunas=new string[3]
                     {"Produto : ","Unidade : ","Valor  : "};
            for (int i = 0; i < 10; i++)
            {
                for (int k = 0; k < 3; k++)
                {
                    Console.Write(colunas[k]);
                    tabela[i, k] = Console.ReadLine();
                }
            }
            for (int k = 0; k < 3; k++)
            {
                Console.Write(colunas[k] + "***** ");
            }
            Console.WriteLine(" ");
            for (int i = 0; i < 10; i++)
            {
                for (int k = 0; k < 3; k++)
                {
                    Console.Write(tabela[i, k] + "***** ");
                }
                Console.WriteLine(" ");            
            }
            Console.ReadKey();
        }
    }
}

segunda-feira, 13 de fevereiro de 2012

Calculo das raizes da equação do 2º Grau em C#


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Matematica
{
    class Program
    {
        static void Main(string[] args)
        {
            double a, b, c, d, x1, x2;
            Console.WriteLine("Equação 2º Grau");
            Console.Write(" Valor de a : ");
            a = double.Parse(Console.ReadLine());

            Console.Write(" Valor de b : ");
            b = double.Parse(Console.ReadLine());

            Console.Write(" Valor de c : ");
            c = double.Parse(Console.ReadLine());
            Console.WriteLine(a + "x² + " + b + "x + " + c + "=0");
            d = b * b - 4 * a * c;
            if (d > 0) {
                Console.WriteLine("Existem duas raizes reais");
                x1 = (-b + Math.Sqrt(d)) / (2 * a);
                x2 = (-b - Math.Sqrt(d)) / (2 * a);
                Console.WriteLine("x'= " + x1);
                Console.WriteLine("x''= " + x2);
            }
            else if (d == 0)
            {
                Console.WriteLine("Existem duas raizes reais e iguais.");
                x1 = -b / (a * 2);
                Console.WriteLine("x'=x''= " + x1);
            }
            else {
                Console.WriteLine("Nao existem raizes reais");
            }
            Console.ReadKey();

        }
    }
}

terça-feira, 7 de fevereiro de 2012

Programar é um exercício de paciência e disciplina.

Há quem diga que programar é fácil. É uma tese difícil de ser dita como verdadeira. Não quero desmotivar meus leitores quanto menos meus alunos, mas programar é uma arte disciplinar.
Quando programamos colocamos nosso cérebro no modo de pensamento em que devemos abstrair, sincronizar, interagir, testar, observar comportamentos e claro fazer alguns cálculos. Toda essa sinergia de pensamento pode ser abalada por um simples tocar de telefone, uma campainha do MSN e a sua filha pedindo lhe atenção para ver uma cachorrinho brincando. Claro que não podemos ficar ligados 24 horas no ar pensando no problema. Brincar com o filho ou a filha faz parte da vida. 
Quando estamos programando também somos professores pois estamos ensinando uma máquina fazer o que desejamos. Se devemos agir como professores então devemos planejar corretamente como vamos abordar o problema para obter o comportamento correto.  Além disso devemos pensar na capacidade de processamento e também qual é a saída desejada. Por essa razão devemos ter cuidados especiais neste momento pois o computador faz tudo o que pedimos ao pé da letra. Ter lucidez ao fazer uma linha de código é um exercício diário de paciência e disciplina. Acredito que as duas andam juntas. 
A paciência é o ato de acompanhar passo a passo o que cada linha de código retorna. A disciplina usamos quando observamos o comportamento do programa. Captar o que um programa faz as vezes não é uma tarefa simples pois os códigos podem ocultar informações que nos enganam quando a procedência e como foram gerados levando a conclusões errôneas e dai um tempo perdido pode vir acontecer. O pensamento matemático o ajudará na eliminação de código redundante e também alcançar a eficiência de desempenho.  Desta forma colocada podemos afirmar que paciência e disciplina andam juntas nesta arte pois uma dará suporte a outra a medida que avançamos na construção de um código.



quinta-feira, 2 de fevereiro de 2012

COBOL? Nao morreu!

Muitas pessoas me perguntam:  Ainda hoje o COBOL é usado? Eu começo esse artigo repetindo um brincadeira dos profissionais que lidam com essa ferramenta: "Se houver um holocausto nuclear apenas duas coisas sobreviveriam, são elas, baratas e cobol.". Claro que há um grande absurdo nisso, mas essa discussão não seria frutífera aqui. Dizemos isso porque várias vezes falaram por ai que a linguagem estaria morta e que seria necessário migrar para outra linguagem, mas o que presenciei foi um ressurgimento da linguagem cada vez mais melhorada. Talvez no inicio dos anos 60 a CODASYL(Conference on Data Systems Languages) não tivesse essa pretensão. 
Hoje a linguagem de programação COBOL é bastante utilizada em diversos seguimentos, bancos, hotéis, supermercados e muitos outros estabelecimentos sejam comerciais ou governamentais. 
A migração de plataforma de banco de dados e de sistema operacional é uma opção hoje em dia quando  alguém que não tem experiência com a linguagem e quer mudar de sistema. Mas a confiabilidade em novo sistema pode trazer alguns transtornos para a organização e consequentemente afetam as suas operações no dia a dia. Estes transtornos trazem a antiga aplicação uma certa confiabilidade e estabilidade.
E isso faz o COBOL uma linguagem que vem atravessando mais de 50 anos como ferramenta de desenvolvimento de aplicações. Esta confiabilidade foi obtida através dos primeiros anos da linguagem, época em que houve um boooom na adoção de computadores e consequentemente a necessidade de desenvolver programas confiáveis  no começo dos anos 70 e 80, sendo reforçada pela inclusão dos PC's(personal Computers) introduzidos no começo dos anos 80. De la para cá tem se criado muitas linguagens de programação mas a migração as vezes não é bem sucedida. 
Mas a linguagem não ficou parada neste período, sendo atualizada varias vezes pelo CODASYL e por várias empresas que desenvolveram compiladores e também IDE(Ambiente de desenvolvimento Integrado) a fez manter atualizada com os paradigmas de programação atualmente em voga no mercado. Podemos destacar estes paradigmas como orientação a objeto e GUI (Graphical User Interfaces). 
Hoje o COBOL encontramos sistemas desenvolvidos para Windows 32 e 64 bits, ambiente Linux, Unix e claro não poderia deixar de citar, o Main Frame, bem como ferramentas de desenvolvimento de relatórios.
Você pode que trabalha na área ou esta entrando agora pode se perguntar, quem usa cobol para desenvolver, talvez pequenas e medias empresa não usem por serem muito novas em relação a idade do cobol mas empresas que sobreviveram aos últimos cinquenta anos, certamente adotou, adota ou mantém sistemas em COBOL. Os bancos e grandes corporações se utilizam destes sistemas. Talvez não esteja ao seu alcance se você estiver pensando em morar na sua cidade e trabalhar, mas estiver sintonizado com o mercado e tiver disponibilidade poderá ver essa tendência. Os dinossauros(nos programadores de quase 60 anos) estão se retirando e ainda há muitos sistemas por ai para dar manutenção ou desenvolver. Pense! Ganha dinheiro na área de informatica quem faz algo diferente da maioria.
Fiquem todos com Deus e um forte abraço a todos, obrigado.

quarta-feira, 1 de fevereiro de 2012

Listagem de clientes na tela com opção de editar.


       identification division.
       program-id. listaClientes.
       author. jorgefox.
       environment division.
         configuration section.
         input-output section.
           file-control.
             select clientes assign to "clientes.dat"
             organization is indexed
             access mode is dynamic
             record key is codigo
             alternate key is nome with duplicates
             file status is fs-clientes.
       data division.
         file section.
           fd clientes.
             01 registro-clientes.
                02 codigo              pic 9999.
                02 nome                pic x(50).
                02 data-nas.
                   03 dia-nas             pic 99.
                   03 mes-nas             pic 99.
                   03 ano-nas             pic 9999.
                02 telefone               pic x(30).
                02 endereco               pic x(50).
                02 numero                 pic 9(6).
                02 complemento            pic x(30).
                02 bairro                 pic x(30).
                02 cidade                 pic x(30).
                02 cep                    pic x(8).
                02 estado                 pic AA.
                02 email                  pic x(50).
       working-storage section.
          01 fs-clientes.
             02 fs-clientes-1            pic 9.
             02 fs-clientes-2            pic 9.
             02 fs-cliente-r redefines fs-clientes-2 pic 99 comp-x.
          77 opcao                       pic x value spaces.
          77 codigop                     pic 9999 values zeros.
          77 linha                       pic 9999 value 0902.
       procedure division.
       abertura.
         open input clientes
         if fs-clientes unequal zero then
            display erase
            display "Erro ao abrir clientes.dat" at 1010 fs-clientes
            accept opcao
            close clientes
            exit program
         else
         display "deu certo"
         accept opcao
         end-if
       .
       inicio.
         display erase
         display "Listagem de clientes" at 0330
         display "+------+----------------------------------------------
      -"----------------+-------+" at 0601
         display "|codigo|                         Nome Cliente
      -"                |Dt Nasc|" at 0701
         display "+------+----------------------------------------------
      -"----------------+-------+" at 0801
         move " " to nome
         start clientes key is not less nome
         if fs-clientes=00 then
            perform imprime
            display "Digite o codigo desejado [....]" at 2201
            accept codigop at 2227
            call "aplicacao" using codigop
            exit program
         else
            display "deu erro " fs-clientes
            accept opcao
         end-if
         close clientes
         exit program
       .
       imprime.
         read clientes next
         perform until fs-clientes<>00
            display codigo at linha
            add 8 to linha
            display nome at linha
            add 61 to linha
            display dia-nas at linha "/"
            add 3 to linha
            display mes-nas at linha "/"
            add 3 to linha
            display  ano-nas at linha
            subtract 76 from linha giving linha
            add 101 to linha
            read clientes next
         end-perform
       .

Como controlar erros de leitura e gravação em cobol

No COBOL há uma forma de fazer a verificação se um arquivo foi aberto corretamente. A principio isso acontece por que como o cobol usa arquivos do tipo texto para armazenar suas informações, e que neste caso, estão sujeitos a corrompimento por vírus ou abertura de forma ilegal.
Para ajudar nessa questão vou postar um link de pagina que o ajudará a determinar qual o problema com a file status.
http://supportline.microfocus.com/documentation/books/sx20books/fhscod.htm#s001
 Caso ocorra um erro busque nesta tabela os erros e suas causas.
[]s a todos

Programa de menu - cobol


       identification division.
       program-id. menu.
       author. jorgefox.
       data division.
       working-storage section.
       77 wopcao          pic 9 value zero.
       screen section.
       01 menu-principal.
          02 blank screen.
          02 line 1 col 1 value "***************************************
      -"************************************".
          02 line 2 col 21 value "Sistema de compra e venda Mercadorias"
      -.
          02 line 3 col 1 value "***************************************
      -"************************************".
          02 line 4 col 33 value "Menu Principal".
          02 line 7 col 10 value "[1] Cadastro Mercadoria".
          02 line 8 col 10 value "[2] Cadastro Cliente".
          02 line 9 col 10 value "[3] Cadastro Vendedor/Comprador".
          02 line 10 col 10 value "[4] Listagem de Mercadoria".
          02 line 11 col 10 value "[5] Listagem de Cliente".
          02 line 12 col 10 value "[6] Sair sistema".
          02 line 15 col 10 "Digite a opção desejada[.]".
          02 opcao line 15 col 34 pic 9 using wopcao auto.
       procedure division.
       inicio.
          display menu-principal
          accept menu-principal
          evaluate wopcao
             when 1
                call "cadmercadoria" using wopcao
                go to inicio
             when 2
                call "aplicacao"
                go to inicio
             when 6
                stop run
             when other
                 go to inicio
          end-evaluate.

Tela de Cadastro de Clientes - Cobol


       identification division.
       program-id. aplic.
       author. jorgefox.
       environment division.
         configuration section.
         input-output section.
           file-control.
             select clientes assign to "clientes.dat"
             organization is indexed
             access mode is dynamic
             record key is codigo
             alternate key is nome with duplicates
             file status is fs-clientes.
       data division.
         file section.
           fd clientes.
             01 registro-clientes.
                02 codigo              pic 9999.
                02 nome                pic x(50).
                02 data-nas.
                   03 dia-nas             pic 99.
                   03 mes-nas             pic 99.
                   03 ano-nas             pic 9999.
                02 telefone               pic x(30).
                02 endereco               pic x(50).
                02 numero                 pic 9(6).
                02 complemento            pic x(30).
                02 bairro                 pic x(30).
                02 cidade                 pic x(30).
                02 cep                    pic x(8).
                02 estado                 pic AA.
                02 email                  pic x(50).
             01 reg-cliente.
                02 wcodigo              pic 9999 values zero.
                02 wnome                pic x(50) values spaces.
                02 wdata-nas.
                   03 wdia-nas             pic 99 values zero.
                   03 wmes-nas             pic 99 values zero.
                   03 wano-nas             pic 9999 values zero.
                02 wtelefone               pic x(30) value spaces.
                02 wendereco               pic x(50) value spaces.
                02 wnumero                 pic 9(6) value zero.
                02 wcomplemento            pic x(30) value spaces.
                02 wbairro                 pic x(30) value spaces.
                02 wcidade                 pic x(30) value spaces.
                02 wcep                    pic x(8) value spaces.
                02 westado                 pic AA value spaces.
                02 wemail                  pic x(50) value spaces.
       working-storage section.
          01 fs-clientes.
             02 fs-clientes-1            pic 9.
             02 fs-clientes-2            pic 9.
             02 fs-cliente-r redefines fs-clientes-2 pic 99 comp-x.
          77 opcao                       pic x value spaces.
       procedure division.
       abertura.
       open i-o clientes.
       inicio.
          display erase
          perform tela
          if opcao="S" or opcao="s" then
             perform grava-dados
             perform limpa-campos
             go to inicio
          else
             go to inicio
          end-if
       .
       tela.
         display "Cadastro de cliente" at 0430
         display "Codigo             : " at 0605
         display "Nome               : " at 0705
         display "Data Nascimento    :   /  /" at 0805
         display "Endereco           : " at 0905
         display "Telelefone         : " at 1005
         display "Numero             : " at 1105
         display "Complemento        : " at 1205
         display "Bairro             : " at 1305
         display "Cidade             : " at 1405
         display "C.E.P              : " at 1505
         display "Estado             : " at 1605
         display "E-mail             : " at 1705
         accept wcodigo at 0625
         if wcodigo = 9999 then
             close clientes
             exit program
         end-if
         accept wnome at 0725
         accept wdia-nas at 0825
         accept wmes-nas at 0828
         accept wano-nas at 0831
         accept wendereco at 0925
         accept wtelefone at 1025
         accept wnumero at 1125
         accept wcomplemento at 1225
         accept wbairro at 1325
         accept wcidade at 1425
         accept wcep at 1525
         accept westado at 1625
         accept wemail at 1725
         display "Dados corretos [S/N] [.]" at 1905
         accept opcao at 1927
         .
       limpa-campos.
           move spaces to reg-cliente.
       grava-dados.
       move reg-cliente to registro-clientes
       write registro-clientes.