#include <stdio.h>
#include <stdlib.h>
int e_resistance( float orig_resistance, float * res_array) ;
float getClosestValue( float ohm) ;
float calc_resistance ( int count, char conn, float * array) ;
int main ( ) {
float voltage;
int no_of_components;
scanf ( "%d" , & no_of_components
) ;
//Allocate dynamic space for an array
float * array;
array
= malloc ( no_of_components
* sizeof ( float ) ) ;
int i = 0 ; //counter for each component
float ohmsize;
while ( i < no_of_components) {
printf ( "Component %d in ohm: " , i
+ 1 ) ;
if ( ! ( ohmsize > 0.0001 ) ) {
continue ;
}
else {
array[ i] = ohmsize;
i++;
}
}
char input;
int valid_input = 0 ;
while ( valid_input == 0 ) {
printf ( "Connection serial or parallel [S|P]: " ) ; if ( ( input== 'S' ) || ( input== 'P' ) || ( input== 's' ) || ( input== 'p' ) ) {
valid_input = 1 ;
}
}
float res = calc_resistance( no_of_components, input, array) ;
printf ( "Resplacing resistor: %.0fohm\n " , res
) ; float * p_array; //pointer
p_array
= malloc ( sizeof ( float ) * 3 ) ; //arrayen, 3 element
//call function that returns no of needed replacement resistors
int x = e_resistance( res, p_array) ;
printf ( "New resistor 1: %f\n " , p_array
[ 0 ] ) ; if ( x
> 1 ) printf ( "New resistor 2: %f\n " , p_array
[ 1 ] ) ; if ( x
> 2 ) printf ( "New resistor 3: %f\n " , p_array
[ 2 ] ) ;
printf ( "No of new resistors: %d" , x
) ;
return 0 ;
}
//********************************************************************
/*function to replace resistor-values with the closest one
from the e12-series, saved hard-coded above */
int e_resistance( float orig_resistance, float * res_array) {
float r1 = 0 ;
float r2 = 0 ;
float r3 = 0 ;
float tmp;
int counter = 0 ;
if ( orig_resistance > 0.0001 ) {
r1 = getClosestValue( orig_resistance) ;
res_array[ 0 ] = r1;
if ( r1 > 0.0001 ) {
counter = counter + 1 ;
}
//difference saved in tmp
tmp = orig_resistance - r1;
if ( tmp > 0.0001 ) {
r2 = getClosestValue( tmp) ;
res_array[ 1 ] = r2;
if ( r2 > 0.0001 ) {
counter = counter + 1 ;
}
}
tmp = tmp - r2;
if ( tmp > 0.0001 ) {
r3 = getClosestValue( tmp) ;
res_array[ 2 ] = r3;
if ( r3 > 0.0001 ) {
counter = counter + 1 ;
}
}
}
//printf("%d\n", counter);
return counter; //this counter is usually returned as "0", even though the counter above is for example "2"
}
//*******************************************************************
//function to return the closest value in the e12-serie to the incoming parameter
float getClosestValue( float ohm) {
const float tolerance= 1.5 ;
float e12[ ] = { 10 , 12 , 15 , 18 , 22 , 27 , 33 , 39 , 47 , 56 , 68 , 82 , 100 , 120 , 150 , 180 , 220 , 270 , 330 , 390 , 470 , 560 , 680 , 820 , 1000 , 1200 , 1500 , 1800 , 2200 , 2700 , 3300 , 3900 , 4700 , 5600 , 6800 , 8200 , 10000 , 12000 , 15000 , 18000 , 22000 , 27000 , 33000 , 39000 , 47000 , 56000 , 68000 , 82000 , 100000 , 120000 , 150000 , 180000 , 220000 , 270000 , 330000 , 390000 , 470000 , 560000 , 680000 , 820000 , 1000000 } ;
int i;
for ( i= 0 ; i< ( sizeof ( e12) / sizeof ( e12[ 0 ] ) ) ; i++ ) {
if ( ohm+ tolerance > e12[ i] && ohm- tolerance < e12[ i] )
return e12[ i] ;
else if ( e12[ i] > ohm)
return i? e12[ i- 1 ] : 0 ;
}
return 0 ;
}
//**********************************************************************
float calc_resistance ( int count, char conn, float * array)
{
float res = 0 ; //resistance
int i = 0 ; //counter variable
if ( count > 0 )
{
switch ( conn)
{
//serial
case 's' :
case 'S' : {
for ( ; i < count; i++ )
{
res += * ( array+ i) ;
}
}
break ;
//parallel
case 'p' :
case 'P' : {
for ( ; i < count; i++ )
{
res += 1.0 / * ( array+ i) ;
//printf(" %f\n", r);
}
res = 1 / res;
}
break ;
default :
return - 1 ;
break ;
}
return res;
}
else
{
return - 1 ;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBlX3Jlc2lzdGFuY2UoZmxvYXQgb3JpZ19yZXNpc3RhbmNlLCBmbG9hdCAqcmVzX2FycmF5KTsKZmxvYXQgZ2V0Q2xvc2VzdFZhbHVlKGZsb2F0IG9obSk7CmZsb2F0IGNhbGNfcmVzaXN0YW5jZSAoaW50IGNvdW50LCBjaGFyIGNvbm4sIGZsb2F0ICphcnJheSk7CgppbnQgbWFpbiAoKSB7CiAgCiAgZmxvYXQgdm9sdGFnZTsKICBwcmludGYoIlBvd2VyIGluIFY6ICIgKTsKICBzY2FuZigiJWYiLCAmdm9sdGFnZSk7CgogIGludCBub19vZl9jb21wb25lbnRzOwogIHByaW50ZigiTm8gb2YgY29tcG9uZW50czogIik7CiAgc2NhbmYoIiVkIiwgJm5vX29mX2NvbXBvbmVudHMpOwoKICAvL0FsbG9jYXRlIGR5bmFtaWMgc3BhY2UgZm9yIGFuIGFycmF5CiAgZmxvYXQgKmFycmF5OwogIGFycmF5ID0gbWFsbG9jKG5vX29mX2NvbXBvbmVudHMgKiBzaXplb2YoZmxvYXQpKTsKCiAgaW50IGkgPSAwOyAvL2NvdW50ZXIgZm9yIGVhY2ggY29tcG9uZW50CiAgZmxvYXQgb2htc2l6ZTsKICAKICB3aGlsZShpIDwgbm9fb2ZfY29tcG9uZW50cyl7CiAgIHByaW50ZigiQ29tcG9uZW50ICVkIGluIG9obTogIiwgaSsxKTsKICAgc2NhbmYoIiVmIiwgJm9obXNpemUpOwoKICAgIGlmICghKG9obXNpemUgPiAwLjAwMDEpKXsKICAgICAgY29udGludWU7CiAgICB9CiAgICBlbHNlewogICAgICBhcnJheVtpXSA9IG9obXNpemU7CiAgICAgICBpKys7CiAgICB9CiAgfQoKIGNoYXIgaW5wdXQ7CiBpbnQgdmFsaWRfaW5wdXQgPSAwOwoKIHdoaWxlKHZhbGlkX2lucHV0ID09IDApewogIHByaW50ZigiQ29ubmVjdGlvbiBzZXJpYWwgb3IgcGFyYWxsZWwgW1N8UF06ICIpOwogIHNjYW5mKCIlYyIsICZpbnB1dCk7CiAgIGlmKChpbnB1dD09J1MnKXx8KGlucHV0PT0nUCcpfHwoaW5wdXQ9PSdzJyl8fChpbnB1dD09J3AnKSl7CiAgICAgdmFsaWRfaW5wdXQgPSAxOwogICB9CiB9CgogZmxvYXQgcmVzID0gY2FsY19yZXNpc3RhbmNlKG5vX29mX2NvbXBvbmVudHMsIGlucHV0LCBhcnJheSk7CgogcHJpbnRmKCJSZXNwbGFjaW5nIHJlc2lzdG9yOiAlLjBmb2htXG4iLCByZXMpOwogZmxvYXQgKnBfYXJyYXk7IC8vcG9pbnRlcgogcF9hcnJheSA9IG1hbGxvYyhzaXplb2YoZmxvYXQpKjMpOyAvL2FycmF5ZW4sIDMgZWxlbWVudAoKIC8vY2FsbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgbm8gb2YgbmVlZGVkIHJlcGxhY2VtZW50IHJlc2lzdG9ycwogaW50IHggPSBlX3Jlc2lzdGFuY2UocmVzLCBwX2FycmF5KTsKCiBwcmludGYoIk5ldyByZXNpc3RvciAxOiAlZlxuIiwgcF9hcnJheVswXSk7CiBpZiAoeD4xKSBwcmludGYoIk5ldyByZXNpc3RvciAyOiAlZlxuIiwgcF9hcnJheVsxXSk7CiBpZiAoeD4yKSBwcmludGYoIk5ldyByZXNpc3RvciAzOiAlZlxuIiwgcF9hcnJheVsyXSk7CgogcHJpbnRmKCJObyBvZiBuZXcgcmVzaXN0b3JzOiAlZCIsIHgpOwoKIHJldHVybiAwOwp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgovKmZ1bmN0aW9uIHRvIHJlcGxhY2UgcmVzaXN0b3ItdmFsdWVzIHdpdGggdGhlIGNsb3Nlc3Qgb25lCmZyb20gdGhlIGUxMi1zZXJpZXMsIHNhdmVkIGhhcmQtY29kZWQgYWJvdmUgKi8KaW50IGVfcmVzaXN0YW5jZShmbG9hdCBvcmlnX3Jlc2lzdGFuY2UsIGZsb2F0ICpyZXNfYXJyYXkpewoKIGZsb2F0IHIxID0gMDsKIGZsb2F0IHIyID0gMDsKIGZsb2F0IHIzID0gMDsKCiBmbG9hdCB0bXA7CgogaW50IGNvdW50ZXIgPSAwOwogaWYob3JpZ19yZXNpc3RhbmNlID4gMC4wMDAxKXsKICAgcjEgPSBnZXRDbG9zZXN0VmFsdWUob3JpZ19yZXNpc3RhbmNlKTsKICAgICByZXNfYXJyYXlbMF0gPSByMTsKICAgICBpZihyMSA+IDAuMDAwMSl7CiAgICAgIGNvdW50ZXIgPSBjb3VudGVyICsgMTsKICAgICB9CgogICAgLy9kaWZmZXJlbmNlIHNhdmVkIGluIHRtcAogICB0bXAgPSBvcmlnX3Jlc2lzdGFuY2UgLSByMTsKICAgCiAgaWYodG1wID4gMC4wMDAxKXsKICAgcjIgPSBnZXRDbG9zZXN0VmFsdWUodG1wKTsKICAgICByZXNfYXJyYXlbMV0gPSByMjsKICAgIGlmKHIyID4gMC4wMDAxKXsKICAgICBjb3VudGVyID0gY291bnRlciArIDE7CiAgICB9CiAgfQoKICAgdG1wID0gdG1wIC0gcjI7CgogIGlmKHRtcCA+IDAuMDAwMSl7CiAgIHIzID0gZ2V0Q2xvc2VzdFZhbHVlKHRtcCk7CiAgICByZXNfYXJyYXlbMl0gPSByMzsKICAgIGlmKHIzID4gMC4wMDAxKXsKICAgICBjb3VudGVyID0gY291bnRlciArIDE7CiAgICB9CiAgfQogfQogLy9wcmludGYoIiVkXG4iLCBjb3VudGVyKTsKCiByZXR1cm4gY291bnRlcjsgLy90aGlzIGNvdW50ZXIgaXMgdXN1YWxseSByZXR1cm5lZCBhcyAiMCIsIGV2ZW4gdGhvdWdoIHRoZSBjb3VudGVyIGFib3ZlIGlzIGZvciBleGFtcGxlICIyIgp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCi8vZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBjbG9zZXN0IHZhbHVlIGluIHRoZSBlMTItc2VyaWUgdG8gdGhlIGluY29taW5nIHBhcmFtZXRlcgpmbG9hdCBnZXRDbG9zZXN0VmFsdWUoZmxvYXQgb2htKXsKIGNvbnN0IGZsb2F0IHRvbGVyYW5jZT0xLjU7CiAKIGZsb2F0IGUxMltdID0gezEwLCAxMiwgMTUsIDE4LCAyMiwgMjcsIDMzLCAzOSwgNDcsIDU2LCA2OCwgODIsIDEwMCwgMTIwLCAxNTAsIDE4MCwgMjIwLCAyNzAsIDMzMCwgMzkwLCA0NzAsIDU2MCwgNjgwLCA4MjAsIDEwMDAsIDEyMDAsIDE1MDAsIDE4MDAsIDIyMDAsIDI3MDAsIDMzMDAsIDM5MDAsIDQ3MDAsIDU2MDAsIDY4MDAsIDgyMDAsIDEwMDAwLCAxMjAwMCwgMTUwMDAsIDE4MDAwLCAyMjAwMCwgMjcwMDAsIDMzMDAwLCAzOTAwMCwgNDcwMDAsIDU2MDAwLCA2ODAwMCwgODIwMDAsIDEwMDAwMCwgMTIwMDAwLCAxNTAwMDAsIDE4MDAwMCwgMjIwMDAwLCAyNzAwMDAsIDMzMDAwMCwgMzkwMDAwLCA0NzAwMDAsIDU2MDAwMCwgNjgwMDAwLCA4MjAwMDAsIDEwMDAwMDB9OwkKIAogaW50IGk7CgogZm9yKGk9MDsgaTwoc2l6ZW9mKGUxMikvc2l6ZW9mKGUxMlswXSkpOyBpKyspewogIGlmKG9obSt0b2xlcmFuY2UgPiBlMTJbaV0gJiYgb2htLXRvbGVyYW5jZSA8IGUxMltpXSkKICAgcmV0dXJuIGUxMltpXTsKICBlbHNlIGlmIChlMTJbaV0gPiBvaG0pCiAgIHJldHVybiBpP2UxMltpLTFdOjA7CiB9CnJldHVybiAwOwp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCmZsb2F0IGNhbGNfcmVzaXN0YW5jZSAoaW50IGNvdW50LCBjaGFyIGNvbm4sIGZsb2F0ICphcnJheSkKewogICAgICAgIGZsb2F0IHJlcyA9IDA7IC8vcmVzaXN0YW5jZQogICAgICAgIGludCBpID0gMDsgLy9jb3VudGVyIHZhcmlhYmxlCgogICAgICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2goY29ubikKICAgICAgICAgICAgewogICAgICAgICAgICAgIC8vc2VyaWFsCiAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgY2FzZSAnUyc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9ICooYXJyYXkraSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIC8vcGFyYWxsZWwKICAgICAgICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgICBjYXNlICdQJzogewogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSAxLjAvICooYXJyYXkraSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIiAlZlxuIiwgcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gMS9yZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICByZXR1cm4gLTE7CiB9Cn0K