Interferências, ruídos e outros fenômenos que prejudicam a integridade dos dados são
problemas fundamentais quando computadores se comunicam em rede. Para detectar alterações
em bits, os dados são sempre enviados com redundâncias computadas a partir dos bits originais.
Este tipo de técnica de detecção de erros costuma receber o nome de checksum, e segue o mesmo
princípio dos dígitos verificadores presentes em diversos documentos e identificadores numéricos
(por exemplo, números de contas e agências bancárias).
Uma das técnicas de detecção de erros mais simples e mais usadas é o teste de paridade.
Cada byte é enviado junto com um bit adicional, que indica se o número de bits com valor 1 no byte
é par (bit redundante = 0) ou ímpar (bit redundante = 1). Por exemplo um byte com o valor 8 tem os
bits 00001000, ou seja, apenas 1 bit “setado”, portanto a sua paridade é 1. Já um byte com o valor
0x55 é representado pelos bits 01010101 – 4 bits “setados”, portanto a sua paridade é 0 (zero). A
função calculaParidade deve receber como parâmetro um byte enviado ou recebido através de uma
conexão, e retornar o valor do bit redundante (0 ou 1).
Para demonstrar o funcionamento demonstre o cálculo de pariedade de cada dígito do seu
primeiro nome. Utilize o valor dos caracteres na tabela ASCII (disponível no anexo).
Exemplo:
Letra Valor decimal na
tabela ASCII Valor binário Pariedade
U 85 0101 0101 0
N 78 0100 1110 0
I 73 0100 1001 1
N 78 0100 1110 0
T 84 0101 0100 1
E 69 0100 0101 1
R 82 0101 0010 1
Soluções para a tarefa
Resposta:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
unsigned int calculaParidade (unsigned char b);
int main()
{
// FERNANDO
unsigned char nome[101];
int i;
printf("Digite uma palavra:\n");
scanf(" %100[^\n]", nome);
for(i = 0; nome[i]; i++)
{
printf("%c - paridade: %u\n", nome[i], calculaParidade(nome[i]));
}
return 0;
}
unsigned int calculaParidade (unsigned char b)
{
// Valor decimal
int x = (int)b;
// Armazenar os bits
int dgs[8];
int i = 7, j;
int cont = 0;
while(x > 1)
{
// Resto da divisao por 2
dgs[i] = x % 2;
i--;
// Divide por 2
x /= 2;
}
dgs[i] = x;
for(j = i; j < 8; j++)
{
if(dgs[j] == 1)
{
// Se for 1, incrementa cont
cont++;
}
}
if((cont % 2) == 0)
{
// Se cont for par, retorna 0
return 0;
}
else
{
// Se for impar, retorna 1
return 1;
}
}
Explicação:
Entre em contato com a nossa equipe que vamos assessorar com esse trabalho
CONTATO - WHATS: (15)98170-8778
Mais de 10 anos no mercado acadêmico
Tele gram:(15)981708778
==================================================================