Korrektheitsbeweis Algorithmus?

Hallo liebe Community,

ich habe eine Aufgabe bekommen in welcher ich Pseudocode entwickeln soll. Meinem Algorithmus wird ein Array an Zahlen gegeben A[1, n] mit n Einträgen. Ich soll in diesem Array die Senken zählen. Eine Senke ist dabei eine Position i [2, n - 1] für die folgendes gilt: A[i - 1] > A[i] < A[i + 1].

Meiner Auffasung nach bedeutet das nun, dass z.B. das Array [1, 3, 2, 4, 3, 5] zwei Senken hat. Nämlich einmal der dritte Eintrag und der fünfte Eintrag.

Mein Pseudocode sieht folgendermaßen aus:

Input: A[1, n] mit n Einträgen
Output: Anzahl der Senken

counter := 0
for j := 2 to n - 1 do
  val := A[j]
  if val < A[j - 1] and val > A[j + 1] do
    counter := counter + 1

Mein Java Code dazu sieht folgendermaßen aus:

public static int countSenken(int[] arr) {
  int counter = 0;
  for (int i = 1; i < arr.length - 1; i++) {
    int val = arr[i];
    if (val < arr[i - 1] && val < arr[i + 1]) {
      counter++;
    }
  }
}

Nun soll ich die Korrektheit meines Algorithmus' beweisen. Wir haben das schonmal an dem Beispiel des Insertionsort Algorithmus' gemacht. Die herangehensweise ist ja eigentlich, dass man eine Schleifeninvariante aufstellt und diese dann mittels Induktion beweist. Mein Problem ist jetzt aber, dass ich diese Schleifeninvariante nicht aufstellen kann. Beim Insertionsort, da beweist man ja die Sortiertheit und da verändert sich ja das Array. Aber bei diesem Algorithmus jetzt da verändert sich das Array ja gar nicht.

Ich weiß halt, dass n >= 3 sein muss damit der Algorithmus überhaupt funktioniert. Kann mir vielleicht jemand einen Ansatz geben wie ich die Korrektheit beweise?

Ich wäre euch allen sehr dankbar :)

Computer, Schule, Mathematik, programmieren, Informatik, Algorithmus, Algorithmen und Datenstrukturen
Nnvme nicht in Bootreihenfolge?

Hallo,

ich habe vor kurzem meinen momentanen PC in großen Teilen "geupgraded" bzw. neue Teile eingebaut.(praktisch alles außer Grafikkarte, RAM und Netzteil wurde ausgewechselt)

Die momentane Konfiguration ist:

Rtx3060ti

I5 12600K

GIGABYTE Z690 Gaming x DDR 4

Samsung 970 Evo Plus 1TB.

Der Zusammenbau an sich hat auch relativ reibungslos funktioniert, allerdings kann ich das Betriebssystem einfach nicht installieren. Ursprünglich hatte ich mir einen Bootstick für Windows 11 erstellt, in den PC eingesteckt, hochgefahren und bin im Einrichtungsprozess auch erst einmal gut voran gekommen. An der Stelle, an welcher man jedoch das "Speichermedium" auswählen soll ging es nicht weiter. Wenn man die oben genannte NVMe nämlich auswählt, kommt nur eine Fehlermeldung, dass "keine neuen Partitionen erstellt oder keine vorhandenen gefunden werden konnten".(Die NVMe ist übrigens neu und wurde noch für keinen anderen Zweck verwendet)

Später habe ich dann irgendwo gelesen, dass die ausgewählte Festplatte bzw. NVMe in der Bootreihenfolge an 2. Stelle nach dem Bootstick kommen muss, damit sich Windows darauf installieren lässt. In wie weit das stimmt kann ich gar nicht genau sagen, denn ich musste leider feststellen, dass die NVMe gar nicht in der Boot- bzw. Startreihenfolge im Bios vorhanden geschweige denn auswählbar ist. An sich wird sie allerdings sonst überall erkannt. Im Bios ist sie, abgesehen von der Bootreihenfolge, überall gelistet, man kann genauere Details über sie einsehen, self Tests durchführen, etc.

