Aqui você encontra infomações sobre Informática, Eletrônica, Elétrica, Mecânica e Automação

segunda-feira, 18 de abril de 2011

Como ligar a fonte ATX sem placa mãe

Esta ligação só funciona em fontes ATX.

Abaixo está o diagrama do plug de uma fonte ATX, todos os plugs são padrões.


O que você deve fazer é unir dois fios do plug.

A figura abaixo mostra quais fios devem ser unidos.



O verde (pino 14) é designado como o fio da “potência”, enquanto que o preto (pino 13) é designado como fio “terra”.

Ao unir esses dois fios, a fonte entra em funcionamento imediatamente.

domingo, 17 de abril de 2011

Linguagem C (parte 8)

Funções: protótipos de função É considerada boa prática utilizar protótipos de função para todas as funções em seu programa. Um protótipo declara o nome de função, seus parâmetros e seu tipo de retorno para o resto do programa antes da declaração real da função. Para entender a utilidade dos protótipos, digite o seguinte código e execute-o:
  #include <stdio.h>

  void main()
  {
     printf("%d\n",add(3));
  }  
  int add(int i, int j)

  {
     return i+j; 
  }  
Este código compila em diversos compiladores sem emitir um aviso, apesar de add esperar dois parâmetros e receber apenas um. Ele funciona porque muitos compiladores C não verificam se o parâmetro corresponde ao tipo ou à quantidade. Você pode perder horas na depuração de um código no qual você está declarando parâmetros a mais ou a menos por engano. O código anterior compila corretamente, mas produz a resposta errada.
Para resolver este problema, a linguagem C permite colocar protótipos de função no início (na verdade, em qualquer lugar) de um programa. Se fizer isso, a linguagem C verifica tipos e quantidades de todas as listas de parâmetros. Tente compilar o seguinte:
  #include <stdio.h>  

  int add (int,int); /* protótipo de função para add */

  void main()
  {
     printf("%d\n",add(3));
  }    
  int add(int i, int j)
  {    
     return i+j;
  } 
O protótipo faz com que o compilador sinalize um erro na instrução printf.
Coloque um protótipo para cada função no início de seu programa. Os propótipos podem economizar bastante tempo de depuração e também resolver o problema que ocorre ao compilar com funções que são utilizadas antes de serem declaradas. Por exemplo, o seguinte código não compilará:
  #include  <stdio.h> 
   
  void main()
  {
      printf("%d\n",add(3));
  }
  float add(int i, int j)
  {
      return i+j;
  }  
Você pode perguntar: "Por que ele compilará quando add retorna um int mas não quando retorna um float?" Porque os compiladores em C mais antigos padronizaram um valor de retorno para int. O uso de um protótipo resolverá este problema. Os "compiladores antigos" (sem suporte a ANSI) permitem protótipos, porém a lista de parâmetros do protótipo deve estar vazia. Os compiladores antigos não fazem a verificação de erros em listas de parâmetros.


Tente isto

  • Retorne ao exemplo de classificação bubble sort anteriormente apresentado e crie uma função.
  • Retorne aos programas anteriores e crie uma função para obter a entrada de dado do usuário, em vez de obter a entrada de dado da função principal.

sábado, 16 de abril de 2011

Linguagem C (parte 7)

Funções A maioria das linguagens permite criar funções de algum tipo. Funções permitem dividir um longo programa em seções nomeadas, de forma que as seções possam ser reutilizadas ao longo do programa. As funções aceitam parâmetros e retornam um resultado. Funções de C podem aceitar um número ilimitado de parâmetros. Em geral, a linguagem C não se preocupa em qual ordem você coloca suas funções no programa, contanto que o nome da função seja conhecido pelo compilador antes de ser invocado.
Já falamos um pouco sobre funções. A função rand previamente descrita é bastante simples. Ela não aceita parâmetros e retorna um resultado inteiro:
  int rand()
  /* de K&R
     - produz um número aleatório entre 0 e 32767.*/
  {
      rand_seed = rand_seed * 1103515245 +12345;
      return (unsigned int)(rand_seed / 65536) % 32768;
  }  
