/* /* /* Autor: Andreas Vacek /* MatrNr.: 0125710 /* BspNr.: 1140 /** Kurzbeschreibung: Das Programm liest einen Ohm'schen Widerstandswert ein und gibt den entsprechenden Farbcode zurueck. Wertebereich: 1ohm <= x < 999e9 ohm */ public class farbcode extends EprogIO { public static void perform(String parameter) { String eingabe_String = ""; //Initialisierung der Werte long hilfswert_Long = 0; long wid_wert_Long = 0; int schleifen_Int = 0; int hilfsvariable_Int = 0; int eingabe_laenge_Int = 0; int komma_stelle_Int = 0; char multiplikator_Char = ' '; boolean fehler = false; boolean tolong = false; //Eingabe... eingabe_String = parameter; eingabe_laenge_Int = eingabe_String.length(); //Überprüfung ob Fehler bei der Eingabe for (schleifen_Int = 0; schleifen_Int < eingabe_laenge_Int; schleifen_Int++) { char zeichen_Char = eingabe_String.charAt(schleifen_Int); // testet ob Multiplikationszeichen vorhanden sind if (zeichen_Char == 'M' || zeichen_Char == 'K' || zeichen_Char == 'R' || zeichen_Char == '.') { ++hilfsvariable_Int; if (schleifen_Int == (eingabe_laenge_Int - 1)) fehler = true; if (hilfsvariable_Int > 1) //Fehler wenn mehr als 1 Multiplikator //gefunden wurde { fehler = true; break; } multiplikator_Char = zeichen_Char; komma_stelle_Int = schleifen_Int; } //Ende der Multiplikatorabfrage else // Fehler wenn unzulässiges Zeiche eingegeben wurde { if (!(zeichen_Char >= '0' && zeichen_Char <= '9' || zeichen_Char == 'M' || zeichen_Char == 'K' || zeichen_Char == 'R' || zeichen_Char == '.')) { fehler = true; break; }//end if }//end else }// end for-Schleife //Neuen String erzeugen; Enthält Widerstandswert ohne Komma String wid_wert_String = eingabe_String.substring(0, komma_stelle_Int); wid_wert_String += eingabe_String.substring(komma_stelle_Int + 1); //Neuer Integer; Enthält den Exponenten der Zahl (z.B.: E6) int exponent_Int = (komma_stelle_Int + 1) - eingabe_laenge_Int; if (!(wid_wert_String.length() >= 2)) fehler = true;//Wenn die Länge des Widerstandswertes kleiner als 2 ist ==> Fehler; if (!(fehler)) //Wenn kein Fehler { do //Bei der Umwandlung des String-Wertes in einen Long-Wert, // kann ein Fehler entstehen wenn der Zahlenwert zu lange ist { try { tolong = false; wid_wert_Long = Long.parseLong(wid_wert_String); } catch (NumberFormatException e) //Wenn Fehler auftritt, dann wird die Nachkommastelle // so lange abgeschnitten, bis kein Fehler mehr vorhanden ist { wid_wert_String = wid_wert_String.substring(0, wid_wert_String.length() - 1); if (exponent_Int < 0) ++exponent_Int; //der Exponent muß je nach seinem Wert else --exponent_Int; //angepaßt werden tolong = true; } } while (tolong); //Wenn der Wert nicht zu lange ist wird die Schleife nicht mehr widerholt switch (multiplikator_Char) //Der Exponent wird um den jeweiligen //Multiplikationsfaktor erhöht; { case 'M': exponent_Int += 6; break; case 'K': exponent_Int += 3; break; } //end switch(multiplikator_Char) } // der größt mögliche Wert wird ermittelt... double fehlerWert = wid_wert_Long; if (exponent_Int >= 0) for (schleifen_Int = 0; schleifen_Int < exponent_Int; schleifen_Int++) fehlerWert *= 1E1; else for (schleifen_Int = exponent_Int; schleifen_Int < 0; schleifen_Int++) fehlerWert /= 10; //Grenzwerte werden abgefragt if (fehlerWert > 999E9 || fehlerWert < 1) fehler = true; // Grössenkontrolle abgeschlossen... if (fehler) { println("FALSCHE EINGABE"); } // Wenn die Eingabe richtig war else { //Der bearbeite Wert wird neu übergeben wid_wert_String = String.valueOf(wid_wert_Long); //Der String wird auf die Mindestgrösse gebracht //Es müssen mindestens 3 Stellen ausgegeben werden if (wid_wert_String.length() == 2) { wid_wert_String += "0"; exponent_Int -= 1; } //Der String wird auf die Mindestgrösse gebracht if (wid_wert_String.length() == 1) { wid_wert_String += "00"; exponent_Int -= 2; } //Der Exponent wird für die drei Stelen ermittelt; exponent_Int += (wid_wert_String.length() - 3); //Die Nachkommastellen werden ausgelesen... if (wid_wert_String.length() > 3) hilfswert_Long = Long.parseLong(wid_wert_String.substring(3)); else hilfswert_Long = 0; wid_wert_Long = Long.parseLong(wid_wert_String.substring(0, 3)); //Wenn nachkomma-Wert vorhanden, dann muß der nächst grösere //und anschließend der nächst kleinere Wert ausgegeben werden if (hilfswert_Long != 0) { //Ausgabe des erhöhten Widerstandswertes println("[" + farbe(String.valueOf(++wid_wert_Long)) + " " + multi_FarbW(exponent_Int) + "] "); --wid_wert_Long; //Widerstandswert verringern } else { println("[" + farbe(String.valueOf(wid_wert_Long)) + " " + multi_FarbW(exponent_Int) + "]"); } } //Ende der Widerstandbestimmung und Ausgabe }//Ende: method main //Bestimmt den Farbwert des Widerstandswertes static String farbe(String sub_String) { int schleifen_Int; int zaehler_Int = 0; String farbe[] = new String[3]; String farbwahl_String; for (schleifen_Int = 0; schleifen_Int < 3; schleifen_Int++) farbe[schleifen_Int] = ""; //initialisiert die Strings: farbe[] for (schleifen_Int = 0; schleifen_Int < sub_String.length(); schleifen_Int++) { if (zaehler_Int == 3) break;//Wenn drei Farben gefunden, dann abbruch der Schleife switch (sub_String.charAt(schleifen_Int)) { case '0': if (schleifen_Int > 0) farbe[zaehler_Int++] = "sw";//Es darf nicht die linke Ziffernstelle mit null ("sw") belegt werden; break; case '1': farbe[zaehler_Int++] = "br"; break; case '2': farbe[zaehler_Int++] = "rt"; break; case '3': farbe[zaehler_Int++] = "or"; break; case '4': farbe[zaehler_Int++] = "ge"; break; case '5': farbe[zaehler_Int++] = "gn"; break; case '6': farbe[zaehler_Int++] = "bl"; break; case '7': farbe[zaehler_Int++] = "vi"; break; case '8': farbe[zaehler_Int++] = "gr"; break; case '9': farbe[zaehler_Int++] = "ws"; break; }// end switch(eingabe_String.charAt(schleifen_Int)) }//end for-Schleife farbwahl_String = (farbe[0] + " " + farbe[1] + " " + farbe[2]); return farbwahl_String; }// ende: farbe-Methode //Bestimmt dem Multiplikationsfarbwert static String multi_FarbW(int exponent) { String s = ""; switch (exponent) { case 0: s = "sw"; break; case 1: s = "br"; break; case 2: s = "rt"; break; case 3: s = "or"; break; case 4: s = "ge"; break; case 5: s = "gn"; break; case 6: s = "bl"; break; case 7: s = "vi"; break; case 8: s = "gr"; break; case 9: s = "ws"; break; case -1: s = "go"; break; case -2: s = "si"; break; }// end switch(exponent) return s; }//Ende Multiplikator Umwandlung }//Ende: class farbcode