CPP – die neusten Beiträge

C++: Wie kann ich eine Abfrage für die Wiederholung meines Programms einbauen?

Ich habe einen C++-Programmcode geschrieben, welcher zwei Zahlen addiert oder subtrahiert.

Nach der Ausgabe habe ich eine Abfrage eingebaut, welche abfragt, ob man noch eine weitere Addition/Subtraktion durchführen oder das Programm beenden möchte.

Leider funktioniert das nicht, obwohl es dies eigentlich tun sollte.

Ich komme nicht mehr weiter. Vielleicht kann jemand von euch mir helfen.

Hier der C++-Code:

#include <iostream>

using namespace std;

int entscheidung() {
  cout << "Hallo" << endl;
  cout << "1 zum addieren zweier Zahlen" << endl;
  cout << "2 zum subtrahieren zweier Zahlen" << endl;
  cout << "" << endl;

  int a;
  cin >> a;
  cout << "" << endl;
  cout << "" << endl;

  return a;
}

int rechner(int a) {
  if (a == 1) {
    cout << "Eingabe zweier Zahlen" << endl;
    cout << "Diese werden addiert" << endl;
    cout << "" << endl;

    int zahl1, zahl2;
    cin >> zahl1;
    cin >> zahl2;

    int zwischenergebnis = zahl1 + zahl2;
    cout << "" << endl;
    cout << zahl1 << " + " << zahl2 << " = ";

    return zwischenergebnis;
  }
  else if (a == 2) {
    cout << "Eingabe zweier Zahlen" << endl;
    cout << "Diese werden addiert" << endl;
    cout << "" << endl;

    int zahl1, zahl2;
    cin >> zahl1;
    cin >> zahl2;

    int zwischenergebnis2 = zahl1 - zahl2;
    cout << "" << endl;
    cout << zahl1 << " - " << zahl2 << " = ";

    return zwischenergebnis2;
  }
  else {
    cout << "---FEHLER---" << endl;
  }
}

int main() {
  int zahl = entscheidung();
  int a = rechner(zahl);
  cout << a << endl;
  cout << "" << endl;
  cout << "Moechten Sie weiter machen?" << endl;
  cout << "Geben Sie die Zahl 1 ein zum --FORTSETZEN-- !" << endl;
  cout << "Gebens Sie die Zahl 0 ein zum --STOPPEN--  !" << endl;

  int b;
  cin >> b;

  if (b == 1) {
    cout << "" << endl;
    return entscheidung();
  }
  else {
    cout << "ENDE" << endl;
    return 0;
  }
}
Cplusplus, CPP, Programmiersprache

C++: Ursache für Lesezugriffsverletzung?

Hallo,

ich komme an einer Stelle nicht weiter und könnte noch einmal Hilfe gebrauchen. Ich nutze die Bibliothek Libtiff um die Farbwerte von einem Bild in einen Vector zu speichern bekomme aber eine Lesezugriffsverletzung. Anbei der Code:

void GetImage(TIFF* tif)
{
	uint32 npixels = width * height * sizeof(uint32);
	uint32* raster;
	std::vector <uint32> image;
	raster = (uint32*)_TIFFmalloc(npixels);
	if (TIFFReadRGBAImageOriented(tif, width, height, raster, ORIENTATION_TOPLEFT, 0) == 1)
	{
		std::cout << npixels << std::endl;
		for (uint32 i = 0; i < npixels; i++)
		{
			image.push_back(raster[i]);
		}
		std::cout << image[0] << std::endl;
	};
}

TIFFReadRGBAImageOriented

speichert die Pixelwerte von einem Bild in die Variable "raster" mit der Größe von "npixels". Ich möchte diese Werte später verwenden und sie deshalb global abspeichern. Deshalb habe ich den Vector

std::vector <uint32> image;

deklariert und möchte mit der for-Schleife die Werte von raster in image kopieren.

Ich bekomme leider folgende Fehlermeldung:

Ausgelöste Ausnahme: Lesezugriffsverletzung

std::forward<unsigned int const & __ptr64>(...) hat 0x22A6E503000 zurückgegeben.

npixels = 482241600. Wenn ich bei der for-Schleife anstelle von npixels 48224160 schreibe (also eine 0 weglasse), bekomme ich keine Fehlermeldung mehr. "raster" scheint also mehr Werte zu haben, als man in den Vector "image" hineinschreiben kann. Zumindest interpretiere ich das Problem so.

Ist meine Interpretation richtig und wenn ja, was kann ich tun um die Werte von raster irgendwie global abzuspeichern.

Viele Grüße

CPP, Cpp Programierung

C++ funktion() should have been declared inside namespace?

