Wie korrigiere ich meinen CountSort-Code, damit er absteigend sortiert?

Hallo!

Meine Aufgabe: Ich soll eine Count Sort implementieren, und zwar so, dass man beim Programm aufrufen im Argument auswählen kann, ob das Array aufsteigend oder absteigend sortiert werden soll.

Mein Problem: Das Aufsteigen sortieren funktioniert, aber das Absteigen sortiert ebenfalls aufsteigend, obwohl es absteigend sortieren soll.

Meine Annahmen: Eigentlich gehe ich davon aus, dass meine Funktion "count_sort_write_output_array", welche das sortierte Array basierend auf der angegebenen Sortierrichtung erstellt, korrekt ist. Schließlich ist es einfach der gleiche Code wie für ASCENDING (aufsteigend), bloß mit geringfügigen Änderungen.

Ich denke eher, dass es daran liegt, dass mein Code erst gar nicht DESCENDING (absteigend) 'auswählt', wenn "desc" als Argument gegeben wird. Ich habe als Standardverhalten ASCENDING gesetzt (also falls kein Argument gegeben wird, oder ein falsches Argument gegeben wird, wird es aufsteigend sortiert), also dachte ich vielleicht, dass entweder

if (strcmp(order, "asc") == 0)

oder

else if (strcmp(order, "desc") == 0)

(in der SortDirection Funktion) irgendwie "falsch" sind, sodass die Sortierfunktion immer das Standardverhalten auswählt. (Also ASCENDING)

Als Debug-Versuch habe ich:

printf("Sortdirection must be defined. Using default: ASCENDING\n");

eingefügt, um zu schauen ob das wirklich der Fall ist. Dennoch wird dieser printf nie gezeigt, selbst wenn ich kein Argument eingebe. Was mich ziemlich verwirrt. Bricht es vorher ab?

Meine 'Frage' an euch: Ich würde es sehr schätzen, wenn jemand einen Blick darauf werfen könnte. Eventuell kann jemand erkennen, woran mein Semantikfehler liegt.

Aber würde ich es auch schätzen, wenn mir jemand andere Debug-Ideen nennen könnte. Ich habe noch nicht viel mit 'Debugging-Methoden' beschäftigt und habe meine Probleme bisher größtenteils mit printfs gelöst. Aber vielleicht gibt es da etwas leichteres!

Vielen Dank!

Bild zum Beitrag
Computer, programmieren, Code, Informatik, Programmiersprache, Visual Studio, Algorithmus, debugging, Sortieralgorithmus
Wie kann ich für ein dynamisches Vier gewinnt eine Gewinnabfrage erstellen?

Hallo,

ich frage mich, wie ich für ein dynamisches Vier gewinnt eine Gewinnabfrage erstellen kann.

Mein aktueller Code (ohne Klassen für Grafik) sieht so aus:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Animation;
using System.Windows.Threading;

namespace N_Gewinnt_Mölleken
{
  public partial class MainWindow : Window
  {
    Linie linie;
    Chip chip;
    private bool isHorizontalMoveEnabled = true;
    int anzahlspalten = 40;
    int anzahlzeilen = 9;
    int BallColor = 1;
    int GewinnMenge = 4;
    DispatcherTimer timer;
    Double ticks_old;
    int Spieler = 1;
    Double BRadius;
    Double BallX;
    Double AktuellX = 0;
    int NichtAus;
    private bool isLeftKeyPressed = false;
    private bool isRightKeyPressed = false;
    int count = 0;
    int[,] BallPosition;

    public MainWindow()
    {
      InitializeComponent();
      BallPosition = new int[anzahlspalten, anzahlzeilen];
    }

    private void wnd_Loaded(object sender, RoutedEventArgs e)
    {
      this.WindowState = WindowState.Maximized;
      InitializeGame();
    }

    private void InitializeGame()
    {
      timer = new DispatcherTimer();
      timer.Tick += timer_Tick;
      timer.Interval = new TimeSpan(0, 0, 0, 0, 15);
      timer.Start();
      double screenwidth = SystemParameters.PrimaryScreenWidth;
      double screenheight = SystemParameters.PrimaryScreenHeight;
      double x1 = screenwidth - (screenwidth * 0.3), y1 = screenheight - (screenheight * 0.10), x2 = x1, y2 = screenheight - (screenheight * 0.9);

      for (int spalten = 0; spalten <= anzahlspalten; spalten++)
      {
        linie = new Linie(x1, y1, x2, y2);
        linie.Draw(cvs);
        x1 -= ((screenwidth - (screenwidth * 0.3)) / anzahlspalten);
        x2 = x1;
      }

      linie = new Linie(screenwidth * 0.7, screenheight * 0.9, x1 + ((screenwidth - (screenwidth * 0.3)) / anzahlspalten), screenheight * 0.9);
      linie.Draw(cvs);
      BRadius = ((screenwidth - 4 - (screenwidth * 0.3)) / anzahlspalten) / 2;
      BallX = ((screenwidth - (screenwidth * 0.3)) / anzahlspalten) / 2;
      chip = new Chip(BallX, 130, BRadius, 0, 0, Spieler);
      chip.Draw(cvs);
    }