Auch im Windows-Installationsprogramm wird sie gelistet, wobei das Auswählen der NVMe, um Windows zu installieren wie bereits beschrieben nicht funktioniert.

Im Handbuch des Motherboards steht diesbezüglich, es wäre nötig im Einrichtungsprozess den "Intel RST VMD Controller"-Treiber zu installieren. Kurzer Hand habe ich das auch gemacht. Leider hatte dies ebenfalls keinerlei Auswirkungen auf das vorhande Problem, egal ob der VMD controller im Bios ein- oder ausgeschaltet war.

Daher meine Anliegen, ob irgendjemand weiß, woran das liegen könnte und im besten Fall: Wie man das Problem am besten lösen kann.

Vielen Dank schon mal im voraus:)

PC, Computer, Technik, BIOS, Informatik, Intel, Technologie, Spiele und Gaming, Windows 11, NVMe SSD
Welche verschieden Arten von Systemen gibt es (eingebettete Systeme etc)? Wer kann kontrollieren ob ich die Systeme richtig zugeordnet hab (siehe Foto)?

Ist die Tabellenkalkulationssoftware auf dem PC ein System von Systemen oder ist es eine eigenständige Anwendung?
Und was für ein System ist das Blutdruckmessgerät?

Mit freundlichen Grüßen

1 Eigenständige (stand-alone) Anwendungen: Dies sind Anwendungssysteme, die auf einem lokalen Rechner wie einem PC laufen. Sie besitzen alle nötigen Funkti- onalitäten und müssen nicht mit einem Netzwerk verbunden sein. Beispiele sol- cher Anwendungen sind Office-Anwendungen auf einem PC, CAD-Programme, Software zur Fotobearbeitung usw.

2 Interaktive transaktionsbasierte Anwendungen: Diese Anwendungen werden auf einem entfernten Computer ausgeführt. Die Benutzer können entweder von ihren eigenen PCs aus oder über Terminals darauf zugreifen. Hierzu gehören sicherlich Webanwendungen wie E-Commerce-Anwendungen, bei denen man mit einem entfernten System verbunden ist, um Waren und Dienstleistungen zu kaufen. Diese Anwendungsklasse enthält auch Geschäftssysteme, wobei der Zugang zu diesen Systemen über einen Webbrowser oder über spezielle Client-Programm- und Cloud-basierte Dienste wie E-Mail und Foto-Sharing erfolgt. Interaktive An- wendungen benötigen häufig einen großen Datenspeicher, auf den bei jeder Transaktion zugegriffen wird und der dabei jeweils aktualisiert wird.

3 Eingebettete Steuerungssysteme: Dies sind Softwaresteuerungssysteme, die Hard- waregeräte steuern und verwalten. Zahlenmäßig gibt es wahrscheinlich mehr ein- gebettete Systeme als irgendeine andere Art von System. Beispiele für eingebet- tete Systeme sind die Software in einem Mobiltelefon, Software zur Steuerung des Antiblockiersystems im Auto und Mikrowellensoftware zum Steuern des Kochvorgangs.

4 Unterhaltungssysteme: Dies sind Systeme, die in erster Linie für die private Nut- zung gedacht sind und die zur Unterhaltung ihrer Nutzer dienen. Die meisten dieser Systeme sind Spiele. Die Qualität der angebotenen Benutzerinteraktion ist das wichtigste Unterscheidungsmerkmal von Unterhaltungssystemen.

5 Datenerfassungssysteme: Dies sind Systeme, die mithilfe von Sensoren Daten aus ihrer Umgebung sammeln und diese Daten an andere Systeme zur Verarbeitung senden. Die Software muss mit Sensoren interagieren und wird oft in einer le- bensfeindlichen Umgebung oder unter extremen Bedingungen installiert wie bei- spielsweise innerhalb eines Motors oder an einem unzugänglichen Ort.

