C# :: Aufgabe #262

8 Lösungen Lösungen öffentlich

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:

Konsolenausgabe:

 7.1 => 5
8.4 => 10
-2.4 => 0
-2.6 => -5
-8.3 => -10

Lösungen:

2x
vote_ok
von hollst (13980 Punkte) - 09.05.2019 um 09:11 Uhr
Quellcode ausblenden C#-Code
using System;
using static System.Console;
using System.Collections.Generic;

namespace Aufgabe_262 //Array von (reellen) Zahlen in die (jeweils) nächstgelegene (restlos) durch 5 teilbare Zahl umwandeln    

{
    class Program
    {
        static void Main()
        {
            bool bo_loop = true;
            Random rand = new Random();
            double xmax = 1000.0;
            List<double> l_double = new List<double>();
            List<int> l_int = new List<int>();

            while (bo_loop)
            {
                double x = xmax * (rand.NextDouble() - 0.5);
                l_double.Add(x);
                int i = (int)(5.0 * Math.Round(x / 5.0));
                l_int.Add(i);

                WriteLine($"{x.ToString("0.0000"), 10} -> {i, 5}       for next double press any key (ESC for exit)");

                ConsoleKeyInfo ki = ReadKey(true);
                bo_loop = ki.Key != ConsoleKey.Escape;
            }

            double[] a_double = l_double.ToArray();
            int[] a_int = l_int.ToArray();

            WriteLine("ready");
            ReadKey();
        }
    }
}
2 Kommentare
1x
vote_ok
von DBqFetti (2480 Punkte) - 24.05.2019 um 10:48 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		double[] _in = {7.1, 8.4, -2.4, -2.6, -8.3};
		double[] _out = _in.Select(x => round(x, 5)).ToArray();
		
		for(int i = 0; i < _in.Length; i++){
			Console.WriteLine("{0} => {1}", _in[i], _out[i]);
		}
	}
	
	private static int round(int val, int factor){
		return (int)(Math.Round((double)val / (double)factor, 0) * factor);
	}
	
	private static float round(float val, float factor){
		return (float)(Math.Round((double)val / (double)factor, 0) * factor);
	}
	
	private static double round(double val, double factor){
		return Math.Round(val / factor, 0) * factor;
	}
	
	private static decimal round(decimal val, decimal factor){
		return Math.Round(val / factor, 0) * factor;
	}
}
vote_ok
von Gisbert5020 (3120 Punkte) - 30.05.2019 um 20:12 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Text;

namespace Teilung5
{
    class Program
    {
        static void Main(string[] args)
        {
            float[] arr = new float[5];
            arr[0] = 7.1f;
            arr[1] = 8.4f;
            arr[2] = -2.4f;
            arr[3] = -2.6f;
            arr[4] = -8.3f;
            foreach(float i in arr)
            {
                int ganz = Convert.ToInt32(i/5);
                float dez = i / 5;
                float div = dez - ganz;
                int wert;
                if (div >= 0.5)
                {
                    wert = (ganz + 1) * 5;
                    Console.WriteLine(i + " => " + wert);
                }
                else
                {
                    wert = ganz * 5;
                    Console.WriteLine(i + " => " + wert);
                }
            }
            Console.ReadLine();
        }
    }
}
2 Kommentare
vote_ok
von Kotgreifer (1100 Punkte) - 12.06.2019 um 11:28 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;