    private void timer_Tick(object sender, EventArgs e)
    {
      Double ticks = Environment.TickCount;

      if (ticks_old == 0)
      {
        ticks_old = ticks;
        return;
      }

      double elapsed = (ticks - ticks_old);
      ticks_old = ticks;
    }

    private void wnd_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.Key == Key.Left)
      {
        MoveBallLeft();
      }
      else if (e.Key == Key.Right)
      {
        MoveBallRight();
      }

      if (e.Key == Key.Down)
      {
        MoveBallDown();
      }
    }

    private void MoveBallRight()
    {
      if (isHorizontalMoveEnabled && count < anzahlspalten - 1)
      {
        AktuellX = AktuellX + BallX;
        Canvas.SetLeft(chip.Elli, AktuellX * 2);
        count += 1;
      }
    }

    private void MoveBallLeft()
    {
      if (isHorizontalMoveEnabled && count > 0)
      {
        AktuellX = AktuellX - BallX;
        Canvas.SetLeft(chip.Elli, AktuellX * 2);
        count -= 1;
      }
    }

    // ...

    private void MoveBallDown()
    {
      NichtAus = 0;

      for (int i = 0; i < anzahlzeilen; i++)
      {
        if (BallPosition[count, i] == 0)
        {
          BallPosition[count, i] = Spieler;
          // Logik für die Darstellung des Chips
          MessageBox.Show("ChipPlatziert");
          NichtAus = 1;
          MessageBox.Show($"Chip an Position ({count}, {i}) platziert. Wert im Array: {BallPosition[count, i]}");
          
          break;
        }
        MessageBox.Show("EineZeileBlockiert");
      }

      if (NichtAus == 0)
      {
        MessageBox.Show("Sie können in dieser Zeile nicht platzieren");
      }

      if (Spieler == 1)
      {
        Spieler = -1;
      }
      else if (Spieler == -1)
      {
        Spieler = 1;
      }
    }    
  }
}
C Sharp, Code, Programmiersprache, Algorithmus
Verdienen Influencer wirklich so viel?

Hallo! Man hört ja immer wieder dass Influencer so viel anscheinend verdienen und dass viele es daher als ihren „Vollzeitjob“ bezeichnen.

Also mir war schon bewusst dass sie damit nicht schlecht verdienen aber ich dachte es ist eher so etwas wie eine Ergänzung zu seinem Gehalt.

Dass die Reichweite also die Anzahl Follower dabei eine große und die Werbepartner und die Plattform auf der man unterwegs ist weiß ich, aber ich habe z.B gerade ein Video von einer Influencerin mit ca. 2 Millionen Follower auf Tiktok gesehen welche gemeint hat dass sie sich eine lange Zeit gar keinen Corporate Job gesucht hat weil das Geld was sie durch Content creating verdient hat anscheinend VIEL mehr war.

Das hat mich dann natürlich bisschen stutzig gemacht weil sie ja „nur“ 2 Millionen Follower hat, was natürlich auch schon eine ganze Menge ist aber auf Tiktok ist es gar nicht mal soo selten, es gibt ja auch viele im höher zweistelligen Millionen Bereich und dann, zwar wirklich nur die aller aller wenigsten aber auch ein paar die 100Millionen oder sogar mehr haben.

Kann man denn grob einschätzen wieviel ein Creator mit ungefähr 2 Millionen Tiktok Followern im Monat macht wenn man nicht so viel Werbepartner hat und ca. 2-3 Videos am Tag hochlädt?

(Ich bin eigentlich nicht wirklich daran interessiert Influencer zu werden, aber ich finde das Thema einfach sehr spannend)

Werbung, Account, YouTube, App, Social Media Marketing, YouTuber, Algorithmus, Follower, Likes, Twitch, Instagram, TikTok, Influencer, TikTok LIVE
YouTube Kanal bekommt merkwürdig wenig Aufmerksamkeit?

Guten Abend,