6 Systeme von Systemen: Diese sind Systeme, die aus vielen anderen Softwaresys- temen zusammengesetzt sind. Einige davon können allgemeine Softwarepro- dukte wie ein Tabellenkalkulationsprogramm sein. Andere Systeme in dem Ver- bund sind eventuell speziell für diese Umgebung geschrieben worden.

Bild zum Beitrag
PC, Computer, Software, Technik, Hardware, programmieren, System, Java, Elektrotechnik, compiler, datenerfassung, Datenbank, Informatik, Python, Softwareentwicklung, Technologie, Datenbanksystem, Frontend, IT-Studium, Backend-Developer
Glückliche oder Traurige Zahl?

Aufgabenstellung:

Die Dezimalziffern einer natürlichen Zahl n, n ≥ 1, werden einzeln quadriert und addiert. Anschließend wird mit der entstandenen Summe genauso verfahren. Die Ausgangszahl n ist fröhlich, wenn man bei diesem Vorgehen schließlich auf die Zahl 1 stößt, ansonsten ist sie traurig. Beispielsweise ist 7 eine fröhliche Zahl

Schreiben Sie ein Java-Programm, das alle fröhlichen Zahlen zwischen einer Unter- und einer Obergrenze berechnet und die zugehörigen Folgen ausgibt.

Der Dialog soll folgendermaßen ablaufen:

untere Grenze ein: 5

obere Grenze ein: 30

7 -> 49 -> 97 -> 130 -> 10 -> 1

10 -> 1

13 -> 10 -> 1

19 -> 82 -> 68 -> 100 -> 1

23 -> 13 -> 10 -> 1

28 -> 68 -> 100 -> 1

import java.util.Scanner;

public class GlücklicheZahl2 {
    private int counter = 0;
    private int[] summenSpeicher = new int[1];
    private int zahl;
    int summenCounter = 0;
    Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        GlücklicheZahl2 zahl = new GlücklicheZahl2();
    }

    public GlücklicheZahl2() {
        /*System.out.print("Zahl? ");
        int zahl = scanner.nextInt();*/
        System.out.print("untere Grenze? ");
        int untereGrenze = scanner.nextInt();
        System.out.print("obere Grenze? ");
        int obereGrenze = scanner.nextInt();
        for (int i = untereGrenze; i <= obereGrenze + 1; i++) {
            this.zahl = i;
            this.summenSpeicher = new int[1];
            createIntArray(i);
        }
    }
    public void rechnung(int[] intArray) {
        boolean glücklich = false;
        int summe = 0;
            for (int i = 0; i < intArray.length; i++) {
                summe += intArray[i] * intArray[i];
            }
            if (summe == 1) {
                glücklich = true;
            }
            if (summenCounter >= summenSpeicher.length) {
                int[] tmpArray = new int[summenSpeicher.length + 1];
                for (int i = 0; i < summenSpeicher.length; i++) {
                    tmpArray[i] = summenSpeicher[i];
                }
                summenSpeicher = tmpArray;
            }
            summenSpeicher[summenSpeicher.length - 1] = summe;
            summenCounter++;
            if (glücklich) {
                System.out.print(zahl);
                for (int i = 0; i < summenSpeicher.length; i++) {
                    System.out.print(" -> " + summenSpeicher[i]);
                }
                System.out.println("");
            }   else {
                if (counter < 50) {
                    counter++;
                    createIntArray(summe);
                }
            }
    }

    public void createIntArray(int x) {
        String wert = Integer.toString(x);
        char[] wertarray = wert.toCharArray();
        int[] intArray = new int[wertarray.length];
        for (int i = 0; i < wertarray.length; i++) {
            intArray[i] = Character.getNumericValue(wertarray[i]);
        }
        rechnung(intArray);
    }
}
programmieren, Java, Informatik
Kann man behaupten, dass die ersten Semester im Studium die anspruchsvollsten sind?

