C# :: Aufgabe #262 :: Lösung #7
8 Lösungen
#262
Array von Zahlen in die nächstgelegene durch 5 teilbare Zahl umwandeln
Anfänger - C#
von Gustl
- 08.05.2019 um 20:08 Uhr
Schreibe ein Programm welches aus einem Array von Dezimalzahlen diese Zahlen in die nächstgelegene durch 5 teilbare Zahl umwandeln.
Etwa so:
Etwa so:
Konsolenausgabe:
7.1 => 5
8.4 => 10
-2.4 => 0
-2.6 => -5
-8.3 => -10
#7
von Developer# (50 Punkte)
- 29.10.2019 um 17:51 Uhr
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _5_Divisble_Array
{
class Program
{
static void Main(string[] args)
{
double[] arr = new double[5];
arr[0] = 7.1;
arr[1] = 8.4;
arr[2] = -2.4;
arr[3] = -2.6;
arr[4] = -8.3;
double[] newArr = DivisibleTo5(arr);
PrintArr(arr, newArr);
Console.Read();
}
static double[] DivisibleTo5(double[] arr)
{
double[] newArr = new double[arr.Length];
int subNum = 0;
int addNum = 0;
bool isBreak = false;
//Algorithmus: Zahl zu erst zu einer geraden zahl ohne komma machen und immer
//um 1 erhöhen und um 1 subtrahieren(dann um 2 erhöhen und subtrahieren,3...)
//und schauen ob die Zahl durch 5 tielbar ist
for (int i = 0; i < arr.Length; i++)
{
int num = MakeKommaWeg(arr[i]); //7.1 --> 7
int counter = 1;
isBreak = false;
while (!isBreak)
{
addNum = num + counter; //8 dann 9 usw...
subNum = num - counter; //6 dann 5 usw...
if (addNum % 5 == 0)
{
newArr[i] = addNum;
isBreak = true;
}
else if (subNum % 5 == 0)
{
newArr[i] = subNum;
isBreak = true;
}
counter++;
}
}
return newArr;
}
static int MakeKommaWeg(double number)
{
string str = Convert.ToString(number); //7.1
string afterKommaStelle = "";
string vorKommaStelle = "";
bool isBreak = false;
int i = 0;
//Nachkomma- und Vorkommastellen herausfiltern
while(i < str.Length || !isBreak)
{
if (str[i] == ',')
{
while (!isBreak)
{
afterKommaStelle += str[i + 1]; //7.1 --> 1
isBreak = true;
i++;
}
}
else
{
vorKommaStelle += str[i];
}
i++;
}
if (int.Parse(afterKommaStelle) >= 0 && int.Parse(afterKommaStelle) <= 4)
{
//abgerundeten Wert returnen
return int.Parse(vorKommaStelle); //7
}
else //if (int.Parse(afterKommaStelle) >= 5 && int.Parse(afterKommaStelle) <= 9)
{
//aufgerundeten Wert returnen
int strInt = int.Parse(vorKommaStelle); //bsp -2
if (strInt < 0)//-2 -->true
{
return strInt - 1; //-2 - 1 --> -3 aufrunden
}
return strInt + 1;
}
}
static void PrintArr(double[] arr, double[] newArr)
{
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine($"{arr[i],4} =>{newArr[i],3}");
}
}
}
}Zitat:
Es ist vielleicht bisschen kompliziert und uneffizient aber es funktioniert xd.
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