mittlerweile dürften mich viele aus dem Antwortbereich von GuteFrage kennen, nur selber Fragen stellen tu ich eigentlich selten. Nun ist es doch mal so weit.

—————————————————————————-

Ich führe seit einer längeren Zeit einen Informatik bezogenen YouTube Kanal und bin bemüht stets auf Qualität anstatt Quantität zu setzen. Mir geht es dabei um jeden einzelnen der die Videos sieht und darum den Menschen zu helfen und nicht darum lediglich eine hohe Zahl an Abonnenten zu erreichen. Ich investiere selbst in kleinere Videos einen mehrstündigen Aufwand und probiere immer auf die Richtigkeit der Informationen zu setzen. Ich bin auch bemüht in den Einstellungen des Kanals sowie den Einstellungen der Videos alles möglichst detailliert anzugeben, sodass die Videos direkt der passenden Zielgruppe angezeigt werden.

—————————————————————————

Das Problem ist nun, dass ich mit nicht erklären kann, warum der Kanal scheinbar niemandem angezeigt wird. Der Kanal hat zurzeit 19 Abonnenten und ich kann bei 90%-100% von diesen klar benennen wer es ist und kenne den Großteil sogar persönlich… In Anbetracht, dass ich allerdings mehr Leuten als nur Verwandten helfen möchte, ist meine Frage nun (lang vielem herumreden), warum bekommt der Kanal keine (mit unbekannten) Zuschauer… und was kann ich Verbessern… . Auch diverse Ratschläge im Internet und auch das durchlesen der GuteFrage Posts konnte mir diese Frage leider nicht beantworten.

—————————————————————————

Mit ganz freundlichen Grüßen und einen wunderschönen Abend noch,

Codeline

Internet, Account, YouTube, Wissen, IT, Kanal, Bildung, Informatik, SEO, Algorithmus, YouTube-Kanal
Java / Schiffe versenken: Wie kann ich dafür sorgen, dass die Schiffe nur horizontal und vertikal platziert werden können?

Ich habe diesen Schiffe-versenken-Code geschrieben. Jetzt weiß ich allerdings nicht, wie ich dafür sorgen kann, dass die Schiffe nur horizontal und vertikal plaziert werden können. Das soll durch if-Verzweigungen geregelt werden.

import javax.swing.JOptionPane;

public class Schiffeversenken {
  public static void main(String[] args) {
    // Spielfelderstellung
    int größefeld = Integer.parseInt(JOptionPane.showInputDialog("Wie groß soll das Spielfeld sein?"));
    String[][] spielerarray = new String[größefeld][größefeld];

    // Spielfeld leere Felder Befüllung
    for (int i = 0; i < spielerarray.length; i++) {
      for (int j = 0; j < spielerarray.length; j++) {
        spielerarray[i][j] = "o";
      }
    }

    // Anzahl Schiffe
    int anzahlschiffe = Integer.parseInt(JOptionPane.showInputDialog("Wie viele Schiffe hast du?"));

    for (int i = 0; i < anzahlschiffe; i++) {
      // Größe des Schiffes
      int größeschiff = Integer.parseInt(JOptionPane.showInputDialog("Wie groß ist dein " + (i + 1) + " Schiff?"));

      for (int j = 0; j < größeschiff; j++) {
        // Koordinateneingabe
        JOptionPane.showMessageDialog(null, "Wähle Koordinaten von 0-" + (spielerarray.length - 1));
        int koordinate1;
        int koordinate2;
        koordinate1 = Integer.parseInt(JOptionPane.showInputDialog("Was ist die 1 Koordinate des "+ (j + 1) + " Teil deines Schiffs?"));
        koordinate2 = Integer.parseInt(JOptionPane.showInputDialog("Was ist die 2 Koordinate des "+ (j + 1) + " Teil deines Schiffs?"));
        spielerarray[koordinate1][koordinate2] = "x";
      }
    }

    // Ausgabe Spielfeld
    for (int i = 0; i < spielerarray.length; i++) {
      for (int x = 0; x < spielerarray.length; x++) {
        System.out.print(spielerarray[x][i] + " ");
      }

      System.out.println();
    }
  }
}
Java, Array, Programmiersprache, Algorithmus
C# Programm das gerecht Verteilen kann?

Hallo Leute, ich hoffe euch geht's gut.

Ich bin noch ziemlich neu hier und auch in der Welt von C# nicht gerade der Profi, aber ich liebe es, in meiner Freizeit zu programmieren.