Hallo,

ich habe mir nach meiner ersten Prüfungsphase die Frage gestellt, ob die ersten ~3 Semester die anspruchsvollsten sind.

Unser Fachbereich (ich studiere Wirtschaftsinformatik an der Uni) hat uns gesagt, dass die ersten 2/3 Semester anspruchsvoller sind als die Semester, die danach kommen.

Natürlich kann man das so nicht ganz pauschal sagen, aber uns wurde gesagt, dass das Grundlagenstudium "schwieriger" und abstrakter sei als die Inhalte der Semester danach.

Zugegeben habe ich mich dieses Semester auch ziemlich verschätzt. BWL und das erste fachbezogene Modul habe ich mit 1,0 und 2,0 abgeschlossen - was für meinen Lernaufwand(5 Tage pro Prüfung) sicherlich in Ordnung ist.

Allerdings habe ich in Mathe für Elektrotechnik und Informatik(auch in der Klausur nur Beweise) und Programmierung ziemlich auf den Sack bekommen (3,5/3,7). Ich bin zwar wirklich froh, dass ich die beiden bestanden habe - aber da ist noch viel Potential nach oben. Auch für die Klausuren habe ich viel zu spät angefangen zu lernen(Klausuren lagen alle recht nah beieinander)...
Mathe war allerdings noch nie meine Stärke... zum Glück muss ich nur 12 LP in Mathe ablegen (9 habe ich jetzt schon).

Kann man nun also sagen, dass die ersten Semester schwieriger sind oder fallen in den ersten Semestern immer nur mehr Leute durch, weil sie sich überschätzen oder nicht richtig vorbereitet sind?

Danke im Voraus!

Lernen, Studium, Schule, Betriebswirtschaftslehre, Informatik, Klausur, Universität, Wirtschaftsinformatik, Ausbildung und Studium, Beruf und Büro
Programmieren lernen, Tipps:)?

Hey, ich wollte schon immer gerne mal programmieren lernen.
In meinem Umfeld habe ich mehrere Leute, die beruflich programmieren, aber ich habe auch Freunde, die sich hobbymäßig für Spiele usw. Programmieren selbst beigebracht haben und ich würde es gerne auch können.

Ich habe schon mal einen vierstündigen Kurs für Python gemacht, habe aber alles wieder verlernt.

Ich habe schon die Leute in meinem Umfeld gefragt, aber es wird immer so kompliziert erklärt und alle sagen einfach nur, ich soll mal googlen und einfach selbst reinkommen.

Ich werde da aber gar nicht schlau draus, habe mir auch schon Youtubevideos angesehen.

Ich weiß noch nicht mal, wie genau ich mir das vorstellen muss und wie genau Programmieren überhaupt funktioniert.

Ich weiß, dass es verschiedene Programmiersprachen gibt und viele mit Java oder Python starten.

Ich würde gerne wissen, ob man einen guten Pc dafür braucht?
Mit welchem Programm programmiert man überhaupt?
Kostet es Geld?
Wie füge ich das programmierte dann ein?

Ich würde gerne z.B für Sketchful.io (eine Internetseite/ein Onlinezeichenspiel) einen Pinsel programmieren, welcher Regenbogenfarben zeichnet.
Ein Freund von mir hatte sich dieses Script selbst programmiert, aber leider habe ich keinen Kontakt mehr zu ihm und kann ihn nicht fragen.

Außerdem würde ich mir gerne eine neue Farbe für meinen Skin programmieren und vielleicht eine Kopfbedeckung.

Da frage ich mich, wie das genau gehen soll, woher weiß er welche Farbe ich will, wenn ich nur einen Code einfüge? Und muss ich dann ein Foto irgendwie irgendwo in einen Code umwandeln und als Script z.B in Tampermonkey einfügen? :D Ich bin völlig verwirrt.

Danke schon mal

Computer, programmieren, Informatik

Meistgelesene Beiträge zum Thema Informatik