fork download
  1. #include <stdio.h>
  2.  
  3. unsigned char calculate_parity(unsigned char byte) {
  4. unsigned char parity = 0;
  5. for (int i = 0; i < 8; i++) {
  6. parity ^= (byte >> i) & 1; // Her bit için XOR işlemi
  7. }
  8. return parity;
  9. }
  10.  
  11. // Dalga şeklini yatay yazdıran fonksiyon
  12. void print_waveform_horizontal(unsigned char bit) {
  13. if (bit == 0) {
  14. printf("__ "); // Lojik-0 dalga şekli
  15. } else {
  16. printf("|‾‾| "); // Lojik-1 dalga şekli
  17. }
  18. }
  19.  
  20. int main() {
  21. char char1, char2;
  22.  
  23. // Kullanıcıdan iki karakter alın
  24. printf("İlk karakteri girin: ");
  25. scanf(" %c", &char1);
  26. printf("İkinci karakteri girin: ");
  27. scanf(" %c", &char2);
  28.  
  29. // ASCII kodlarını al
  30. unsigned char ascii1 = (unsigned char)char1;
  31. unsigned char ascii2 = (unsigned char)char2;
  32.  
  33. // Tek parite hesapla ve bit dizilerini oluştur
  34. unsigned char parity1 = calculate_parity(ascii1);
  35. unsigned char parity2 = calculate_parity(ascii2);
  36.  
  37. // Her karakter için 9 bitlik veri oluştur (ASCII + parite)
  38. unsigned char bit_sequence1[9], bit_sequence2[9];
  39.  
  40. for (int i = 0; i < 8; i++) {
  41. bit_sequence1[7 - i] = (ascii1 >> i) & 1; // ASCII kodunu bitlere böl
  42. bit_sequence2[7 - i] = (ascii2 >> i) & 1;
  43. }
  44. bit_sequence1[8] = parity1; // Parite bitini ekle
  45. bit_sequence2[8] = parity2;
  46.  
  47. // İlk karakterin dalga şeklini yazdır
  48. printf("\nİlk karakter '%c' için bit dizisi: ", char1);
  49. for (int i = 0; i < 9; i++) {
  50. printf("%d", bit_sequence1[i]);
  51. }
  52. printf("\n");
  53. for (int i = 0; i < 9; i++) {
  54. print_waveform_horizontal(bit_sequence1[i]);
  55. }
  56.  
  57. // İkinci karakterin dalga şeklini yazdır
  58. printf("\n\nİkinci karakter '%c' için bit dizisi: ", char2);
  59. for (int i = 0; i < 9; i++) {
  60. printf("%d", bit_sequence2[i]);
  61. }
  62. printf("\n");
  63. for (int i = 0; i < 9; i++) {
  64. print_waveform_horizontal(bit_sequence2[i]);
  65. }
  66.  
  67. return 0;
  68. }
Success #stdin #stdout 0.01s 5292KB
stdin
/*  Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in 	*/
/*	einer Textdatei. 													*/
/*  Die Werte müssen auf einer separaten Zeile gespeichert sein			*/
/* 																		*/
/*	Erstellt: 17.5.2010													*/
/*  Autor: Thomas Scheffler												*/

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 32

unsigned Hamdist(unsigned x, unsigned y)
{
  unsigned dist = 0, val = x ^ y;
 
  // Count the number of set bits
  while(val)
  {
    ++dist; 
    val &= val - 1;
  }
 
  return dist;
}



int main (void)
{
	char hex;
	int i;
	int a[ARRAY_SIZE];
	int b[ARRAY_SIZE];
	int hamDist = 0;
	FILE* fp;
	
	//Arrays mit 0 initialisieren
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
  		a[i] = 0;
  		b[i] = 0;
	}

	
	fp = fopen("hex.txt","r");
	if (fp == NULL) 
	{
		printf("Die Datei hex.txt wurde nicht gefunden!");
		exit(EXIT_FAILURE);
	}

	i=0;
	printf("1.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
        a[i]=strtol(&hex,0,16);
		i++;
    }
	i=0;
	printf("2.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
    	b[i]=strtol(&hex,0,16);
        i++;
    }
	fclose(fp);

	printf("Hamming-Abweichung pro Nibble:\n");
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
		printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
		hamDist += Hamdist(a[i],b[i]);
	}
	printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}

stdout
İlk karakteri girin: İkinci karakteri girin: 
İlk karakter '/' için bit dizisi: 001011111
__ __ |‾‾| __ |‾‾| |‾‾| |‾‾| |‾‾| |‾‾| 

İkinci karakter '*' için bit dizisi: 001010101
__ __ |‾‾| __ |‾‾| __ |‾‾| __ |‾‾|