Vor ein paar Wochen habe ich mit C# angefangen und arbeite jetzt an einem Projekt für eine App. Ich tüftle an einem Programm, das verschiedene Dinge (zum Beispiel 3 Tomaten, 4 Bananen und 6 Äpfel) gerecht auf eine festgelegte Anzahl von Tüten verteilt (sagen wir 3 Tüten).

Die Gesamtanzahl jeder Obstsorte und die Gesamtanzahl der Dinge insgesamt dürfen sich höchstens um eins unterscheiden, damit es für jede Tüte so fair wie möglich bleibt.

Mein Ansatz ist, eine Liste von Integer-Arrays zu erstellen, die ich

bags
nennen würde.

Jeder Teil dieser Liste würde dann ein Integer-Array beinhalten, in dem die Gegenstände für jede Tüte gespeichert werden.

Versteht ihr, worauf ich hinauswill? Ich könnte echt eure Hilfe gebrauchen und wäre dankbar für eure Gedanken dazu, wie ich am besten vorgehen sollte. Sollte ich die Anzahl der Dinge teilen oder wie würdet ihr das angehen? Bin gespannt auf eure Vorschläge! Danke schon mal im Voraus.

Mein C# Code Ansatz:

// Online C# Editor for free
// Write, Edit and Run your C# code using C# Online Compiler

using System;

public class HelloWorld
{
  public static void Main() 
  {
    double[] objects = new double[]{4,4,2};
    Pack(objects, 3);
  }
   
  public static void Pack(double[] things, int numBags)
  {
    double[] results = new double[]{0,0,0};
    double[] sumUp = new double[]{0,0,0};
     
    for(int i = 0; i < things.Length; i++) 
    {
      double current = things[i] / numBags;
      double nextnumber = (double)Math.Floor(current);
       
      results[i] = current;
       
      double part = current - nextnumber;
      sumUp[i] = part;
       
      Console.WriteLine(results[i] + "/" + Math.Floor(current) + "/" + part);
    }
     
    for(int b = 0; b < sumUp.Length; b++) 
    {
      sumUp[b] = sumUp[b] * numBags;
      Console.WriteLine(sumUp[b]);
    }
  }
}
Programm, programmieren, C Sharp, Programmiersprache, Algorithmus
Wechselgeld Rechner in C?

Ich habe den folgenden Code:

#include <stdio.h>

int main(void)
{
    /* declarate variables */
    float price, paid, change;
    int cents;
    int rest;
    int cent1;
    int cent2;
    int cent5;
    int cent10;
    int cent20;
    int cent50;
    int eur1;
    int eur2;

    /* print out price and paid amount */
    printf("Rechnungsbetrag: ");
    scanf("%f", &price);

    printf("Erhaltener Betrag: ");
    scanf("%f", &paid);

    /* calculate the change as float */
    change = paid - price;

    printf("======================\n");
    printf("Rückgeld: %.2f EUR\n", change);
    printf("======================\n");

    /* calculate the change in cents */
    cents = change * 100;


    eur2   = cents / 200;
    rest = cents % 200;

    eur1   = rest / 100;
    rest = cents % 100;

    cent50 = rest / 50;
    rest = cents % 50;

    cent20 = rest / 20;
    rest = cents % 20;

    cent10 = rest / 10;
    rest = cents % 10;

    cent5  = rest / 5;
    rest = cents % 5;

    cent2  = rest / 2;
    rest = cents % 2;

    cent1  = rest / 1;


    printf("1 Cent:  %d\n", cent1);
    printf("2 Cent:  %d\n", cent2);
    printf("5 Cent:  %d\n", cent5);
    printf("10 Cent: %d\n", cent10);
    printf("20 Cent: %d\n", cent20);
    printf("50 Cent: %d\n", cent50);
    printf("1 EUR:   %d\n", eur1);
    printf("2 EUR:   %d\n", eur2);


    return 0;
}

Es werden zwei Werte Eingeben, einmal den Rechnungspreis und den erhaltenen Betrag, dann wird das Wechselgeld ausgerechnet. Danach soll die Anzahl der jeweiligen Münzen errechnet werden, die es benötigt um den Betrag des Wechselgeldes zu erreichen.

Wenn ich, zum Beispiel, als Rechnungsbetrag 1.50 habe, und als Erhaltenen Betrag 2.00, dann gibt es mir 1 50 Cent münze und eine 10 cent münze aus.

Ich habe verschiedene Beträge ausprobiert und es kommt immer diese extra 10 Cent Münze raus.

Wie kann ich das beheben?

Computer, Linux, Code, Programmiersprache, Algorithmus, C (Programmiersprache)

Meistgelesene Fragen zum Thema Algorithmus