A linha int rand() declara a função rand para o resto do programa e especifica que aquele rand não aceitará nenhum parâmetro e retornará um resultado inteiro. Esta função não tem nenhuma variável local, mas se elas fossem necessárias, iriam logo abaixo da abertura {. A linguagem C permite declarar variáveis após qualquer {: elas existem até o programa atingir o } correspondente e então desaparecem. Desta forma, as variáveis locais de uma função desaparecem assim que o } correspondente é atingido na função. Enquanto existirem, as variáveis locais residem na pilha do sistema. Observe que não há nenhum ; depois de () na primeira linha. Caso tenha colocado um, acidentalmente, você receberá uma enorme cascata de mensagens de erro do compilador, que não farão sentido algum. Observe também que, mesmo sem parâmetros, você precisa usar o (). Eles indicam ao compilador que você está declarando uma função em vez de simplesmente declarar um int.
A instrução return é importante para qualquer função que retorna um resultado. Ela especifica o valor que a função retornará e a encerra imediatamente. Isto significa que você pode colocar diversas instruções de retorno na função para proporcionar vários pontos de saída. Se você não colocar uma instrução de retorno em uma função, a função retorna quando atinge } e retorna um valor aleatório (muitos compiladores o advertirão se você não retornar um valor específico). Em C, uma função pode retornar valores de qualquer tipo: int, float, char, struct, etc.
Há vários modos corretos para executar a função rand. Por exemplo: x=rand( );. A variável x recebe o valor retornado por rand nesta instrução. Observe que você deve usar ( ) na chamada da função, mesmo que nenhum parâmetro seja passado. Caso contrário, x recebe o endereço de memória da função rand, que geralmente não é desejável.
Você também pode invocar rand desta forma:
  if (rand() > 100)  
Ou deste modo:
  rand();  
No último caso, a função é chamada, mas o valor retornado por rand é descartado. Talvez você nunca faça isso com rand, mas muitas funções retornam algum tipo de código de erro por meio da função, e se você não está muito preocupado com o código de erro (por exemplo, por saber que um erro é impossível), você poderá descartá-lo.
Funções podem usar um retorno tipo void caso se deseje que não se retorne nada. Por exemplo:
  void print_header()
  {
      printf("Programa Número 1n");
      printf("por Marshall Brainn");
      printf("Versão 1.0, lançada em 26/12/91\n");  
  }  
Esta função não retorna valor algum. Você pode invocá-la com a seguinte instrução:
  print_header();  
 

Você deve incluir ( ) na chamada. Se não o fizer, a função não é invocada, embora possa ser compilada corretamente em outros sistemas.
As funções em C podem aceitar qualquer tipo de parâmetro. Por exemplo:
  int fact(int i)
  {
      int j,k;
      j=1;
      for (k=2; k<=i; k++)
          j=j*k; 
     return j;
  }  
retorna o fatorial de i, que é passado como um parâmetro inteiro. Separe vários parâmetros com vírgulas:
  int add(int i, int j)
  {
      return i+j;
  }  
A linguagem C evoluiu ao longo dos anos. Às vezes, você verá funções como add escritas do "modo antigo", como mostrado abaixo:
  int add(i,j)
      int i;
      int j;
  {
      return i+j;
  } 
É importante saber ler o código escrito no estilo antigo. Não há nenhuma diferença na forma em que o código é executado, apenas a notação é diferente. Você deve usar o "novo estilo" (conhecido como ANSI C) com o tipo declarado, como parte da lista de parâmetros, a menos que tenha conhecimento prévio de que o código será enviado a alguém com um compilador em "estilo antigo" (sem suporte a ANSI).

sexta-feira, 15 de abril de 2011

quinta-feira, 14 de abril de 2011

Linguagem C (parte 5)

Matrizes Nesta seção, criaremos um pequeno programa em C que gera 10 números aleatórios e os ordena. Para tal, utilizaremos uma nova disposição de variável denominada matriz.
Uma matriz permite declarar e trabalhar com uma coleção de valores de mesmo tipo. Por exemplo, você pode querer criar uma coleção de 5 inteiros. Uma forma para fazer isso seria declarar 5 inteiros diretamente:
  int a, b, c, d, e; 
Isso está certo, mas e se você precisasse de milhares de números inteiros? Uma forma mais fácil é declarar uma matriz de 5 inteiros.
  int a[5];  
Os cinco inteiros individuais dentro desta matriz são acessados por um índice. Todas as matrizes iniciam em zero e vão até n-1 no C. Assim, int a[5]; contém 5 elementos. Por exemplo:
  int a[5];


  a[0] = 12;
  a[1] = 9;
  a[2] = 14;
  a[3] = 5;
  a[4] = 1;  
Uma das vantagens sobre a indexação de matriz é que você pode usar um loop para manipular o índice. Por exemplo, o código a seguir inicializa todos os valores na matriz em 0:
  int a[5];


  int i;
  for (i=0; i<5; i++)
      a[i] = 0;  