Hallo, ich arbeite gerade an einer Header Datei in C++. Aber ich kann nun nicht mehr weitermachen weil ständig ein Fehler auftaucht:

meinHeader.h:21:38: error: 'void meinNamespace::draw(int, int)' should have been declared inside 'meinNamespace'

Ich kann im Internet nichts hilfreiches finden und weiß nicht warum der Fehler auftaucht. Hier die betroffenen Codeabschnitte:

#include <Windows.h>
#include <WinUser.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include "meinHeader.h"

#define PI 3.14

enum meinNamespace::color {
    DARKBLUE = 1, 
    DARKGREEN, 
    DARKTEAL, 
    DARKRED,
    DARKPINK,
    DARKYELLOW,
    GRAY, 
    DARKGRAY, 
    BLUE, GREEN, 
    TEAL, 
    RED, 
    PINK, 
    YELLOW, 
    WHITE
};

struct meinNamespace::setColor {
    color _c;
    HANDLE _console_handle;
    setcolor(color c, HANDLE console_handle)
        : _c(c), _console_handle(0)
    { 
        _console_handle = console_handle;
    }
};


void meinNamespace::draw(int x, int y) {
    HWND myconsole = GetConsoleWindow();
    HDC mydc = GetDC(myconsole);

    int pixel =0;

    COLORREF COLOR= RGB(255,255,255); 


    for(double i = 0; i < PI * 4; i += 0.05) {
        SetPixel(mydc,pixel,(int)(50+25*cos(i)),COLOR);
        pixel+=1;
    }
    ReleaseDC(myconsole, mydc);
}

void meinNamespace::drawSquare(int aa, int ab, int ba, int bb) {
    draw(aa,bb);
}

Header:

#ifndef MEINHEADER_H
#define MEINHEADER_H

namespace meinNamespace {
    enum color {
        DARKBLUE=1,DARKGREEN,
        DARKTEAL,DARKRED,
        DARKPINK,DARKYELLOW,
        GRAY, DARKGRAY,
        BLUE,GREEN,
        TEAL,RED,
        PINK,YELLOW,
        WHITE
    };
    struct setcolor;
    void meinNamespace::draw(int x, int y);
    void meinNamespace::draw(int a, int b);
}

#endif

Die Funktionen sollen in ein Konsolenfenster Pixel schreiben, ob sie funktionieren weiß ich noch nicht und sie sind auch noch nicht fertig. Ich weiß nicht wo der Fehler verursacht wird. Ich hoffe jemand kann mir da helfen

LG

Software, IT, programmieren, CPP, development, Informatik, cpp lernen, Cpp Programierung

c++ Mindestgenauigkeit?

Hey Leute,

brauche Hilfe bei folgender Aufgabe:

Lassen Sie dafür den Benutzer eine frei wählbare Mindest-Genauigkeit der Berechnung eingeben, wie z.B. 0.001(ein Tausendstel), und brechen Sie die Schleife ab, sobald die gewünschte Genauigkeit erreicht ist. Die Genauigkeit ergibt sich natürlich aus der Differenz zwischen den Werten von xnund xn-1.

Mein quellcode sieht bis jetzt so aus:

int main()
{
    double in{ 0.0 };                                       //Initialisieren der input Zahl
    double x{ 1.0 };
    double xn{ 1.0 };
    int p{ 0 };

    cout << "Geben Sie eine Fliesskommazahl ein um die Wurzel zu berechnen: \n";
    cin >> in;                                                      //Einlesen der zu berechnenden Zahl

    cout << "Geben Sie die gewuenschte Genauigkeit ein: " << "\n";  //User wird aufgefordert die Genauigkeit der double einzugeben
    cin >> p;

    if (in > 0);                                            //Wenn input höher als null ist wird ausgeführt:
    {
        cout << "Sie haben folgende Zahl zum berechnen eingegeben: " << in << "\n";                                 //Input Zahl wird ausgegeben
        while (x - (x-1) <= p)                         //i startet bei 0 und wird bis zum 8. Durchlauf ausgeführt
        {
            x = xn;                                         //Zuweisung für die Wurzel
            xn = (x + in / x) / 2;                          //Zuweisung der Formel der Wurzelberechnung für xn
           // cout.precision(p);                              //Die Zahlen werden mit der Genauigkeit p ausgegeben
            cout << x << "\n";                              //Ausgabe der Wurzelberechnung
        }
        
        cout << "Die Wurzelberechnung ergibt: " << x << "\n";
    }
    
    return 0;
}

wie kann ich meine while schleife ändern, sodass ich die aufgabe erfülle? hänge hier fest..

Computer, Schule, Mathematik, Technik, programmieren, CPP, Informatik

Meistgelesene Beiträge zum Thema CPP