namespace Split5
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numbers = new List<int> { 15, 1, 5, 88, -14, 7, -21, 42, 29, 36, 74 };

            foreach (int number in numbers)
            {
                double erg;
                double m = number % 5;
                if (m < 2.5)
                    erg = number - m;
                else
                    erg = number + (5 - m);
                Console.WriteLine(number + " => " + erg);
            }
            Console.Read();
        }
    }
}
vote_ok
von bebbe80 (300 Punkte) - 21.06.2019 um 23:43 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Train
{
  
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Wie lang soll der Array werden?");
            int zahl = int.Parse(Console.ReadLine());

            for (int i = 0; i <= zahl-1; i++)
            {
                Console.WriteLine("Geben sie eine Zahl ein");
                double[] arr = new double[zahl];
                arr[i] = double.Parse(Console.ReadLine());
                double[] arrumgewandelt = new double[zahl];
               
                if (arr[i] % 5 == 0)
                    {
                        arrumgewandelt[i] = arr[i];
                    }
                if ((arr[i] % 5) != 0 && (arr[i] % 5) <= 2.5 && arr[i] > 0)
                    {
                        arrumgewandelt[i] = arr[i] - (arr[i] % 5);
                    }
                if ((arr[i] % 5) != 0 && (Math.Abs(arr[i] % 5)) <= 2.5 && arr[i] < 0)
                        {
                            arrumgewandelt[i] = (arr[i] - (arr[i] % 5));
                        }
                if ((arr[i] % 5) != 0 && (arr[i] % 5) > 2.5 && arr[i] > 0)
                {
                        arrumgewandelt[i] = (arr[i] - (arr[i] % 5) + 5);
                }
                if ((arr[i] % 5) != 0 && (Math.Abs(arr[i] % 5)) > 2.5 && arr[i] < 0)
                {
                    arrumgewandelt[i] = (arr[i] - (arr[i] % 5) - 5);
                }                
                   
                Console.WriteLine("Die Zahl " + arr[i] + " lautet umgewandelt " + arrumgewandelt[i]);
            }
            Console.ReadLine();
            
              
        
        }
    }
}
vote_ok
von bebbe80 (300 Punkte) - 21.06.2019 um 23:46 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Train
{
  
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Wie lang soll der Array werden?");
            int zahl = int.Parse(Console.ReadLine());

            for (int i = 0; i <= zahl-1; i++)
            {
                Console.WriteLine("Geben sie eine Zahl ein");
                double[] arr = new double[zahl];
                arr[i] = double.Parse(Console.ReadLine());
                double[] arrumgewandelt = new double[zahl];
               
                if (arr[i] % 5 == 0)
                    {
                        arrumgewandelt[i] = arr[i];
                    }
                if ((arr[i] % 5) != 0 && (arr[i] % 5) <= 2.5 && arr[i] > 0)
                    {
                        arrumgewandelt[i] = arr[i] - (arr[i] % 5);
                    }
                if ((arr[i] % 5) != 0 && (Math.Abs(arr[i] % 5)) <= 2.5 && arr[i] < 0)
                        {
                            arrumgewandelt[i] = (arr[i] - (arr[i] % 5));
                        }
                if ((arr[i] % 5) != 0 && (arr[i] % 5) > 2.5 && arr[i] > 0)
                {
                        arrumgewandelt[i] = (arr[i] - (arr[i] % 5) + 5);
                }
                if ((arr[i] % 5) != 0 && (Math.Abs(arr[i] % 5)) > 2.5 && arr[i] < 0)
                {
                    arrumgewandelt[i] = (arr[i] - (arr[i] % 5) - 5);
                }                
                   
                Console.WriteLine("Die Zahl " + arr[i] + " lautet umgewandelt " + arrumgewandelt[i]);
            }
            Console.ReadLine();
            
              
        
        }
    }
}
vote_ok
von Developer# (50 Punkte) - 29.10.2019 um 17:51 Uhr
Quellcode ausblenden C#-Code
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.

vote_ok
von miami666 (300 Punkte) - 02.02.2020 um 00:37 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace aufg_262
{
    class Program
    {

        static void Main(string[] args)
        {
            int divisor;
            Console.WriteLine("Geben sie die Ganzzahl ein durch die die nächstgelegene Zahl teilbahr sein soll:");
            int.TryParse(Console.ReadLine(), out divisor);
            float[] arr = new float[5];
            arr[0] = 7.1f;
            arr[1] = 8.4f;
            arr[2] = -2.4f;
            arr[3] = -2.6f;
            arr[4] = -8.3f;
            foreach (float i in arr)
            {
                int gnz = Convert.ToInt32(i / divisor);
                float f = i / divisor;
                float diff = f - gnz;
                Console.WriteLine(i+" -> "+naehsteZahlDurchX(i, divisor));
            }
            Console.ReadKey();
        }
        public static int naehsteZahlDurchX(double i, int v)
        {
            int gnz = Convert.ToInt32(i / v);
            float f = (float)i / v;
            float diff = f - gnz;
                return (Convert.ToInt32(i / v)) * v;
        }
    }
}