O código seguinte inicializa seqüencialmente os valores na matriz e então os imprime:
  #include <stdio.h> 

  int main()
  {
      int a[5];
      int i;
        for (i=0; i<5; i++)
          a[i] = i;
      for (i=0; i<5; i++)
          printf("a[%d] = %dn", i, a[i]);
  }  
As matrizes são usadas a toda hora em C. Para entender seu uso, inicie um editor e digite o seguinte código:
  #include <stdio.h>

  #define MAX 10

  int a[MAX];
  int rand_seed=10;

  /* from K&R
     - retorna um número aleatório entre 0 e 32767.*/
  int rand()
  {
      rand_seed = rand_seed * 1103515245 +12345;
      return (unsigned int)(rand_seed / 65536) % 32768;
  }
    int main()
  {
      int i,t,x,y;
       
      /* preenche a matriz */
      for (i=0; i < MAX; i++)
      {
          a[i]=rand();
           printf("%dn",a[i]);
      }
      /* mais coisas aparecerão aqui em breve */
      return 0;
  }  
Este código contém vários conceitos novos. A linha #define declara uma constante denominada MAX e a define em 10. Os nomes de constantes em geral são escritos em letras maiúsculas para destacá-los no código. A linha int a[MAX]; mostra como declarar uma matriz de inteiros em C. Observe que por causa da posição da declaração da matriz, ela é global ao programa.
A linha int rand_seed=10 também declara uma variável global, desta vez denominada rand_seed, que é inicializada em 10 sempre que o programa inicia. Este valor é o inicial para o código de números aleatórios que segue. Em um gerador de números aleatórios reais, o seed deve inicializar como um valor aleatório, como a hora do sistema. Aqui, a função rand produzirá os mesmos valores sempre que executar o programa.
A linha int rand() é uma instrução de função. A função rand não aceita parâmetros e retorna um resultado inteiro: aprenderemos mais sobre as funções em breve. As quatro linhas que seguem implementam a função rand. Por hora, nós as ignoraremos.
A função principal é normal. Quatro inteiros locais são declarados e a matriz é preenchida com 10 valores aleatórios usando um loop for. Observe que a matriz a contém 10 inteiros individuais. Você aponta para um inteiro específico na matriz usando colchetes. Assim a[0] refere-se ao primeiro inteiro na matriz, a[1] refere-se ao segundo, e assim por diante. A linha que começa com /* e termina com */ é denominada de comentário. O compilador ignora completamente a linha de comentário. Você pode colocar notas para si próprio ou outros programadores nos comentários.
Agora adicione o seguinte código no lugar do comentário mais coisas...:
  /* ordenação por bolha da matriz */
  for (x=0; x < MAX-1; x++)
      for (y=0; y < MAX-x-1; y++)
          if (a[y] > a[y+1])
          {
              t=a[y];
              a[y]=a[y+1];
              a[y+1]=t;
           }
  /* imprime matriz classificada */
  printf("--------------------n");
  for (i=0; i < MAX; i++)
  printf("%dn",a[i]);  
Esta codificação classifica os valores aleatórios e os imprime ordenadamente. Sempre que o executar, você obterá os mesmos valores. Para alterar os valores classificados, altere o valor de rand_seed sempre que executar o programa.
O único modo fácil para realmente entender o que o código está fazendo é executá-lo "à mão". Isto é, assuma que MAX é 4 para facilitar, pegue uma folha de papel e finja que é o computador. Desenhe a matriz no papel e coloque 4 valores aleatórios e não-classificados na matriz. Execute cada linha da seção de classificação do código e desenhe exatamente o que acontece. Você verá que, sempre que submetidos ao loop interno, os valores maiores na matriz são empurrados para baixo e os valores menores vão para o topo da matriz.
Tente isto
  • No primeiro trecho do código, tente alterar o loop for que preenche a matriz para uma única linha de código. Certifique-se de que o resultado seja igual ao do código original.
  • Pegue o código de ordenação por bolha e coloque-o em sua própria função. O cabeçalho de função será void bubble_sort(). Depois transfira as variáveis utilizadas pela ordenação por bolha para a função e torne-as locais. Por ser uma matriz local, você não precisa passar parâmetros.
  • Inicialize a semente do número aleatório para diferentes valores.
Erros que devem ser evitados na linguagem C
  • A linguagem C não tem nenhuma verificação de dimensão, portanto, se você indexar além do fim da matriz, ele não o informará a respeito. Ele provavelmente travará ou apresentará dados incorretos.
  • A chamada de função deve incluir () mesmo se nenhum parâmetro for informado. Por exemplo, C aceitará x=rand; mas a chamada não funcionará. O endereço de memória da função rand será colocado em x. Você deve dizer x=rand();.