#include <stdio.h>
#include <math.h>
// Function to get user input and return a double (or -1 if skipped)
double getInput( const char * prompt) {
char input[ 20 ] ; // Buffer for user input
fgets ( input
, sizeof ( input
) , stdin
) ;
double value;
if ( sscanf ( input
, "%lf" , & value
) == 1 ) { return value; // Valid number entered
}
return - 1 ; // User skipped input
}
int main( ) {
double voltage, current, resistance, power;
printf ( "\n === Ohm's Law Calculator ===\n \n " ) ;
// Get user input
voltage = getInput( "Enter Voltage (V) or press Enter to skip: " ) ;
current = getInput( "Enter Current (I) or press Enter to skip: " ) ;
resistance = getInput( "Enter Resistance (Ω) or press Enter to skip: " ) ;
power = getInput( "Enter Power (W) or press Enter to skip: " ) ;
// Convert skipped values (-1) to NaN for easier calculations
if ( voltage == - 1 ) voltage = NAN;
if ( current == - 1 ) current = NAN;
if ( resistance == - 1 ) resistance = NAN;
if ( power == - 1 ) power = NAN;
// Calculate missing values using Ohm’s Law
if ( isnan( voltage) && ! isnan( current) && ! isnan( resistance) )
voltage = current * resistance; // V = I * R
else if ( isnan( current) && ! isnan( voltage) && ! isnan( resistance) )
current = voltage / resistance; // I = V / R
else if ( isnan( resistance) && ! isnan( voltage) && ! isnan( current) )
resistance = voltage / current; // R = V / I
else if ( isnan( power) && ! isnan( voltage) && ! isnan( current) )
power = voltage * current; // P = V * I
// Calculate power if missing
if ( isnan( power) ) {
if ( ! isnan( voltage) && ! isnan( current) )
power = voltage * current; // P = V * I
else if ( ! isnan( current) && ! isnan( resistance) )
power
= pow ( current
, 2 ) * resistance
; // P = I² * R else if ( ! isnan( voltage) && ! isnan( resistance) )
power
= pow ( voltage
, 2 ) / resistance
; // P = V² / R }
// Display results
printf ( "\n --- Results ---\n " ) ; if ( ! isnan
( voltage
) ) printf ( "Voltage: %.2f V\n " , voltage
) ; if ( ! isnan
( current
) ) printf ( "Current: %.2f A\n " , current
) ; if ( ! isnan
( resistance
) ) printf ( "Resistance: %.2f Ω\n " , resistance
) ; if ( ! isnan
( power
) ) printf ( "Power: %.2f W\n " , power
) ;
printf ( "\n Press Enter to exit..." ) ; getchar ( ) ; // Pause before closing console return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyBGdW5jdGlvbiB0byBnZXQgdXNlciBpbnB1dCBhbmQgcmV0dXJuIGEgZG91YmxlIChvciAtMSBpZiBza2lwcGVkKQpkb3VibGUgZ2V0SW5wdXQoY29uc3QgY2hhciAqcHJvbXB0KSB7CiAgICBjaGFyIGlucHV0WzIwXTsgIC8vIEJ1ZmZlciBmb3IgdXNlciBpbnB1dAogICAgcHJpbnRmKCIlcyIsIHByb21wdCk7CiAgICBmZ2V0cyhpbnB1dCwgc2l6ZW9mKGlucHV0KSwgc3RkaW4pOwoKICAgIGRvdWJsZSB2YWx1ZTsKICAgIGlmIChzc2NhbmYoaW5wdXQsICIlbGYiLCAmdmFsdWUpID09IDEpIHsKICAgICAgICByZXR1cm4gdmFsdWU7ICAvLyBWYWxpZCBudW1iZXIgZW50ZXJlZAogICAgfQogICAgcmV0dXJuIC0xOyAgLy8gVXNlciBza2lwcGVkIGlucHV0Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIHZvbHRhZ2UsIGN1cnJlbnQsIHJlc2lzdGFuY2UsIHBvd2VyOwoKICAgIHByaW50ZigiXG49PT0gT2htJ3MgTGF3IENhbGN1bGF0b3IgPT09XG5cbiIpOwoKICAgIC8vIEdldCB1c2VyIGlucHV0CiAgICB2b2x0YWdlID0gZ2V0SW5wdXQoIkVudGVyIFZvbHRhZ2UgKFYpIG9yIHByZXNzIEVudGVyIHRvIHNraXA6ICIpOwogICAgY3VycmVudCA9IGdldElucHV0KCJFbnRlciBDdXJyZW50IChJKSBvciBwcmVzcyBFbnRlciB0byBza2lwOiAiKTsKICAgIHJlc2lzdGFuY2UgPSBnZXRJbnB1dCgiRW50ZXIgUmVzaXN0YW5jZSAozqkpIG9yIHByZXNzIEVudGVyIHRvIHNraXA6ICIpOwogICAgcG93ZXIgPSBnZXRJbnB1dCgiRW50ZXIgUG93ZXIgKFcpIG9yIHByZXNzIEVudGVyIHRvIHNraXA6ICIpOwoKICAgIC8vIENvbnZlcnQgc2tpcHBlZCB2YWx1ZXMgKC0xKSB0byBOYU4gZm9yIGVhc2llciBjYWxjdWxhdGlvbnMKICAgIGlmICh2b2x0YWdlID09IC0xKSB2b2x0YWdlID0gTkFOOwogICAgaWYgKGN1cnJlbnQgPT0gLTEpIGN1cnJlbnQgPSBOQU47CiAgICBpZiAocmVzaXN0YW5jZSA9PSAtMSkgcmVzaXN0YW5jZSA9IE5BTjsKICAgIGlmIChwb3dlciA9PSAtMSkgcG93ZXIgPSBOQU47CgogICAgLy8gQ2FsY3VsYXRlIG1pc3NpbmcgdmFsdWVzIHVzaW5nIE9obeKAmXMgTGF3CiAgICBpZiAoaXNuYW4odm9sdGFnZSkgJiYgIWlzbmFuKGN1cnJlbnQpICYmICFpc25hbihyZXNpc3RhbmNlKSkKICAgICAgICB2b2x0YWdlID0gY3VycmVudCAqIHJlc2lzdGFuY2U7ICAvLyBWID0gSSAqIFIKICAgIGVsc2UgaWYgKGlzbmFuKGN1cnJlbnQpICYmICFpc25hbih2b2x0YWdlKSAmJiAhaXNuYW4ocmVzaXN0YW5jZSkpCiAgICAgICAgY3VycmVudCA9IHZvbHRhZ2UgLyByZXNpc3RhbmNlOyAgLy8gSSA9IFYgLyBSCiAgICBlbHNlIGlmIChpc25hbihyZXNpc3RhbmNlKSAmJiAhaXNuYW4odm9sdGFnZSkgJiYgIWlzbmFuKGN1cnJlbnQpKQogICAgICAgIHJlc2lzdGFuY2UgPSB2b2x0YWdlIC8gY3VycmVudDsgIC8vIFIgPSBWIC8gSQogICAgZWxzZSBpZiAoaXNuYW4ocG93ZXIpICYmICFpc25hbih2b2x0YWdlKSAmJiAhaXNuYW4oY3VycmVudCkpCiAgICAgICAgcG93ZXIgPSB2b2x0YWdlICogY3VycmVudDsgIC8vIFAgPSBWICogSQoKICAgIC8vIENhbGN1bGF0ZSBwb3dlciBpZiBtaXNzaW5nCiAgICBpZiAoaXNuYW4ocG93ZXIpKSB7CiAgICAgICAgaWYgKCFpc25hbih2b2x0YWdlKSAmJiAhaXNuYW4oY3VycmVudCkpCiAgICAgICAgICAgIHBvd2VyID0gdm9sdGFnZSAqIGN1cnJlbnQ7ICAvLyBQID0gViAqIEkKICAgICAgICBlbHNlIGlmICghaXNuYW4oY3VycmVudCkgJiYgIWlzbmFuKHJlc2lzdGFuY2UpKQogICAgICAgICAgICBwb3dlciA9IHBvdyhjdXJyZW50LCAyKSAqIHJlc2lzdGFuY2U7ICAvLyBQID0gScKyICogUgogICAgICAgIGVsc2UgaWYgKCFpc25hbih2b2x0YWdlKSAmJiAhaXNuYW4ocmVzaXN0YW5jZSkpCiAgICAgICAgICAgIHBvd2VyID0gcG93KHZvbHRhZ2UsIDIpIC8gcmVzaXN0YW5jZTsgIC8vIFAgPSBWwrIgLyBSCiAgICB9CgogICAgLy8gRGlzcGxheSByZXN1bHRzCiAgICBwcmludGYoIlxuLS0tIFJlc3VsdHMgLS0tXG4iKTsKICAgIGlmICghaXNuYW4odm9sdGFnZSkpIHByaW50ZigiVm9sdGFnZTogJS4yZiBWXG4iLCB2b2x0YWdlKTsKICAgIGlmICghaXNuYW4oY3VycmVudCkpIHByaW50ZigiQ3VycmVudDogJS4yZiBBXG4iLCBjdXJyZW50KTsKICAgIGlmICghaXNuYW4ocmVzaXN0YW5jZSkpIHByaW50ZigiUmVzaXN0YW5jZTogJS4yZiDOqVxuIiwgcmVzaXN0YW5jZSk7CiAgICBpZiAoIWlzbmFuKHBvd2VyKSkgcHJpbnRmKCJQb3dlcjogJS4yZiBXXG4iLCBwb3dlcik7CgogICAgcHJpbnRmKCJcblByZXNzIEVudGVyIHRvIGV4aXQuLi4iKTsKICAgIGdldGNoYXIoKTsgIC8vIFBhdXNlIGJlZm9yZSBjbG9zaW5nIGNvbnNvbGUKICAgIHJldHVybiAwOwp9Cg==
stdin
LyogIEJlcmVjaG51bmcgZGVzIEhhbW1pbmctQWJzdGFuZGVzIHp3aXNjaGVuIHp3ZWkgMTI4LUJpdCBXZXJ0ZW4gaW4gCSovCi8qCWVpbmVyIFRleHRkYXRlaS4gCQkJCQkJCQkJCQkJCSovCi8qICBEaWUgV2VydGUgbSZ1dW1sO3NzZW4gYXVmIGVpbmVyIHNlcGFyYXRlbiBaZWlsZSBnZXNwZWljaGVydCBzZWluCQkJKi8KLyogCQkJCQkJCQkJCQkJCQkJCQkJKi8KLyoJRXJzdGVsbHQ6IDE3LjUuMjAxMAkJCQkJCQkJCQkJCQkqLwovKiAgQXV0b3I6IFRob21hcyBTY2hlZmZsZXIJCQkJCQkJCQkJCQkqLwoKI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKCiNkZWZpbmUgQVJSQVlfU0laRSAzMgoKdW5zaWduZWQgSGFtZGlzdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQp7CiAgdW5zaWduZWQgZGlzdCA9IDAsIHZhbCA9IHggXiB5OwogCiAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBzZXQgYml0cwogIHdoaWxlKHZhbCkKICB7CiAgICArK2Rpc3Q7IAogICAgdmFsICZhbXA7PSB2YWwgLSAxOwogIH0KIAogIHJldHVybiBkaXN0Owp9CgoKCmludCBtYWluICh2b2lkKQp7CgljaGFyIGhleDsKCWludCBpOwoJaW50IGFbQVJSQVlfU0laRV07CglpbnQgYltBUlJBWV9TSVpFXTsKCWludCBoYW1EaXN0ID0gMDsKCUZJTEUqIGZwOwoJCgkvL0FycmF5cyBtaXQgMCBpbml0aWFsaXNpZXJlbgoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkU7ICsraSkKCXsKICAJCWFbaV0gPSAwOwogIAkJYltpXSA9IDA7Cgl9CgoJCglmcCA9IGZvcGVuKCZxdW90O2hleC50eHQmcXVvdDssJnF1b3Q7ciZxdW90Oyk7CglpZiAoZnAgPT0gTlVMTCkgCgl7CgkJcHJpbnRmKCZxdW90O0RpZSBEYXRlaSBoZXgudHh0IHd1cmRlIG5pY2h0IGdlZnVuZGVuISZxdW90Oyk7CgkJZXhpdChFWElUX0ZBSUxVUkUpOwoJfQoKCWk9MDsKCXByaW50ZigmcXVvdDsxLlplaWxlIGVpbmxlc2VuLlxuJnF1b3Q7KTsKCiAJd2hpbGUoKGhleD1mZ2V0YyhmcCkpIT0nXG4nICZhbXA7JmFtcDsgaGV4ICE9IEVPRikKICAgIHsKICAgICAgICBhW2ldPXN0cnRvbCgmYW1wO2hleCwwLDE2KTsKCQlpKys7CiAgICB9CglpPTA7CglwcmludGYoJnF1b3Q7Mi5aZWlsZSBlaW5sZXNlbi5cbiZxdW90Oyk7CgogCXdoaWxlKChoZXg9ZmdldGMoZnApKSE9J1xuJyAmYW1wOyZhbXA7IGhleCAhPSBFT0YpCiAgICB7CiAgICAJYltpXT1zdHJ0b2woJmFtcDtoZXgsMCwxNik7CiAgICAgICAgaSsrOwogICAgfQoJZmNsb3NlKGZwKTsKCglwcmludGYoJnF1b3Q7SGFtbWluZy1BYndlaWNodW5nIHBybyBOaWJibGU6XG4mcXVvdDspOwoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkU7ICsraSkKCXsKCQlwcmludGYgKCZxdW90OyVpXHQlaVx0JWlcbiZxdW90OyxhW2ldLGJbaV0sSGFtZGlzdChhW2ldLGJbaV0pKTsKCQloYW1EaXN0ICs9IEhhbWRpc3QoYVtpXSxiW2ldKTsKCX0KCXByaW50ZiAoJnF1b3Q7XG5IYW1taW5nLUFid2VpY2h1bmcgZGVyIEhhc2gtV2VydGU6JWRcbiZxdW90OyxoYW1EaXN0KTsKfQoK
/* 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);
}