<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem c-plus-plus</title>
<link>https://forum.pasja-informatyki.pl/tag/c-plus-plus</link>
<description>Powered by Question2Answer</description>
<item>
<title>Jak ulepszyć kod gry RPG?</title>
<link>https://forum.pasja-informatyki.pl/599974/jak-ulepszyc-kod-gry-rpg</link>
<description>

&lt;p&gt;Cześć jak można ulepszyć kod tej tekstowej gry rpg w stylu Diablo, Path of Exile.&lt;/p&gt;



&lt;p&gt;Enemy.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;Enemy.h&quot;

void Enemy::createEnemy(int type)
{
    if (type == 0) {
        name = &quot;Zombie&quot;;
        maxHealth = 50;
        damage = 5;
    } else if (type == 1) {
        name = &quot;Szkieletor&quot;;
        maxHealth = 35;
        damage = 8;
    } else if (type == 2) {
        name = &quot;Goblinek&quot;;
        maxHealth = 30;
        damage = 10;
    } else {
        name = &quot;Zombiak&quot;;
        maxHealth = 50;
        damage = 5;
    }
    currentHealth = maxHealth;
}

void Enemy::SetLevel(int enemyLevel)
{
    level = enemyLevel;
    maxHealth += (level - 1) * 10;
    damage += (level - 1) * 2;
    currentHealth = maxHealth;
}&lt;/pre&gt;



&lt;p&gt;Enemy.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#pragma once
#include &amp;lt;string&amp;gt;

class Enemy {
public:
    std::string name { }; // nowa składnia C++23
    int maxHealth { 0 };
    int currentHealth { 0 };
    int level { 1 };
    int damage { 0 };

    void createEnemy(int type);
    void SetLevel(int enemyLevel);
};&lt;/pre&gt;



&lt;p&gt;main.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;Enemy.h&quot;
#include &quot;Player.h&quot;
#include &quot;Print.h&quot;
#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;ctime&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

// Stany gry
enum class GameState { MainMenu,
    CharacterSelect,
    Playing,
    Exit };

// Funkcje losujące przeciwników
int GetEnemyCount()
{
    int roll = rand() % 100;
    if (roll &amp;lt; 50)
        return 1;
    if (roll &amp;lt; 75)
        return 2;
    if (roll &amp;lt; 90)
        return 3;
    return 4;
}

int GetEnemyType() { return rand() % 3; } // 0-Zombie,1-Szkieletor,2-Goblin
int GetEnemyLevel() { return 1 + rand() % 3; }

// Funkcja losująca obrażenia z możliwością krytyka
int DealDamage(int baseDamage)
{
    int roll = rand() % 100;
    if (roll &amp;lt; 10)
        return baseDamage * 2; // 10% krytyk
    return baseDamage;
}

int main()
{
    srand(time(0));

    Player player;
    bool running = true;
    GameState state = GameState::MainMenu;

    while (running) {
        if (state == GameState::MainMenu) {
            Print::WriteColor(&quot;====UpiornePotyczki====\n\n&quot;, Color::Red);
            Print::Write(&quot;1. Nowa Gra\n&quot;);
            Print::Write(&quot;2. Wyjście\n&quot;);
            Print::WriteColor(&quot;\nWybierz opcję: &quot;, Color::Yellow);
            int choice;
            std::cin &amp;gt;&amp;gt; choice;

            if (choice == 1)
                state = GameState::CharacterSelect;
            else if (choice == 2)
                state = GameState::Exit;
            Print::Clear();
        }

        else if (state == GameState::CharacterSelect) {
            Print::WriteColor(&quot;Wybierz klasę postaci:\n\n&quot;, Color::Yellow);
            Print::Write(&quot;1. Wojownik\n&quot;);
            Print::Write(&quot;2. Łotrzyk\n&quot;);
            Print::Write(&quot;3. Mag\n&quot;);
            Print::WriteColor(&quot;\nOpcja: &quot;, Color::Yellow);

            int choice;
            std::cin &amp;gt;&amp;gt; choice;
            player.SetClass(choice);
            player.DisplayPickedCharacter();

            int continueChoice;
            std::cin &amp;gt;&amp;gt; continueChoice;
            Print::Clear();
            state = GameState::Playing;
        }

        else if (state == GameState::Playing) {
            std::vector&amp;lt;Enemy&amp;gt; enemies;
            int enemyCount = GetEnemyCount();

            for (int i = 0; i &amp;lt; enemyCount; i++) {
                Enemy enemy;
                enemy.createEnemy(GetEnemyType());
                enemy.SetLevel(GetEnemyLevel());
                enemies.push_back(enemy);
            }

            bool inCombat = true;
            while (inCombat) {
                Print::Clear();
                Print::WriteColor(&quot;Pojawiają się przeciwnicy!\n\n&quot;, Color::Red);

                Print::Write(&quot;Twoje zdrowie:\n&quot;);
                Print::DrawHPBar(player.currentHealth, player.maxHealth, 20, Color::Green);

                for (size_t i = 0; i &amp;lt; enemies.size(); i++) {
                    Print::Write(enemies[i].name + &quot; (Poziom &quot; + std::to_string(enemies[i].level) + &quot;):\n&quot;);
                    Color hpColor = enemies[i].currentHealth &amp;gt; 0 ? Color::Yellow : Color::Red;
                    Print::DrawHPBar(enemies[i].currentHealth, enemies[i].maxHealth, 20, hpColor);
                }

                Print::Write(&quot;\n1. Atak\n2. Ucieczka\n&quot;);
                Print::WriteColor(&quot;Opcja: &quot;, Color::Yellow);
                int choice;
                std::cin &amp;gt;&amp;gt; choice;

                if (choice == 1) {
                    Print::WriteColor(&quot;\nWybierz przeciwnika do ataku: &quot;, Color::Yellow);
                    int targetChoice;
                    std::cin &amp;gt;&amp;gt; targetChoice;
                    size_t targetIndex = targetChoice - 1;

                    if (targetIndex &amp;lt; enemies.size()) {
                        int dmg = DealDamage(player.damage);
                        enemies[targetIndex].currentHealth -= dmg;

                        Print::Write(&quot;\nUderzasz &quot;);
                        Print::WriteColor(enemies[targetIndex].name, Color::Yellow);
                        if (dmg &amp;gt; player.damage)
                            Print::WriteColor(&quot; krytycznie! &quot;, Color::Red);
                        Print::Write(&quot; za &quot; + std::to_string(dmg) + &quot; obrażeń!\n&quot;);

                        if (enemies[targetIndex].currentHealth &amp;lt;= 0) {
                            enemies[targetIndex].currentHealth = 0;
                            Print::WriteColor(&quot;\n&quot; + enemies[targetIndex].name + &quot; został pokonany!\n&quot;, Color::Green);
                            enemies.erase(enemies.begin() + targetIndex);
                        }

                        if (enemies.empty()) {
                            Print::WriteColor(&quot;\nWygrałeś walkę!\n&quot;, Color::Green);
                            inCombat = false;
                        } else {
                            Print::Write(&quot;\nPrzeciwnicy atakują!\n&quot;);
                            for (size_t i = 0; i &amp;lt; enemies.size(); i++) {
                                int enemyDmg = DealDamage(enemies[i].damage);
                                player.currentHealth -= enemyDmg;
                                if (player.currentHealth &amp;lt; 0)
                                    player.currentHealth = 0;

                                Print::WriteColor(enemies[i].name, Color::Red);
                                Print::Write(&quot; uderza cię za &quot; + std::to_string(enemyDmg) + &quot; obrażeń!\n&quot;);

                                if (player.currentHealth &amp;lt;= 0) {
                                    Print::WriteColor(&quot;\nZostałeś pokonany..\n&quot;, Color::Red);
                                    inCombat = false;
                                    state = GameState::Exit;
                                    break;
                                }
                            }
                        }
                    } else {
                        Print::Write(&quot;\nNieprawidłowy cel!\n&quot;);
                    }
                } else if (choice == 2) {
                    Print::WriteColor(&quot;\nUciekasz jak tchórz!\n&quot;, Color::Yellow);
                    inCombat = false;
                } else {
                    Print::Write(&quot;\nNieprawidłowy wybór!\n&quot;);
                }

                Print::WriteColor(&quot;\nNaciśnij Enter, aby kontynuować...&quot;, Color::Cyan);
                std::cin.ignore();
                std::cin.get();
            }

            state = GameState::Exit;
        }

        else if (state == GameState::Exit) {
            running = false;
        }
    }

    Print::WriteColor(&quot;\n************************************\n&quot;, Color::Magenta);
    Print::WriteColor(&quot;* Dzięki za grę w UpiornePotyczki! *\n&quot;, Color::Magenta);
    Print::WriteColor(&quot;************************************\n&quot;, Color::Magenta);

    return 0;
}&lt;/pre&gt;



&lt;p&gt;Player.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;Player.h&quot;
#include &quot;Print.h&quot;

void Player::SetClass(int choice)
{
    name = &quot;Bohater&quot;;
    if (choice == 1) {
        playerClass = &quot;Wojownik&quot;;
        strength = 10;
        intelligence = 2;
        vitality = 8;
    } else if (choice == 2) {
        playerClass = &quot;Łotrzyk&quot;;
        strength = 6;
        intelligence = 5;
        vitality = 6;
    } else if (choice == 3) {
        playerClass = &quot;Mag&quot;;
        strength = 2;
        intelligence = 10;
        vitality = 5;
    }
    CalculateStats();
}

void Player::CalculateStats()
{
    maxHealth = 50 + vitality * 10;
    currentHealth = maxHealth;
    maxMana = 30 + intelligence * 10;
    currentMana = maxMana;

    if (playerClass == &quot;Wojownik&quot;)
        damage = strength * 2;
    else if (playerClass == &quot;Łotrzyk&quot;)
        damage = strength * 2 + 2;
    else if (playerClass == &quot;Mag&quot;)
        damage = intelligence * 2;
    else
        damage = 5;
}

void Player::DisplayPickedCharacter()
{
    Print::Clear();
    Print::Write(&quot;Wybrałeś &quot;);
    Print::WriteColor(playerClass, Color::Cyan);
    Print::Write(&quot;!\n\n&quot;);
    Print::Write(&quot;Siła: &quot; + std::to_string(strength) + &quot;\n&quot;);
    Print::Write(&quot;Inteligencja: &quot; + std::to_string(intelligence) + &quot;\n&quot;);
    Print::Write(&quot;Witalność: &quot; + std::to_string(vitality) + &quot;\n&quot;);
    Print::Write(&quot;Zdrowie: &quot;);
    Print::WriteColor(std::to_string(currentHealth), Color::Green);
    Print::Write(&quot;\nMana: &quot;);
    Print::WriteColor(std::to_string(currentMana), Color::Cyan);
    Print::Write(&quot;\n\nNaciśnij 1, aby kontynuować: &quot;);
}&lt;/pre&gt;



&lt;p&gt;Player.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#pragma once
#include &amp;lt;string&amp;gt;

class Player {
public:
    std::string name { }; // nowa składnia C++23
    std::string playerClass { };

    int strength { 0 };
    int intelligence { 0 };
    int vitality { 0 };

    int maxHealth { 0 };
    int currentHealth { 0 };

    int maxMana { 0 };
    int currentMana { 0 };

    int damage { 0 };

    void SetClass(int choice);
    void CalculateStats();
    void DisplayPickedCharacter();
};&lt;/pre&gt;



&lt;p&gt;Print.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;Print.h&quot;
#include &amp;lt;cstdlib&amp;gt;

void Print::Write(const std::string&amp;amp; text) { std::print(&quot;{}&quot;, text); }

void Print::SetColor(Color color)
{
    switch (color) {
    case Color::Red:
        std::print(&quot;\033[31m&quot;);
        break;
    case Color::Green:
        std::print(&quot;\033[32m&quot;);
        break;
    case Color::Yellow:
        std::print(&quot;\033[33m&quot;);
        break;
    case Color::Cyan:
        std::print(&quot;\033[36m&quot;);
        break;
    case Color::Blue:
        std::print(&quot;\033[34m&quot;);
        break;
    case Color::Magenta:
        std::print(&quot;\033[35m&quot;);
        break;
    case Color::White:
        std::print(&quot;\033[37m&quot;);
        break;
    case Color::Black:
        std::print(&quot;\033[30m&quot;);
        break;
    default:
        std::print(&quot;\033[0m&quot;);
        break;
    }
}

void Print::WriteColor(const std::string&amp;amp; text, Color color)
{
    SetColor(color);
    std::print(&quot;{}&quot;, text);
    SetColor(Color::Default);
}

void Print::Clear() { system(&quot;clear&quot;); }

void Print::DrawHPBar(int current, int max, int width, Color color)
{
    int filled = (current * width) / max;
    SetColor(color);
    std::print(&quot;[&quot;);
    for (int i = 0; i &amp;lt; filled; i++)
        std::print(&quot;█&quot;);
    for (int i = filled; i &amp;lt; width; i++)
        std::print(&quot; &quot;);
    std::print(&quot;] {}/{}\n&quot;, current, max);
    SetColor(Color::Default);
}&lt;/pre&gt;



&lt;p&gt;Print.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#pragma once
#include &amp;lt;print&amp;gt;

enum class Color { Default,
    Red,
    Green,
    Yellow,
    Cyan,
    Blue,
    Magenta,
    White,
    Black };

class Print {
public:
    static void Write(const std::string&amp;amp; text);
    static void SetColor(Color color);
    static void WriteColor(const std::string&amp;amp; text, Color color);
    static void Clear();
    static void DrawHPBar(int current, int max, int width, Color color);
};&lt;/pre&gt;



&lt;p&gt;Makefile&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
# Kompilator i flagi
CXX = clang++
CXXFLAGS = -std=c++23 -Wall -Wextra -I./src

# Katalogi
SRC_DIR = src
BIN_DIR = bin

# Pliki źródłowe
SRCS = $(SRC_DIR)/main.cpp \
       $(SRC_DIR)/Player.cpp \
       $(SRC_DIR)/Enemy.cpp \
       $(SRC_DIR)/Print.cpp

# Plik wynikowy
TARGET = $(BIN_DIR)/UpiornePotyczki

# Domyślna akcja
all: $(TARGET)

# Kompilacja plików źródłowych i linkowanie
$(TARGET): $(SRCS)
	@mkdir -p $(BIN_DIR)
	$(CXX) $(CXXFLAGS) $^ -o $@

# Czyszczenie plików obiektowych i binarnych
clean:
	rm -rf $(BIN_DIR)/*.o $(TARGET)&lt;/pre&gt;



&lt;p&gt;CMakeLists.txt&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
cmake_minimum_required(VERSION 4.3.1)
project(UpiornePotyczki)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Dodajemy wszystkie pliki źródłowe
file(GLOB SOURCES &quot;src/*.cpp&quot;)

add_executable(UpiornePotyczki ${SOURCES})&lt;/pre&gt;



&lt;p&gt;README.md&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
# UpiornePotyczki

Konsolowa gra RPG w C++.

## Funkcje
- Wybór klasy: Wojownik, Łotrzyk, Mag
- Walki z losowymi przeciwnikami (Zombie, Szkieletor, Goblin)
- Paski HP w konsoli, kolory i komunikaty o krytykach
- System poziomów przeciwników i skalowanie obrażeń

## Kompilacja i uruchamianie

### Wymagania
- Kompilator C++23 (np. `clang++` lub `g++` obsługujący C++23)
- Użyłem Clang 22.1.5
- System Linux lub Mac (komenda `system(&quot;clear&quot;)` używana do czyszczenia konsoli)

### Kompilacja za pomocą Makefile

1. Przejdź do katalogu projektu:
   ```bash
   cd /ścieżka/do/project

## Kompilacja
```bash
mkdir build
cd build
cmake ..
make
./bin/UpiornePotyczki&lt;/pre&gt;



&lt;p&gt;Możesz też na szybko skompilować za pomocą polecenia w rozszerzeniu VSCode o nazwie&amp;nbsp;Code Runner.&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
&quot;code-runner.executorMap&quot;: {
  &quot;cpp&quot;: &quot;clear &amp;amp;&amp;amp; cd $dir &amp;amp;&amp;amp; mkdir -p bin &amp;amp;&amp;amp; cd bin &amp;amp;&amp;amp; clang++ -std=c++23 ../Player.cpp ../Enemy.cpp ../Print.cpp ../$fileName -o $fileNameWithoutExt &amp;amp;&amp;amp; ./$fileNameWithoutExt&quot;,
}&lt;/pre&gt;

</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599974/jak-ulepszyc-kod-gry-rpg</guid>
<pubDate>Tue, 19 May 2026 15:24:43 +0000</pubDate>
</item>
<item>
<title>Czy ktoś chciał by przetestować moją gre</title>
<link>https://forum.pasja-informatyki.pl/599929/czy-ktos-chcial-by-przetestowac-moja-gre</link>
<description>

&lt;p&gt;Cześć wszystkim!&lt;/p&gt;



&lt;p&gt;Chciałbym zaprezentować Wam mój projekt, nad którym obecnie pracuję. Gra jest w fazie rozwoju, ale podstawowe mechaniki są już zaimplementowane. Zależy mi na Waszych opiniach, wyłapaniu ewentualnych błędów oraz sugestiach, co mógłbym dodać w przyszłości.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Minecoz (Pre-classic)&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Mój najnowszy projekt pisany w &lt;strong&gt;C++ przy użyciu biblioteki SDL3&lt;/strong&gt;. Skupiłem się tutaj na wydajności i nieskończonym świecie.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Co już działa:&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
	

&lt;li&gt;
	

&lt;p&gt;Nieskończona mapa.&lt;/p&gt;
	&lt;/li&gt;
	

&lt;li&gt;
	

&lt;p&gt;Dynamiczny generator drzew.&lt;/p&gt;
	&lt;/li&gt;
	

&lt;li&gt;
	

&lt;p&gt;Kamera podążająca za graczem.&lt;/p&gt;
	&lt;/li&gt;
	

&lt;li&gt;
	

&lt;p&gt;System animacji postaci.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Link do pobrania:&lt;/strong&gt;&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://bug128.github.io/MinecraftCodeDealer/Pc_games.html&quot;&gt;Pobierz Minecoz&lt;/a&gt;&lt;/p&gt;</description>
<category>Nasze projekty</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599929/czy-ktos-chcial-by-przetestowac-moja-gre</guid>
<pubDate>Sun, 26 Apr 2026 11:55:34 +0000</pubDate>
</item>
<item>
<title>Gdy kopiuje pętle4 z folderu kurs_cpp_odc3 gdzie indziej - Unable to start debugging</title>
<link>https://forum.pasja-informatyki.pl/599676/gdy-kopiuje-petle4-folderu-kurs_cpp_odc3-gdzie-indziej-unable-to-start-debugging</link>
<description>Cześć Gdy kopiuje pętle4 z folderu kurs_cpp_odc3 gdzie indziej. Przy debugowanie pojawia się komunikat: Unable to start debugging. Unexpected GDB output from command&amp;quot;-environment-cd &amp;quot;C:\\Users\\...\imię&amp;quot; &amp;quot;C:Users\\...imię No such file or directory&lt;br /&gt;
&lt;br /&gt;
Gdy uruchamiam sam plik z folderu kurs_cpp_odc3 błąd nie występuje. Gdy podaję ścieżke do folderu program uruchamia się. Używam Visual Studio Code Windows 11 Home x64</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599676/gdy-kopiuje-petle4-folderu-kurs_cpp_odc3-gdzie-indziej-unable-to-start-debugging</guid>
<pubDate>Sun, 15 Feb 2026 12:10:24 +0000</pubDate>
</item>
<item>
<title>Nie mogę zrobić programu JEBUT z kursu pasja informatyki C++</title>
<link>https://forum.pasja-informatyki.pl/599658/nie-moge-zrobic-programu-jebut-z-kursu-pasja-informatyki-c</link>
<description>

&lt;p&gt;Hej robię programik z tego poradnika:
&lt;br&gt;

&lt;br&gt;
&lt;a href=&quot;https://www.youtube.com/watchv=y6GOYVTVvqo&amp;amp;list=PLOYHgt8dIdoxx0Y5wzs7CFpmBzb40PaDo&amp;amp;index=4&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watchv=y6GOYVTVvqo&amp;amp;list=PLOYHgt8dIdoxx0Y5wzs7CFpmBzb40PaDo&amp;amp;index=4&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;
Nie działa System (&quot;cls&quot;) w Visual Studio Code. W terminalu Windowsowym działa a w Visual Studio Code nie działa dlaczego?&lt;/p&gt;



&lt;p&gt;Używam Windows 11 Home x64.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;windows.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;conio.h&amp;gt;

using namespace std;


int main()
{
    for (int i=15; i&amp;gt;=0; i--)
    {
    
    Sleep(1000);
    system (&quot;cls&quot;);

    cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; endl;
    }
    cout &amp;lt;&amp;lt; &quot;JEBUT&quot;;

    return 0;
}
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599658/nie-moge-zrobic-programu-jebut-z-kursu-pasja-informatyki-c</guid>
<pubDate>Sat, 14 Feb 2026 15:51:17 +0000</pubDate>
</item>
<item>
<title>Offtop parametry funkcji</title>
<link>https://forum.pasja-informatyki.pl/599488/offtop-parametry-funkcji</link>
<description>

&lt;p&gt;Nakładka na C, coraz bardziej się rozbudowuje&amp;nbsp; ;)&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
struct LabelOptions {
    int fontSize = 12;
    std::string anchor = &quot;middle&quot;;
    std::string color = &quot;black&quot;;
};

void addLabel(int x, int y, const std::string&amp;amp; text, const LabelOptions&amp;amp; opts = {}) {
    std::cout &amp;lt;&amp;lt; &quot;x=&quot; &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; y=&quot; &amp;lt;&amp;lt; y &amp;lt;&amp;lt; &quot; text=&quot; &amp;lt;&amp;lt; text
              &amp;lt;&amp;lt; &quot; fontSize=&quot; &amp;lt;&amp;lt; opts.fontSize
              &amp;lt;&amp;lt; &quot; anchor=&quot; &amp;lt;&amp;lt; opts.anchor
              &amp;lt;&amp;lt; &quot; color=&quot; &amp;lt;&amp;lt; opts.color &amp;lt;&amp;lt; &quot;\n&quot;;
}

addLabel(100, 200, &quot;Hello&quot;); // używa domyślnych wartości
addLabel(100, 200, &quot;Hello&quot;, {16, &quot;end&quot;, &quot;red&quot;}); // nadpisuje wszystkie
addLabel(100, 200, &quot;Hello&quot;, {.anchor=&quot;end&quot;});    // C++20: designated initializers
&lt;/pre&gt;



&lt;p&gt;Normalnie wyścig zbrojeń z JS. Wiem, wiem język to biblioteki, a nie podstawowa składania. Ale już niekonieczna jest przemyślana kolejność argumentów.&amp;nbsp;&lt;/p&gt;</description>
<category>Offtop</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/599488/offtop-parametry-funkcji</guid>
<pubDate>Fri, 19 Dec 2025 22:01:22 +0000</pubDate>
</item>
<item>
<title>Wiszące referencje w C++</title>
<link>https://forum.pasja-informatyki.pl/598539/wiszace-referencje-w-c</link>
<description>

&lt;p&gt;Ma ktoś pomyśł jak naprawić problem wiszących referencji w metodzie `menu::add_submenu`? Jak w ogóle poprawić można mój kod?&lt;/p&gt;



&lt;p&gt;main.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
// the purpose of the below code is to test menu class

#include &quot;menu.h&quot;
#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;iostream&amp;gt;

int main() {
    std::cin.exceptions(std::cin.eofbit);
    try {
        pt::menu main_menu{&quot;Main menu&quot;};
        main_menu.add_item(&quot;item 1&quot;,
                           []() { std::cout &amp;lt;&amp;lt; &quot;item 1&quot; &amp;lt;&amp;lt; std::endl; });
        main_menu.add_item(&quot;item 2&quot;,
                           []() { std::cout &amp;lt;&amp;lt; &quot;item 2&quot; &amp;lt;&amp;lt; std::endl; });
        {
            pt::menu submenu{&quot;Submenu&quot;};
            main_menu.add_submenu(submenu);
        }
        main_menu.loop();
    } catch (const std::exception&amp;amp; e) {
        std::cerr &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; '\n';
        return EXIT_FAILURE;
    }
    std::cout &amp;lt;&amp;lt; &quot;Good bye!\n&quot;;
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;menu.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#ifndef MENU_H_
#define MENU_H_

#include &amp;lt;functional&amp;gt;
#include &amp;lt;iosfwd&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;utility&amp;gt;
#include &amp;lt;vector&amp;gt;

namespace pt {

struct menu_item {
    menu_item(std::string title_val, std::function&amp;lt;void()&amp;gt; action_val);

    friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs);

    std::string title{};
    std::function&amp;lt;void()&amp;gt; action{};
};

class menu {
 public:
    explicit menu(std::string title_val, std::string description_val = &quot;&quot;,
                  std::vector&amp;lt;menu_item&amp;gt; items_val = {});

    void add_item(menu_item item);
    void add_item(std::string title_val, std::function&amp;lt;void()&amp;gt; action);
    void add_item_at(int index, menu_item item);
    void add_item_at(int index, std::string title_val,
                     std::function&amp;lt;void()&amp;gt; action);
    void remove_item(int index);

    void add_submenu(menu menu_val);
    void add_submenu(std::string title_val, menu menu_val);
    void add_submenu_at(int index, menu menu_val);
    void add_submenu_at(int index, std::string title_val, menu menu_val);

    void set_title(std::string title_val);
    void set_description(std::string description_val);

    void loop() const;

 private:
    // helper functions
    void print_choices() const;
    char read_choice() const;
    void check_index(std::size_t index) const;
    void print_title(std::string_view title) const;

    // wrapper function for menu::loop
    std::function&amp;lt;void()&amp;gt; invoke_menu_loop(const menu&amp;amp; menu_val);

    static constexpr char quit_choice = 'q';
    static int nesting_level;
    std::string title{};
    std::string description{};
    std::vector&amp;lt;menu_item&amp;gt; items{};
};

}  // namespace pt

#endif  // MENU_H_
&lt;/pre&gt;



&lt;p&gt;menu.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;menu.h&quot;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;sstream&amp;gt;
#include &amp;lt;stdexcept&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;utility&amp;gt;
#include &amp;lt;vector&amp;gt;

namespace pt {

// menu_item constructors
menu_item::menu_item(std::string title_val, std::function&amp;lt;void()&amp;gt; action_val)
    : title{std::move(title_val)}, action{std::move(action_val)} {}

// menu_item struct i/o operators
std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs) {
    return lhs &amp;lt;&amp;lt; rhs.title;
}

// menu class constructors
menu::menu(std::string title_val, std::string description_val,
           std::vector&amp;lt;menu_item&amp;gt; items_val)
    : title{std::move(title_val)}, description{std::move(description_val)},
      items{std::move(items_val)} {}

// menu class static variables
int menu::nesting_level{0};

// menu class public interface
void menu::add_item(menu_item item) { items.push_back(std::move(item)); }

void menu::add_item(std::string title_val, std::function&amp;lt;void()&amp;gt; action_val) {
    items.emplace_back(std::move(title_val), std::move(action_val));
}

void menu::add_item_at(int index, menu_item item) {
    check_index(index);
    items.insert(items.begin() + index, std::move(item));
}

void menu::add_item_at(int index, std::string title_val,
                       std::function&amp;lt;void()&amp;gt; action) {
    check_index(index);
    items.emplace(items.begin() + index, std::move(title_val),
                  std::move(action));
}

void menu::remove_item(int index) {
    check_index(index);
    items.erase(items.begin() + index);
}

void menu::add_submenu(menu menu_val) {
    items.emplace_back(menu_val.title, invoke_menu_loop(menu_val));
}

void menu::add_submenu(std::string title_val, menu menu_val) {
    items.emplace_back(title_val, invoke_menu_loop(menu_val));
}

void menu::add_submenu_at(int index, menu menu_val) {
    check_index(index);
    items.insert(items.begin() + index,
                 menu_item{menu_val.title, invoke_menu_loop(menu_val)});
}

void menu::add_submenu_at(int index, std::string title_val, menu menu_val) {
    check_index(index);
    items.insert(items.begin() + index,
                 menu_item{title_val, invoke_menu_loop(menu_val)});
}

void menu::set_title(std::string title_val) { title = std::move(title_val); }

void menu::set_description(std::string description_val) {
    description = std::move(description_val);
}

void menu::loop() const {
    bool active{true};
    ++nesting_level;
    while (active) {
        print_title(title);
        if (!description.empty()) {
            std::cout &amp;lt;&amp;lt; std::endl;
            std::cout &amp;lt;&amp;lt; description;
            std::cout &amp;lt;&amp;lt; std::endl;
        }
        char choice{read_choice()};
        if (choice == quit_choice) {
            --nesting_level;
            active = false;
        } else {
            std::cout &amp;lt;&amp;lt; '\n';
            std::size_t index{static_cast&amp;lt;std::size_t&amp;gt;(choice) - '0'};
            if (index &amp;gt; items.size()) {
                std::cout &amp;lt;&amp;lt; &quot;Invalid choice!\n&quot;;
                continue;
            }
            // call function bound to menu item
            items[choice - '1'].action();
            // wait until user press the enter key
            std::cout &amp;lt;&amp;lt; &quot;\nPress enter to continue...&quot; &amp;lt;&amp;lt; std::endl;
            std::string line;
            std::getline(std::cin, line);
        }
    }
}

// menu class private functions
void menu::print_choices() const {
    for (std::size_t i = 0; i &amp;lt; items.size(); ++i) {
        std::cout &amp;lt;&amp;lt; i + 1 &amp;lt;&amp;lt; &quot;) &quot; &amp;lt;&amp;lt; items[i] &amp;lt;&amp;lt; '\n';
    }
    std::cout &amp;lt;&amp;lt; &quot;q) &quot; &amp;lt;&amp;lt; (nesting_level &amp;gt; 1 ? &quot;Back&quot; : &quot;Quit&quot;);
    std::cout &amp;lt;&amp;lt; std::endl;
}

char menu::read_choice() const {
    std::string user_input;
    char choice;
    bool valid{false};

    std::cout &amp;lt;&amp;lt; &quot;What do you want to do?\n&quot;;
    do {
        print_choices();
        std::cout &amp;lt;&amp;lt; &quot;Your choice: &quot;;
        std::getline(std::cin, user_input);
        if (user_input.length() &amp;gt; 1 || user_input.empty()) {
            std::cout &amp;lt;&amp;lt; &quot;Please enter the valid choice.\n&quot;;
            continue;
        }
        choice = tolower(user_input.at(0));
        if ((choice - '1') &amp;lt; 0 ||
            (static_cast&amp;lt;std::size_t&amp;gt;(choice - '1') &amp;gt;= items.size() &amp;amp;&amp;amp;
             (choice != quit_choice))) {
            std::cout &amp;lt;&amp;lt; &quot;Invalid choice!\n&quot;;
        } else {
            valid = true;
        }
    } while (!valid);
    return choice;
}

void menu::check_index(std::size_t index) const {
    const std::size_t max_allowed_idx{items.size() - 1};
    if (index &amp;gt; max_allowed_idx) {
        std::ostringstream oss;
        oss &amp;lt;&amp;lt; &quot;index value must be between &quot; &amp;lt;&amp;lt; index &amp;lt;&amp;lt; &quot; and &quot;
            &amp;lt;&amp;lt; max_allowed_idx;
        throw std::out_of_range{oss.str()};
    }
}

void menu::print_title(std::string_view title) const {
    std::size_t title_len = title.size();
    std::size_t width = title_len + 4;
    for (std::size_t i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; &quot;\n* &quot; &amp;lt;&amp;lt; title &amp;lt;&amp;lt; &quot; *\n&quot;;
    for (std::size_t i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; std::endl;
}

// wrapper function for menu::loop
std::function&amp;lt;void()&amp;gt; menu::invoke_menu_loop(const menu&amp;amp; the_menu) {
    return [&amp;amp;the_menu]() { the_menu.loop(); };
}

}  // namespace pt
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598539/wiszace-referencje-w-c</guid>
<pubDate>Wed, 23 Apr 2025 06:10:57 +0000</pubDate>
</item>
<item>
<title>Struktura projektu w C++</title>
<link>https://forum.pasja-informatyki.pl/598536/struktura-projektu-w-c</link>
<description>Potrzebuję wskazówek jak ogarnąć strukturę większych programów, w sensie podział na pliki nagłówków, testy, źródełka, dokumentację itd. Macie jakieś sensowne sprawdzone sposoby na to? Pytanie kieruję do osób, które mają już trochę doświadczenia z C++&lt;br /&gt;
&lt;br /&gt;
Pytam bo mi się zaczął programik rozrastać i trzymanie wszystkiego w jednym katalogu z Makefile, CPPLINT.cfg itd. jest mało praktyczne</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598536/struktura-projektu-w-c</guid>
<pubDate>Wed, 23 Apr 2025 05:34:30 +0000</pubDate>
</item>
<item>
<title>Wskaźniki NULL w C i C++</title>
<link>https://forum.pasja-informatyki.pl/598482/wskazniki-null-w-c-i-c</link>
<description>

&lt;p&gt;Czytam &lt;a href=&quot;https://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0&lt;/a&gt; i nadal nie potrafię zrozumieć dlaczego poniższe fragmenty kodu są nieprawidłowe&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
// 1
int mojnull = 0;
int* wsk = funkcja_ktora_moze_zwrocic_wsk_null();
if (wsk == mojnull) {
    std::cerr &amp;lt;&amp;lt; &quot;Wystapil blad!\n&quot;;
    std::abort();
}
// 2 - na platformie gdzie wskaznik null jest reprezentowany przez 0xDEADBEEF
#define MYNULL 0xDEADBEEF
int* wsk = funkcja_ktora_moze_zwrocic_wsk_null();
if (wsk == MYNULL) {
    std::cerr &amp;lt;&amp;lt; &quot;Wystapil blad!\n&quot;;
    std::abort();
}&lt;/pre&gt;



&lt;p&gt;Wyjaśni mi ktoś łopatologicznie?&lt;/p&gt;



&lt;p&gt;Przecież wskaźnik to zmienna przechowująca adres pamięci a w 1 adresem tym jest zero i mojnull też ma wartość zero, więc obie zmienne to obiekty przechowujące wartość zero tylko innego typu.&lt;/p&gt;



&lt;p&gt;W 2 wskaźnik pusty jest reprezentowany przez 0xDEADBEEF na nietypowej platformie, za MYNULL po przetworzeniu przez preprocesor jest podstawiane 0xDEADBEEF i jest to porównywane z wartością zmiennej wsk a 0xDEADBEEF jest przecież wartością reprezentującą wskaźnik pusty na tejże platformie. Więc 0 to chyba powinien być konstrukt synktatyczny, który odpowiada 0xDEADBEEF.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598482/wskazniki-null-w-c-i-c</guid>
<pubDate>Sat, 12 Apr 2025 18:02:43 +0000</pubDate>
</item>
<item>
<title>Czy opierać stosy, kolejki na istniejącej strukturze danych czy napisać całkowicie od zera?</title>
<link>https://forum.pasja-informatyki.pl/598470/czy-opierac-stosy-kolejki-istniejacej-strukturze-danych-napisac-calkowicie-zera</link>
<description>Jak w temacie, lepiej oprzeć na array liście i wywoływać odpowiednie metody, czy całkowicie napisać od zera to co potrzebne do implementacji ADT?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598470/czy-opierac-stosy-kolejki-istniejacej-strukturze-danych-napisac-calkowicie-zera</guid>
<pubDate>Sat, 12 Apr 2025 15:53:49 +0000</pubDate>
</item>
<item>
<title>Semantyka przenoszenia w C++ - trzy pytania</title>
<link>https://forum.pasja-informatyki.pl/598379/semantyka-przenoszenia-w-c-trzy-pytania</link>
<description>

&lt;p&gt;Hej,&lt;/p&gt;



&lt;p&gt;Dlaczego w przypadku używania std::move nie tworzy się osobnych konstruktorów tak jak pokazano to w // 1 i w // 2 tylko zwyczajnie używa się przekazywania przez wartość?&lt;/p&gt;



&lt;p&gt;Przypadek // 1 w którym przekazujemy zwykłe l-wartości jestem w stanie zrozumieć, wtedy po prostu konwertujemy f i l za pomocą std::move na r-wartości i wywołujemy odpowiednie konstruktory przenoszące odpowiadających im klas skoro mamy r-wartości (std::move dokonuje konwersji przekazanego mu argumentu na r-wartość żeby można było go przenieść).&lt;/p&gt;



&lt;p&gt;Nie rozumiem natomiast tego czemu nie tworzymy analogicznej funkcji jak pokazano w // 2 przyjmującej referencje do r-wartości. Przecież przekazując przez wartość std::string(&quot;Andrzej&quot;) do konstruktora // 1 skoro mamy przekazywanie przez wartość a nie referencję to i tak dokonywana jest kopia tego obiektu. Konkretnie tworzona jest obiekt tymczasowy i to co jest w tym obiekcie jest przenoszone do firstname i lastname. Gdyby użyć referencji do r-wartości to nie byłoby tworzonego żadnego obiektu tymczasowego.&lt;/p&gt;



&lt;p&gt;Drugie moje pytanie dotyczy czy dobrze rozumiem dlaczego w kodzie załączonym do tego pytania mamy na wyjściu , , 12. Według mnie wyjście jest takie ponieważ w przypadku std::string zostały przeniesione zasoby powiązane z obiektem natomiast age nie otrzymał przypadkowej wartości dlatego że w tym przypadku age nie jest obiektem zarządzanym. Semantyka przenoszenia ma sens jedynie w odniesieniu do zasobów alokowanych dynamicznie przez new i delete lub w podobny sposób, zarządzanych przez instancje klas. W przypadku zwykłych intów czy floatów nie mamy odpowiedzialności za zwolnienie obiektu. Przeniesienie polega na transferze odpowiedzialności za zwolnienie zasobu. Ddobrze to rozumiem?&lt;/p&gt;



&lt;p&gt;Trzecie pytanie dotyczy tego czy referencje do r-wartości wewnętrznie też są implementowane jako wskaźniki tak jak zwykłe l-wartościowe referencje.&lt;/p&gt;



&lt;p&gt;Dziękuję i pozdrawiam,
&lt;br&gt;
whiteman808&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
~ ❯ cat main.cpp                                                                                                                                ✘ INT 19:30:01
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;

class person {
public:
    person() : firstname{}, lastname{}, age{0} {}
    person(std::string f, std::string l, int a) // 1
        : firstname{std::move(f)}, lastname{std::move(l)}, age{a} {
        std::cout &amp;lt;&amp;lt; f &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; l &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n';
    }
    person(std::string&amp;amp;&amp;amp; f, std::string&amp;amp;&amp;amp; l, int a) // 2
        : firstname{std::move(f)}, lastname{std::move(l)}, age{a} {
        std::cout &amp;lt;&amp;lt; f &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; l &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n';
    }
    person(const person&amp;amp; p) { // konstruktor kopiujący
        firstname = p.firstname;
        lastname = p.lastname;
        age = p.age;
    }
private:
    std::string firstname;
    std::string lastname;
    int age;
};

int main() {
    person p{&quot;Jan&quot;, &quot;Kowalski&quot;, 12};
    return 0;
}
~ ❯ ./main                                                                                                                                            19:30:04
, , 12
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598379/semantyka-przenoszenia-w-c-trzy-pytania</guid>
<pubDate>Thu, 27 Mar 2025 19:09:19 +0000</pubDate>
</item>
<item>
<title>Nazewnictwo obiektów w C i C++</title>
<link>https://forum.pasja-informatyki.pl/598378/nazewnictwo-obiektow-w-c-i-c</link>
<description>Czy jest poprawne nazywanie obiektów typu `int x = 3` zasobami automatycznymi, podczas gdy `char* buffer = new char[BUF_SIZE];` zasobami zarządzanymi zamiast obiektami przechowywanymi na stosie i stercie?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598378/nazewnictwo-obiektow-w-c-i-c</guid>
<pubDate>Thu, 27 Mar 2025 19:07:12 +0000</pubDate>
</item>
<item>
<title>Odpowiednik zmiennych statycznych w makrach C/C++</title>
<link>https://forum.pasja-informatyki.pl/598353/odpowiednik-zmiennych-statycznych-w-makrach-c-c</link>
<description>

&lt;p&gt;Jak zrobić odpowiednik zmiennych statycznych bez lączności w zwykłych funkcjach C++ przy użyciu makr preprocesora? Przepraszam za ciągłe wstawianie pytań dzisiaj ale dopiero poznaję C++&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

int test_successes = 0;
int test_failures = 0;

void test_assert(bool expr, std::string_view msg) {
    if (expr) {
        std::cout &amp;lt;&amp;lt; &quot;* test passed: &quot; &amp;lt;&amp;lt; msg &amp;lt;&amp;lt; std::endl;
        ++test_successes;
    } else {
        std::cout &amp;lt;&amp;lt; &quot;* test failed: &quot; &amp;lt;&amp;lt; msg &amp;lt;&amp;lt; std::endl;
        ++test_failures;
    }
}

void test_stats() {
    std::cout &amp;lt;&amp;lt; &quot;successes: &quot; &amp;lt;&amp;lt; test_successes &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;failures: &quot; &amp;lt;&amp;lt; test_failures &amp;lt;&amp;lt; std::endl;
}

int main() {
    test_assert(2 == 2, &quot;2 == 2&quot;);
    test_assert(2 &amp;lt; 0 == false, &quot;2 &amp;lt; 0 == false&quot;);
    test_assert(1 == 3, &quot;1 == 3&quot;);
    test_stats();
    return 0;
}&lt;/pre&gt;

</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598353/odpowiednik-zmiennych-statycznych-w-makrach-c-c</guid>
<pubDate>Tue, 25 Mar 2025 22:43:45 +0000</pubDate>
</item>
<item>
<title>Pokazywanie wyrażenia z kodu źródłowego w funkcjach inline</title>
<link>https://forum.pasja-informatyki.pl/598352/pokazywanie-wyrazenia-z-kodu-zrodlowego-w-funkcjach-inline</link>
<description>

&lt;p&gt;W jaki sposób mogę poniższe makra zamienić na funkcje inline, tak żeby pokazywały one wyrażenie podstawione za argument expr w kodzie źródłowym oprócz samego wyniku testu? W makrach jest to wykonalne ale wolę używać funkcji inline zamiast polegać na preprocesorze&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;cassert&amp;gt;
#include &amp;lt;iostream&amp;gt;

#define CHECKPOINT(msg) (std::cerr &amp;lt;&amp;lt; (msg) &amp;lt;&amp;lt; std::endl)
#define ASSERT(expr) \
    assert((expr)); \
    CHECKPOINT(&quot;* test passed&quot;);
#define ASSERTM(msg, expr) \
    assert((void(msg), (expr))); \
    CHECKPOINT(&quot;* test passed&quot;);
#define ASSERT_FALSE(expr) \
    assert((expr) == false); \
    CHECKPOINT(&quot;* test passed&quot;);
#define ASSERTM_FALSE(msg, expr) \
    assert((void(msg), (expr) == false)); \
    CHECKPOINT(&quot;* test passed&quot;);
#define TEST_CASE(msg) \
    (std::cout &amp;lt;&amp;lt; &quot;TEST CASE: &quot; &amp;lt;&amp;lt; (msg) &amp;lt;&amp;lt; std::endl)
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598352/pokazywanie-wyrazenia-z-kodu-zrodlowego-w-funkcjach-inline</guid>
<pubDate>Tue, 25 Mar 2025 22:41:40 +0000</pubDate>
</item>
<item>
<title>Używanie w makrach preprocesora średników</title>
<link>https://forum.pasja-informatyki.pl/598350/uzywanie-w-makrach-preprocesora-srednikow</link>
<description>

&lt;p&gt;Mam takie makro&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#define CHECKPOINT(msg) (std::cerr &amp;lt;&amp;lt; (msg) &amp;lt;&amp;lt; std::endl)&lt;/pre&gt;



&lt;p&gt;Lepiej w definicjach makr dodawać średniki i wywoływać je np CHECKPOINT(&quot;test passed&quot;) czy nie robić średnika na końcu wyrażenia z std::cerr i w kodzie robić CHECKPOINT(&quot;test passed&quot;);?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598350/uzywanie-w-makrach-preprocesora-srednikow</guid>
<pubDate>Tue, 25 Mar 2025 22:38:12 +0000</pubDate>
</item>
<item>
<title>Używanie jednocześnie wejścia/wyjścia z stdio.h i iostream</title>
<link>https://forum.pasja-informatyki.pl/598348/uzywanie-jednoczesnie-wejscia-wyjscia-z-stdio-h-i-iostream</link>
<description>Czy można używać na przemian puts, fprintf, scanf i std::cout, std::cerr, std::cin w programie C++ bez ryzykowania pojawienia się nieoczekiwanych błędów w trakcie działania programu?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598348/uzywanie-jednoczesnie-wejscia-wyjscia-z-stdio-h-i-iostream</guid>
<pubDate>Tue, 25 Mar 2025 22:34:26 +0000</pubDate>
</item>
<item>
<title>Generowanie kodu C i C++ w zależności od użytego kompilatora</title>
<link>https://forum.pasja-informatyki.pl/598347/generowanie-kodu-c-i-c-w-zaleznosci-od-uzytego-kompilatora</link>
<description>Siemka&lt;br /&gt;
&lt;br /&gt;
W jaki sposób mogę zrobić tak, by dla kodu kompilowanego gcc były używane inne funkcje itd. niż dla kodu kompilowanego g++?&lt;br /&gt;
&lt;br /&gt;
Dziękuję i pozdrawiam</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598347/generowanie-kodu-c-i-c-w-zaleznosci-od-uzytego-kompilatora</guid>
<pubDate>Tue, 25 Mar 2025 22:20:59 +0000</pubDate>
</item>
<item>
<title>Pętle typu while(true) w programowaniu</title>
<link>https://forum.pasja-informatyki.pl/598218/petle-typu-while-true-w-programowaniu</link>
<description>Czy używanie nieskończonych pętli while (true), for (;;) to zła praktyka programistyczna? Pytam bo zastanawiam się nad przepisaniem kodu C++ w taki sposób by uniknąć niepotrzebnych deklaracji zmiennych i zrobić po prostu returna w odpowiednim ifie.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598218/petle-typu-while-true-w-programowaniu</guid>
<pubDate>Sat, 08 Mar 2025 16:42:48 +0000</pubDate>
</item>
<item>
<title>Program wpada w nieskończoną pętlę po naciśnięciu Ctrl+D</title>
<link>https://forum.pasja-informatyki.pl/598210/program-wpada-w-nieskonczona-petle-po-nacisnieciu-ctrl-d</link>
<description>Gdy wciskam Ctrl+D program wpada w nieskończoną pętlę. Nie poskutowało std::cin.clear() i std::cin.ignore(std::numeric_limits&amp;lt;std::streamsize&amp;gt;::max(). Ma ktoś pomysł jak wyczyścić flagę eof w cin tak, aby po wciśnięciu Ctrl+D dalej był możliwy odczyt danych z konsoli?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598210/program-wpada-w-nieskonczona-petle-po-nacisnieciu-ctrl-d</guid>
<pubDate>Fri, 07 Mar 2025 21:00:50 +0000</pubDate>
</item>
<item>
<title>unsigned int czy std::size_t?</title>
<link>https://forum.pasja-informatyki.pl/598206/unsigned-int-czy-std-size_t</link>
<description>Kiedy lepiej używać typu std::size_t a kiedy unsigned int? Tworzę klasę linked_list, a konkretnie metody insert i remove_at i mnie zastanawia czy lepiej w nich użyć size_t czy tego drugiego typu i dlaczego.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598206/unsigned-int-czy-std-size_t</guid>
<pubDate>Fri, 07 Mar 2025 15:36:16 +0000</pubDate>
</item>
<item>
<title>Interfejs menu w C++</title>
<link>https://forum.pasja-informatyki.pl/598204/interfejs-menu-w-c</link>
<description>

&lt;p&gt;Hej, napisałem interfejs menu w C++. Co sądzicie o moim programie, co mogę w nim poprawić? Czy jest coś do poprawy w kodzie źródłowym?&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
~/programy_cpp/linked_list ❯ cat main.cpp                                                                                                             17:30:52
// the purpose of the below code is to test menu class

#include &amp;lt;ios&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;limits&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;utility&amp;gt;
#include &quot;menu.h&quot;

/*
 * these functions are defined only to test menu.h library
 * i plan to merge these functions to the CalculatorApp class
 * in the future
 *
 * i wrote below code in a hurry
 */

// helper functions; will be moved into utils.h/utils.cpp in the future
inline void clear_console_input() {
    std::cin.clear();
    std::cin.ignore(std::numeric_limits&amp;lt;std::streamsize&amp;gt;::max(), '\n');
}

double read_double(const std::string&amp;amp; prompt = &quot;Enter the number: &quot;) {
    double number;
    bool success{false};
    do {
        std::cout &amp;lt;&amp;lt; prompt;
        if (std::cin &amp;gt;&amp;gt; number) {
            success = true;
        } else {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits&amp;lt;std::streamsize&amp;gt;::max(), '\n');
            std::cout &amp;lt;&amp;lt; &quot;Error: not a number.&quot; &amp;lt;&amp;lt; std::endl;
        }
    } while (!success);
    return number;
}

std::pair&amp;lt;double, double&amp;gt; read_operands() {
    double first{read_double(&quot;Enter the first operand: &quot;)};
    double second{read_double(&quot;Enter the second operand: &quot;)};
    clear_console_input();
    return std::make_pair(first, second);
}

std::pair&amp;lt;double, double&amp;gt; read_operands_div() {
    double first{read_double(&quot;Enter the first operand: &quot;)};
    double second;
    while ((second = read_double(&quot;Enter the second operand: &quot;)) == 0) {
        std::cout &amp;lt;&amp;lt; &quot;Error: number is equal to zero.&quot; &amp;lt;&amp;lt; std::endl;
    }
    clear_console_input();
    return std::make_pair(first, second);
}

// calculator interface
void add() {
    auto numbers = read_operands();
    std::cout &amp;lt;&amp;lt; &quot;Result of &quot; &amp;lt;&amp;lt; numbers.first &amp;lt;&amp;lt; &quot; + &quot; &amp;lt;&amp;lt; numbers.second
              &amp;lt;&amp;lt; &quot; is &quot; &amp;lt;&amp;lt; numbers.first + numbers.second &amp;lt;&amp;lt; std::endl;
}

void subtract() {
    auto numbers = read_operands();
    std::cout &amp;lt;&amp;lt; &quot;Result of &quot; &amp;lt;&amp;lt; numbers.first &amp;lt;&amp;lt; &quot; - &quot; &amp;lt;&amp;lt; numbers.second
              &amp;lt;&amp;lt; &quot; is &quot; &amp;lt;&amp;lt; numbers.first - numbers.second &amp;lt;&amp;lt; std::endl;
}

void multiply() {
    auto numbers = read_operands();
    std::cout &amp;lt;&amp;lt; &quot;Result of &quot; &amp;lt;&amp;lt; numbers.first &amp;lt;&amp;lt; &quot; * &quot; &amp;lt;&amp;lt; numbers.second
              &amp;lt;&amp;lt; &quot; is &quot; &amp;lt;&amp;lt; numbers.first * numbers.second &amp;lt;&amp;lt; std::endl;
}

void divide() {
    auto numbers = read_operands_div();
    std::cout &amp;lt;&amp;lt; &quot;Result of &quot; &amp;lt;&amp;lt; numbers.first &amp;lt;&amp;lt; &quot; / &quot; &amp;lt;&amp;lt; numbers.second
              &amp;lt;&amp;lt; &quot; is &quot; &amp;lt;&amp;lt; numbers.first / numbers.second &amp;lt;&amp;lt; std::endl;
}

int main() {
    menu app{&quot;Calculator&quot;};
    app.add_item(&quot;Add&quot;, add);
    app.add_item(&quot;Subtract&quot;, subtract);
    app.add_item(&quot;Multiply&quot;, multiply);
    app.add_item(&quot;Divide&quot;, divide);
    menu menu2{&quot;test&quot;};
    app.add_submenu(menu2);
    app.loop();
    std::cout &amp;lt;&amp;lt; &quot;Good bye!\n&quot;;
    return 0;
}
~/programy_cpp/linked_list ❯ cat menu.h                                                                                                               17:30:55
#ifndef MENU_H
#define MENU_H

#include &amp;lt;functional&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;

struct menu_item {
    explicit menu_item(const std::string&amp;amp; title_val) : title{title_val}, action{noop} {}
    menu_item(const std::string&amp;amp; title_val, std::function&amp;lt;void()&amp;gt; action_val)
        : title{title_val}, action{action_val} {}
    menu_item(const menu_item&amp;amp; item) : title{item.title}, action{item.action} {}

    friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs);

    static void noop() { std::cout &amp;lt;&amp;lt; &quot;No action defined!\n&quot;; }

    std::string title{};
    std::function&amp;lt;void()&amp;gt; action{};
};

class menu {
public:
    explicit menu(const std::string&amp;amp; title_val);
    menu(const std::string&amp;amp; title_val, const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val);
    menu(const std::string&amp;amp; title_val, const std::string&amp;amp; description_val);
    menu(const std::string&amp;amp; title_val, const std::string&amp;amp; description_val,
         const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val);

    void add_item(const menu_item&amp;amp; item);
    void add_item(const std::string&amp;amp; title_val, std::function&amp;lt;void()&amp;gt; action);
    void add_item_at(int index, const menu_item&amp;amp; item);
    void add_item_at(int index, const std::string&amp;amp; title_val,
                     std::function&amp;lt;void()&amp;gt; action);
    void remove_item(int index);

    void add_submenu(const menu&amp;amp; menu_val);
    void add_submenu(const std::string&amp;amp; title_val, const menu&amp;amp; menu_val);
    void add_submenu_at(int index, const menu&amp;amp; menu_val);
    void add_submenu_at(int index, const std::string&amp;amp; title_val,
                        const menu&amp;amp; menu_val);

    void set_title(const std::string&amp;amp; title_val);
    void set_description(const std::string&amp;amp; description_val);

    void loop() const;

private:
    // helper functions
    void print_choices() const;
    char read_choice() const;
    void check_index(std::size_t index) const;

    // wrapper function for menu::loop
    std::function&amp;lt;void()&amp;gt; invoke_menu_loop(const menu&amp;amp; menu_val);

    static int nesting_level;
    std::string title{};
    std::string description{};
    std::vector&amp;lt;menu_item&amp;gt; items{};
};

#endif // MENU_H
~/programy_cpp/linked_list ❯ cat menu.cpp                                                                                                             17:30:58
#include &quot;menu.h&quot;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;sstream&amp;gt;
#include &amp;lt;stdexcept&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;

static constexpr char quit_choice = 'q';

// helper functions
static void print_title(const std::string&amp;amp; title) {
    std::size_t title_len = title.size();
    std::size_t width = title_len + 4;
    for (std::size_t i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; &quot;\n* &quot; &amp;lt;&amp;lt; title &amp;lt;&amp;lt; &quot; *\n&quot;;
    for (std::size_t i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; std::endl;
}

// menu_item struct i/o operators
std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs) {
    return lhs &amp;lt;&amp;lt; rhs.title;
}

// menu class constructors
menu::menu(const std::string&amp;amp; title_val) : title{title_val} {}

menu::menu(const std::string&amp;amp; title_val,
           const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val)
    : title{title_val}, items{items_val} {}

menu::menu(const std::string&amp;amp; title_val, const std::string&amp;amp; description_val)
    : title{title_val}, description{description_val} {}

menu::menu(const std::string&amp;amp; title_val, const std::string&amp;amp; description_val,
           const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val)
    : title{title_val}, description{description_val}, items{items_val} {}

// menu class static variables
int menu::nesting_level{0};

// menu class public interface
void menu::add_item(const menu_item&amp;amp; item) { items.push_back(item); }

void menu::add_item(const std::string&amp;amp; title_val, std::function&amp;lt;void()&amp;gt; action_val) {
    items.push_back(menu_item{title_val, action_val});
}

void menu::add_item_at(int index, const menu_item&amp;amp; item) {
    check_index(index);
    items.insert(items.begin() + index, item);
}

void menu::add_item_at(int index, const std::string&amp;amp; title_val,
                       std::function&amp;lt;void()&amp;gt; action) {
    check_index(index);
    items.insert(items.begin() + index, menu_item{title_val, action});
}

void menu::remove_item(int index) {
    check_index(index);
    items.erase(items.begin() + index);
}

void menu::add_submenu(const menu&amp;amp; menu_val) {
    items.push_back(menu_item{menu_val.title, invoke_menu_loop(menu_val)});
}

void menu::add_submenu(const std::string&amp;amp; title_val, const menu&amp;amp; menu_val) {
    items.push_back(menu_item{title_val, invoke_menu_loop(menu_val)});
}

void menu::add_submenu_at(int index, const menu&amp;amp; menu_val) {
    check_index(index);
    items.insert(items.begin() + index,
                 menu_item{menu_val.title, invoke_menu_loop(menu_val)});
}

void menu::add_submenu_at(int index, const std::string&amp;amp; title_val,
                          const menu&amp;amp; menu_val) {
    check_index(index);
    items.insert(items.begin() + index,
                 menu_item{title_val, invoke_menu_loop(menu_val)});
}

void menu::set_title(const std::string&amp;amp; title_val) { title = title_val; }

void menu::set_description(const std::string&amp;amp; description_val) {
    description = description_val;
}

void menu::loop() const {
    bool active = true;
    ++nesting_level;
    while (active) {
        print_title(title);
        if (!description.empty()) {
            std::cout &amp;lt;&amp;lt; std::endl;
            std::cout &amp;lt;&amp;lt; description;
            std::cout &amp;lt;&amp;lt; std::endl;
        }
        char choice = read_choice();
        if (choice == quit_choice) {
            --nesting_level;
            active = false;
        } else {
            std::cout &amp;lt;&amp;lt; '\n';
            // call function bound to menu item
            items[choice - '0'].action();
            // wait until user press the enter key
            std::cout &amp;lt;&amp;lt; &quot;\nPress enter to continue...\n&quot;;
            std::cin.get();
        }
    }
}

// menu class private functions
void menu::print_choices() const {
    for (std::size_t i = 0; i &amp;lt; items.size(); ++i) {
        std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;) &quot; &amp;lt;&amp;lt; items[i] &amp;lt;&amp;lt; std::endl;
    }
    std::cout &amp;lt;&amp;lt; &quot;q) &quot;;
    if (nesting_level &amp;gt; 1)
        std::cout &amp;lt;&amp;lt; &quot;Back&quot;;
    else
        std::cout &amp;lt;&amp;lt; &quot;Quit&quot;;
    std::cout &amp;lt;&amp;lt; std::endl;
}

char menu::read_choice() const {
    std::string user_input;
    char choice;
    bool valid{false};

    std::cout &amp;lt;&amp;lt; &quot;What do you want to do?\n&quot;;
    do {
        print_choices();
        std::cout &amp;lt;&amp;lt; &quot;Your choice: &quot;;
        std::getline(std::cin, user_input);
        if (user_input.length() &amp;gt; 1 || user_input.empty()) {
            std::cout &amp;lt;&amp;lt; &quot;Please enter the valid choice.\n&quot;;
            continue;
        }
        choice = tolower(user_input.at(0));
        if ((choice - '0') &amp;lt; 0 ||
            (static_cast&amp;lt;std::size_t&amp;gt;(choice - '0') &amp;gt;= items.size() &amp;amp;&amp;amp;
             (choice != quit_choice))) {
            std::cout &amp;lt;&amp;lt; &quot;Invalid choice!\n&quot;;
        } else {
            valid = true;
        }
    } while (!valid);
    return choice;
}

void menu::check_index(std::size_t index) const {
    const std::size_t max_allowed_idx = items.size() - 2;
    if (index &amp;gt; max_allowed_idx) {
        std::ostringstream oss;
        oss &amp;lt;&amp;lt; &quot;index value must be between &quot; &amp;lt;&amp;lt; index &amp;lt;&amp;lt; &quot; and &quot;
            &amp;lt;&amp;lt; max_allowed_idx;
        throw std::out_of_range{oss.str()};
    }
}

// wrapper function for menu::loop
std::function&amp;lt;void()&amp;gt; menu::invoke_menu_loop(const menu&amp;amp; the_menu) {
    return [&amp;amp;the_menu]() { the_menu.loop(); };
}
&lt;/pre&gt;

</description>
<category>Nasze projekty</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598204/interfejs-menu-w-c</guid>
<pubDate>Fri, 07 Mar 2025 15:31:51 +0000</pubDate>
</item>
<item>
<title>Interfejs klasy menu w C++</title>
<link>https://forum.pasja-informatyki.pl/598111/interfejs-klasy-menu-w-c</link>
<description>

&lt;p&gt;Robię klasę menu w C++ (kod poniżej). Jakie rozwiązanie jest lepsze,&amp;nbsp;oczekiwanie&amp;nbsp;od użytkownika pisanej przeze mnie biblioteki podania na starcie oczekiwanego interfejsu (np. używając list inicjalizacyjnych) w konstruktorze klasy menu czy dodanie do klasy menu metod add_item, remove_item?&lt;/p&gt;



&lt;p&gt;Co sądzicie o stworzeniu&amp;nbsp;osobnej klasy menu_item_list służącej do budowania interfejsu z metodami odpowiednio push_back, pop_back i używaniu jej w klasie menu do odwoływania się do elementów menu? Czy jak tworzę klasy będące kontenerami np. menu_item_list czy checkbox_group&amp;nbsp;to dobrze jest tworzone w nich metody nazywać jak w klasach z STL push_back, pop_back, push_front, pop_front itd.?&lt;/p&gt;



&lt;p&gt;Jakbym tworzył klasę menu_item_list to chętnie dodałbym metody typu add_submenu. Jak już tworzyć klasę menu_item_list to lepiej nazwać jej metody push_back, pop_back itd. czy lepsze będą nazwy add_item, remove_item, add_submenu?&lt;/p&gt;



&lt;p&gt;Mój kod&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
~/programy_cpp/linked_list ❯ cat main.cpp                                                                                                             16:32:57
#include &amp;lt;iostream&amp;gt;
/*#include &amp;lt;string&amp;gt;*/
/*#include &quot;linked_list.h&quot;*/
#include &quot;menu.h&quot;

void display_sth() {
    std::cout &amp;lt;&amp;lt; &quot;test\n&quot;;
}

int main() {
    menu_items main_menu_items;
    main_menu_items.push_back(menu_item{&quot;test&quot;, menu_item::noop});
    main_menu_items.push_back(menu_item{&quot;display_sth&quot;, display_sth});
    menu submenu{&quot;Submenu&quot;, {{&quot;test submenu&quot;, menu_item::noop}}};
    main_menu_items.push_back(menu_item{&quot;Submenu&quot;, invoke_menu_loop(submenu)});
    menu main_menu{&quot;Main menu&quot;, main_menu_items};
    main_menu.loop();
    return 0;
}
~/programy_cpp/linked_list ❯ cat menu.h                                                                                                               16:39:44
#ifndef MENU_H
#define MENU_H

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;functional&amp;gt;

using menu_item_func = std::function&amp;lt;void()&amp;gt;;

void print_title(const std::string&amp;amp; title);

struct menu_item {
    menu_item(const std::string&amp;amp; title_val) : title{title_val}, action{noop} {}
    menu_item(const std::string&amp;amp; title_val, menu_item_func action_val)
        : title{title_val}, action{action_val} {}
    menu_item(const menu_item&amp;amp; item) : title{item.title}, action{item.action} {}

    friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs);

    static void noop() { std::cout &amp;lt;&amp;lt; &quot;No action defined!\n&quot;; }

    std::string title{};
    menu_item_func action{};
};

using menu_items = std::vector&amp;lt;menu_item&amp;gt;;

class menu {
public:
    menu(const std::string&amp;amp; title_val);
    menu(const std::string&amp;amp; title_val, const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val);
    menu(const menu&amp;amp; menu_val);

    void loop();

private:
    void print_choices() const;
    char read_choice() const;

    static int nesting_level;
    bool active{false};
    std::string title{};
    std::vector&amp;lt;menu_item&amp;gt; items{};
};

std::function&amp;lt;void()&amp;gt; invoke_menu_loop(menu&amp;amp; the_menu);

#endif // MENU_H
~/programy_cpp/linked_list ❯ cat menu.cpp                                                                                                             16:39:48
#include &quot;menu.h&quot;
#include &amp;lt;limits&amp;gt;

int menu::nesting_level = 0;

void print_title(const std::string&amp;amp; title) {
    std::size_t title_len = title.size();
    std::size_t width = title_len + 4;
    for (int i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; &quot;\n* &quot; &amp;lt;&amp;lt; title &amp;lt;&amp;lt; &quot; *\n&quot;;
    for (int i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; std::endl;
}

std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs) {
    return lhs &amp;lt;&amp;lt; rhs.title;
}

menu::menu(const std::string&amp;amp; title_val) : title{title_val} {
}

menu::menu(const std::string&amp;amp; title_val, const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val)
    : title{title_val}, items{items_val} {
}

menu::menu(const menu&amp;amp; menu_val) {
    for (const menu_item&amp;amp; item : menu_val.items) {
        items.push_back(item);
    }
}

void menu::print_choices() const {
    for (int i = 0; i &amp;lt; items.size(); ++i) {
        std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;) &quot; &amp;lt;&amp;lt; items[i] &amp;lt;&amp;lt; std::endl;
    }
    std::cout &amp;lt;&amp;lt; &quot;q) &quot;;
    if (nesting_level &amp;gt; 1)
        std::cout &amp;lt;&amp;lt; &quot;Back&quot;;
    else
        std::cout &amp;lt;&amp;lt; &quot;Quit&quot;;
    std::cout &amp;lt;&amp;lt; std::endl;
}

char menu::read_choice() const {
    char choice;
    bool valid{false};

    std::cout &amp;lt;&amp;lt; &quot;What do you want to do?\n&quot;;
    do {
        print_choices();
        std::cout &amp;lt;&amp;lt; &quot;Your choice: &quot;;
        std::cin &amp;gt;&amp;gt; choice;
        if ((choice - '0') &amp;lt; 0 || ((choice - '0') &amp;gt;= items.size()) &amp;amp;&amp;amp; (choice != 'q')) {
            std::cout &amp;lt;&amp;lt; &quot;Invalid choice!\n&quot;;
        } else {
            valid = true;
        }
    } while (!valid);
    return choice;
}

void menu::loop() {
    active = true;
    ++nesting_level;
    while (active) {
        print_title(title);
        char choice = read_choice();
        if (choice == 'q') {
            --nesting_level;
            active = false;
        } else {
            // call function bound to menu item
            items[choice - '0'].action();
            // discard input and wait until user press the enter key
            std::cout &amp;lt;&amp;lt; &quot;Press enter to continue...\n&quot;;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits&amp;lt;std::streamsize&amp;gt;::max(), '\n');
            std::cin.get();
        }
    }
}

std::function&amp;lt;void()&amp;gt; invoke_menu_loop(menu&amp;amp; the_menu) {
    return [&amp;amp;]() { the_menu.loop(); };
}
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598111/interfejs-klasy-menu-w-c</guid>
<pubDate>Sun, 23 Feb 2025 15:40:41 +0000</pubDate>
</item>
<item>
<title>Menu w C++ - błąd wykonania programu</title>
<link>https://forum.pasja-informatyki.pl/598106/menu-w-c-blad-wykonania-programu</link>
<description>

&lt;p&gt;Jakiś pomysł skąd błędy w trakcie wykonania programu? Wyjście z terminala poniżej:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
~/programy_cpp/linked_list ❯ cat menu.h                                                                                                         ✘ IOT 13:06:46
#ifndef MENU_H
#define MENU_H

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;functional&amp;gt;

using menu_item_func = std::function&amp;lt;void()&amp;gt;;

void print_title(const std::string&amp;amp; title);

struct menu_item {
    menu_item(const std::string&amp;amp; title_val) : title{title_val} {}
    menu_item(const std::string&amp;amp; title_val, menu_item_func action_val)
        : title{title_val}, action{action_val} {}
    menu_item(const menu_item&amp;amp; item) : title{item.title}, action{item.action} {}
    menu_item&amp;amp; operator=(const menu_item&amp;amp; rhs);

    friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs);

    std::string title{};
    menu_item_func action{};
};

using menu_items = std::vector&amp;lt;menu_item&amp;gt;;

class menu {
public:
    menu(const std::string&amp;amp; title_val);
    menu(const std::string&amp;amp; title_val, const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val);
    menu(const menu&amp;amp; menu_val);

    void loop();

    static void noop() { std::cout &amp;lt;&amp;lt; &quot;No action defined!\n&quot;; }

private:
    void print_choices() const;
    char read_choice() const;

    static int nesting_level;
    bool active{false};
    std::string title{};
    std::vector&amp;lt;menu_item&amp;gt; items{};
};

#endif // MENU_H
~/programy_cpp/linked_list ❯ cat menu.cpp                                                                                                             13:07:39
#include &quot;menu.h&quot;

int menu::nesting_level = 0;

void print_title(const std::string&amp;amp; title) {
    std::size_t title_len = title.size();
    std::size_t width = title_len + 4;
    for (int i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; &quot;\n* &quot; &amp;lt;&amp;lt; title &amp;lt;&amp;lt; &quot; *\n&quot;;
    for (int i = 0; i &amp;lt; width; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;*&quot;;
    }
    std::cout &amp;lt;&amp;lt; std::endl;
}

menu_item&amp;amp; menu_item::operator=(const menu_item&amp;amp; rhs) {
    title = rhs.title;
    action = rhs.action;
    return *this;
}

std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; lhs, const menu_item&amp;amp; rhs) {
    return lhs &amp;lt;&amp;lt; rhs.title;
}

menu::menu(const std::string&amp;amp; title_val) : title{title_val} {
}

menu::menu(const std::string&amp;amp; title_val, const std::vector&amp;lt;menu_item&amp;gt;&amp;amp; items_val)
    : title{title_val}, items{items_val} {
}

menu::menu(const menu&amp;amp; menu_val) {
    for (const menu_item&amp;amp; item : menu_val.items) {
        items.push_back(item);
    }
}

void menu::print_choices() const {
    for (int i = 0; i &amp;lt; items.size(); ++i) {
        std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;) &quot; &amp;lt;&amp;lt; items[i] &amp;lt;&amp;lt; std::endl;
    }
    std::cout &amp;lt;&amp;lt; &quot;q) &quot;;
    if (nesting_level &amp;gt; 1)
        std::cout &amp;lt;&amp;lt; &quot;Back&quot;;
    else
        std::cout &amp;lt;&amp;lt; &quot;Quit&quot;;
    std::cout &amp;lt;&amp;lt; std::endl;
}

char menu::read_choice() const {
    char choice;
    bool valid{false};

    std::cout &amp;lt;&amp;lt; &quot;What do you want to do?\n&quot;;
    do {
        print_choices();
        std::cout &amp;lt;&amp;lt; &quot;Your choice: &quot;;
        std::cin &amp;gt;&amp;gt; choice;
        if ((choice - '0') &amp;lt; 0 || ((choice - '0') &amp;gt;= items.size()) &amp;amp;&amp;amp; (choice != 'q')) {
            std::cout &amp;lt;&amp;lt; &quot;Invalid choice!\n&quot;;
        } else {
            valid = true;
        }
    } while (!valid);
    return choice;
}

void menu::loop() {
    active = true;
    ++nesting_level;
    while (active) {
        print_title(title);
        char choice = read_choice();
        if (choice == 'q') {
            --nesting_level;
            active = false;
        } else {
            items[choice].action();
        }
    }
}
~/programy_cpp/linked_list ❯ cat main.cpp                                                                                                             13:07:41
#include &amp;lt;iostream&amp;gt;
/*#include &amp;lt;string&amp;gt;*/
/*#include &quot;linked_list.h&quot;*/
#include &quot;menu.h&quot;

void display_sth() {
    std::cout &amp;lt;&amp;lt; &quot;test\n&quot;;
}

int main() {
    menu_items main_menu_items;
    main_menu_items.emplace_back(&quot;test&quot;, menu::noop);
    main_menu_items.emplace_back(&quot;display_sth&quot;, display_sth);
    menu main_menu{&quot;Main menu&quot;, main_menu_items};
    main_menu.loop();
    return 0;
}
~/programy_cpp/linked_list ❯ ./main                                                                                                                   13:07:47
*************
* Main menu *
*************
What do you want to do?
0) test
1) display_sth
q) Quit
Your choice: 1
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/stl_vector.h:1130: std::vector&amp;lt;_Tp, _Alloc&amp;gt;::reference std::vector&amp;lt;_Tp, _Alloc&amp;gt;::operator[](size_type) [with _Tp = menu_item; _Alloc = std::allocator&amp;lt;menu_item&amp;gt;; reference = menu_item&amp;amp;; size_type = long unsigned int]: Assertion '__n &amp;lt; this-&amp;gt;size()' failed.
zsh: IOT instruction (core dumped)  ./main
~/programy_cpp/linked_list ❯ ./main                                                                                                             ✘ IOT 13:07:51
*************
* Main menu *
*************
What do you want to do?
0) test
1) display_sth
q) Quit
Your choice: 0
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/stl_vector.h:1130: std::vector&amp;lt;_Tp, _Alloc&amp;gt;::reference std::vector&amp;lt;_Tp, _Alloc&amp;gt;::operator[](size_type) [with _Tp = menu_item; _Alloc = std::allocator&amp;lt;menu_item&amp;gt;; reference = menu_item&amp;amp;; size_type = long unsigned int]: Assertion '__n &amp;lt; this-&amp;gt;size()' failed.
zsh: IOT instruction (core dumped)  ./main
~/programy_cpp/linked_list ❯ ./main                                                                                                             ✘ IOT 13:07:55
*************
* Main menu *
*************
What do you want to do?
0) test
1) display_sth
q) Quit
Your choice: q&lt;/pre&gt;

</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598106/menu-w-c-blad-wykonania-programu</guid>
<pubDate>Sun, 23 Feb 2025 13:49:02 +0000</pubDate>
</item>
<item>
<title>Konwersja char do int na systemach, które nie używają ASCII</title>
<link>https://forum.pasja-informatyki.pl/598103/konwersja-char-do-int-na-systemach-ktore-nie-uzywaja-ascii</link>
<description>Wczytuję różne znaki od użytkownika za pomocą char ch; std::cin &amp;gt;&amp;gt; ch; w pętli (lub odpowiednika z getchar w C)&lt;br /&gt;
&lt;br /&gt;
Jak zapewnić przenośną konwersję danych w ch na typ int, jeśli użytkownik wpisze znak będący liczbą, która uwzględniałaby systemy nie używające ASCII, odpowiednio w C i w C++?&lt;br /&gt;
&lt;br /&gt;
Czy jest sens przejmować się tego typu konwersjami przy pisaniu programów, które mają coś robić więcej na poważnie niż być prostymi programikami pisanymi w ramach hobby?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598103/konwersja-char-do-int-na-systemach-ktore-nie-uzywaja-ascii</guid>
<pubDate>Sun, 23 Feb 2025 11:12:03 +0000</pubDate>
</item>
<item>
<title>Podpięcie AI do własnego Systemu Operacyjnego</title>
<link>https://forum.pasja-informatyki.pl/598020/podpiecie-ai-do-wlasnego-systemu-operacyjnego</link>
<description>Witam, jako iż jestem początkującym programistą C++ z dużymi ambicjami, mam pytanie, czy da się, i jak podpiąć AI do własnego Systemu Operacyjnego?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/598020/podpiecie-ai-do-wlasnego-systemu-operacyjnego</guid>
<pubDate>Sun, 09 Feb 2025 00:15:15 +0000</pubDate>
</item>
<item>
<title>Podpięcie programu C++ do komputera</title>
<link>https://forum.pasja-informatyki.pl/597984/podpiecie-programu-c-do-komputera</link>
<description>Dzień Dobry, mam pytanie, jak mogę podpiąć program napisany w języku C++ do komputera w taki sposób, żeby po uruchomieniu komputera pojawiła się konsola cmd, z pytaniem o login i hasło?&lt;br /&gt;
&lt;br /&gt;
PS: Program mam zrobiony, tylko nie wiem jak i czy da się coś takiego zrobić</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597984/podpiecie-programu-c-do-komputera</guid>
<pubDate>Mon, 03 Feb 2025 23:31:18 +0000</pubDate>
</item>
<item>
<title>assembler i c++  Filtr Do Zdjec</title>
<link>https://forum.pasja-informatyki.pl/597852/assembler-i-c-filtr-do-zdjec</link>
<description>

&lt;p&gt;Witam,&amp;nbsp;
&lt;br&gt;
Ostatnio pisząc kod w assemblerze, który implementował filtr&amp;nbsp;do zdjęć napotkałem problem. Próbując zloopować kod, tak, żeby bez wychodzenia z konsoli móc ponownie wypróbować filtr, wyrzuca mi wyjątek na&amp;nbsp;wczytywaniu pikseli. Czy ma ktoś pomysł, jaka może być tego przyczyna?
&lt;br&gt;
Poniżej wklejam kawałki kodu. Z&amp;nbsp;góry dziękuję za pomoc.
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;thread&amp;gt;
#include &amp;lt;omp.h&amp;gt;
#include &amp;lt;chrono&amp;gt;
#include &amp;lt;mutex&amp;gt;
#include &amp;lt;opencv2/imgcodecs.hpp&amp;gt;
#include &amp;lt;opencv2/highgui.hpp&amp;gt;
#include &amp;lt;opencv2/imgproc.hpp&amp;gt;
using namespace cv;

extern &quot;C&quot; void alg(unsigned char* ptr, unsigned char* end_row, int width, int height, int start_row);

void algC(unsigned char* imdata, int width, int height, int channels, int stride) {
    unsigned char* output = new unsigned char[(height + 2) * stride];

    int kernel[3][3] = {
        { -1, 1, 1 },
        { -1, -2, 1 },
        { -1, 1, 1 }
    };

    for (int y = 1; y &amp;lt; height - 1; y++) {
        for (int x = 1; x &amp;lt; width - 1; x++) {
            for (int c = 0; c &amp;lt; channels; c++) {
                int gradient = 0;

                for (int ky = -1; ky &amp;lt;= 1; ky++) {
                    for (int kx = -1; kx &amp;lt;= 1; kx++) {
                        int pixelValue = imdata[(y + ky) * stride + (x + kx) * channels + c];
                        gradient += kernel[ky + 1][kx + 1] * pixelValue;
                    }
                }

                int result = gradient;
                if (result &amp;lt; 0) result = 0;
                else if (result &amp;gt; 255) result = 255;

                output[y * stride + x * channels + c] = static_cast&amp;lt;unsigned char&amp;gt;(result);
            }
        }
    }

    for (int i = 0; i &amp;lt; height * stride; ++i) {
        imdata[i] = output[i];
    }

    delete[] output;
}

// Function to process image sections using the C-based algorithm
void process_image_section_c(unsigned char* imdata, int start_row, int end_row, int width, int channels, int stride) {
    unsigned char* section_imdata = imdata + start_row * stride;
    algC(section_imdata, width, end_row - start_row, channels, stride);
}

// Function to process image sections using the Assembly-based algorithm
void process_image_section_asm(unsigned char* imdata, int start_row, int end_row, int width, int channels, int stride) {
    unsigned char* section_imdata = imdata + start_row * stride;
    int height = end_row - start_row;
    unsigned char* output = new unsigned char[height * stride];
    alg(section_imdata, output, width, height, stride);
    memcpy(section_imdata, output, height * stride);
    delete[] output;
}

int main(int argc, char* argv[]) {
    const char* fileName = &quot;C:/Users/machm/OneDrive - Politechnika Śląska/Pictures/lena.jpg&quot;;
    Mat image = imread(fileName, IMREAD_COLOR);

    if (image.empty()) {
        std::cerr &amp;lt;&amp;lt; &quot;Error: Could not load image.&quot; &amp;lt;&amp;lt; std::endl;
        return -1;
    }

    cv::namedWindow(&quot;Before Processing&quot;, WINDOW_NORMAL);
    cv::imshow(&quot;Before Processing&quot;, image);
    waitKey(0);

    int width = image.cols;
    int height = image.rows;
    int channels = image.channels();
    int stride = image.step;

    while (true) {
        Mat imcopy = image.clone();
        unsigned char* imcopydata = imcopy.data;

        std::cout &amp;lt;&amp;lt; &quot;Choose algorithm to process the image:\n&quot;;
        std::cout &amp;lt;&amp;lt; &quot;1. C++ Algorithm\n&quot;;
        std::cout &amp;lt;&amp;lt; &quot;2. Assembly Algorithm\n&quot;;
        std::cout &amp;lt;&amp;lt; &quot;Enter your choice (1 or 2): &quot;;
        int choice;
        std::cin &amp;gt;&amp;gt; choice;

        if (choice != 1 &amp;amp;&amp;amp; choice != 2) {
            std::cerr &amp;lt;&amp;lt; &quot;Invalid choice! Please select 1 or 2.&quot; &amp;lt;&amp;lt; std::endl;
            continue;
        }

        int iterations = 1;


        double totalTime = 0.0;

        for (int i = 0; i &amp;lt; iterations; i++) {
            Mat iterCopy = image.clone();
            unsigned char* iterCopyData = iterCopy.data;

            int num_threads = 1;  // Number of threads
            std::vector&amp;lt;std::thread&amp;gt; threads;
            int rows_per_thread = height / num_threads;
            int remaining_rows = height % num_threads;

            auto start = std::chrono::high_resolution_clock::now();

            for (int t = 0; t &amp;lt; num_threads; t++) {
                int start_row = t * rows_per_thread + std::min(t, remaining_rows);
                int end_row = start_row + rows_per_thread + (t &amp;lt; remaining_rows ? 1 : 0);

                if (choice == 1) {
                    threads.emplace_back(process_image_section_c, iterCopyData, start_row, end_row, width, channels, stride);
                } else {
                    threads.emplace_back(process_image_section_asm, iterCopyData, start_row, end_row, width, channels, stride);
                }
            }

            for (auto&amp;amp; thread : threads) {
                thread.join();
            }

            auto end = std::chrono::high_resolution_clock::now();
            auto duration = end - start;
            totalTime += std::chrono::duration&amp;lt;double&amp;gt;(duration).count();

            // Display processed image for the first iteration only
            if (i == 0) {
                cv::namedWindow(&quot;Processed&quot;, WINDOW_NORMAL);
                cv::imshow(&quot;Processed&quot;, iterCopy);
                waitKey(0);
            }
        }

        double averageTime = totalTime / iterations;
        std::cout &amp;lt;&amp;lt; &quot;Total Time for &quot; &amp;lt;&amp;lt; iterations &amp;lt;&amp;lt; &quot; iterations: &quot; &amp;lt;&amp;lt; totalTime &amp;lt;&amp;lt; &quot;s\n&quot;;
        std::cout &amp;lt;&amp;lt; &quot;Average Time per iteration: &quot; &amp;lt;&amp;lt; averageTime &amp;lt;&amp;lt; &quot;s\n&quot;;

        char again;
        std::cout &amp;lt;&amp;lt; &quot;Do you want to run another test? (y/n): &quot;;
        std::cin &amp;gt;&amp;gt; again;
        if (again == 'n' || again == 'N') {
            break;
        }
    }

    return 0;
}
&lt;/pre&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
.DATA
    zero_float dd 0.0, 0.0, 0.0, 0.0       ; 4x float 0.0
    max_float dd 255.0, 255.0, 255.0, 255.0 ; 4x float 255.0
    minus_one dd -1.0, -1.0, -1.0, -1.0
    minus_two dd -2.0, -2.0, -2.0, -2.0
;===================PLAN=====================
;przetwarzac jeden piksel na raz
;1 kanal = 4 bajty (?)
;maske zrobic tak jak clampy
;dodawac do jakiegos innego rejestru
;wsadzac do outputu
;mozna na slowach
;lepiej nie na floatach
.CODE
alg PROC
    push rbp
    mov  rbp, rsp
    push rbx
    push rsi
    push rdi
    push r12
    push r13
    push r14
    push r15
    ; data
    mov r15, rcx                     ; r15 = imdata (wskaźnik na dane obrazu)
    mov r11, r8                      ; r11 = width
    mov r12, r9                      ; r12 = height
    mov r13, [rsp+104]               ; r13 = stride (bajty na wiersz)
    mov r14, rdx                     ; r14 = output
	sub r12, 1                       ; wysokosc -1
    sub r11, 1                      
    mov rbx, 1                       ; zaczynamy od pierwszego wiersza

    ; dane do mnozenia/clampowania
    movaps xmm0, [zero_float]
    movaps xmm1, [max_float]
    movaps xmm2, [minus_one]
    movaps xmm3, [minus_two]

row_loop:
    cmp rbx, r12
    je end_loop             ; jesli wiersz==wysokosc -&amp;gt; koniec

    mov rdi, 1              ; zaczynamy od pierwszej kolumny
col_loop:
    
    cmp rdi, r11
    je next_row             ; jesli kolumna==szerokosc -&amp;gt; nastepny wiersz 
    mov rax, rbx            ; rax = y
    imul rax, r13           ; rax = y * stride
    mov rsi, rdi            ; rsi = x
    imul rsi, 3             ; rsi = x * channels
    add rax, rsi            ; rax = y * stride + x * channels
    mov rcx, rax            ; zapisz wskaznik na piksel w rcx
    lea rax, [r15 + rax]    ; wskaznik na obecny piksel w rax

    xorps xmm13, xmm13        ; rejestr do przetrzymywania sumy kanalow


	movd		xmm4, dword ptr[rax]		; centralny piksel w xmm4
    pxor        xmm5, xmm5                  ; zerowanie xmm5
    punpcklbw   xmm4, xmm5                  ; bajty do slow
    punpcklwd   xmm4, xmm5                  ; bajty do dslow
    cvtdq2ps    xmm4, xmm4                  ; konwersja do float
    mulps       xmm4, [minus_two]           ; mnozenie przez -2 kazdego kanalu
    addps       xmm13, xmm4                 ; dodanie do xmm13 (tutaj bedzie suma wszystkich 3 kanalow)

    sub rax, r13                            ; wiersz do gory
    sub rax, 3                              ; piksel w lewo

    movd		xmm4, dword ptr[rax]        ; lewy gorny piksel w xmm4
    pxor        xmm5, xmm5                   
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    mulps       xmm4, [minus_one]           ; mnozenie przez -1 kazdego kanalu
    addps       xmm13, xmm4                 ; dodanie do xmm13
    add rax, 3                              ; piksel w prawo
    movd		xmm4, dword ptr[rax]        ; gorny piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    ;mulps       xmm4, [minus_one]           ; mnozenie przez -1 kazdego kanalu
    addps       xmm13, xmm4                 ; dodanie do xmm13

    add rax, 3                              ; piksel w prawo

    movd		xmm4, dword ptr[rax]        ; prawy gorny piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    addps       xmm13, xmm4                 ; dodanie do xmm13 (mnozenie przez 1)

    add rax, r13                            ; wiersz w dol

    movd		xmm4, dword ptr[rax]        ; prawy piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    addps       xmm13, xmm4                 ; dodanie do xmm13 (mnozenie przez 1)

    sub rax, 6                              ; dwa piksele w lewo

    movd		xmm4, dword ptr[rax]        ; lewy piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    mulps       xmm4, [minus_one]           ; mnozenie przez -1 kazdego kanalu
    addps       xmm13, xmm4                 ; dodanie do xmm13

    add rax, r13                            ; wiersz w dol

    movd		xmm4, dword ptr[rax]        ; lewy dolny piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    mulps       xmm4, [minus_one] 
    addps       xmm13, xmm4                 ; dodanie do xmm13 (mnozenie przez 1)

    add rax, 3                              ; piksel w prawo

    movd		xmm4, dword ptr[rax]        ; dolny piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    addps       xmm13, xmm4                 ; dodanie do xmm13 (mnozenie przez 1)

    add rax, 3                              ; piksel w prawo

    movd		xmm4, dword ptr[rax]        ; prawy dolny piksel w xmm4
    pxor        xmm5, xmm5
    punpcklbw   xmm4, xmm5
    punpcklwd   xmm4, xmm5
    cvtdq2ps    xmm4, xmm4
    addps       xmm13, xmm4                 ; dodanie do xmm13 (mnozenie przez 1)

    cvttps2dq xmm7, xmm13                   ; float to int
    packusdw xmm7, xmm7                     ; zapakowanie do slow
    packuswb xmm7, xmm7                     ; zapakowanie do bajtow
    movd edx, xmm7                          ; zapisanie do edx
    lea rax, [r14 + rcx]                    ; wskaznik na piksel w buforze wyjsciowym

    mov dword ptr [rax], edx                ; zapisanie nowego piksela w buforze wyjsciowym
    inc rdi                                 ; inkrementacja kolumny
    jmp col_loop
next_row:
    inc rbx                                 ; inkrementacja wiersza
    jmp row_loop
end_loop:
    pop r15
    pop r14
    pop r13
    pop r12
    pop rdi
    pop rsi
    pop rbx
    pop rbp
    ret

alg ENDP
END&lt;/pre&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
;-------------------------------------------------------------------------
LIBRARY JADll
EXPORTS alg
;-------------------------------------------------------------------------
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Assembler</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597852/assembler-i-c-filtr-do-zdjec</guid>
<pubDate>Tue, 21 Jan 2025 20:04:10 +0000</pubDate>
</item>
<item>
<title>Po podłączeniu biblioteki SFML do mojego kodu pojawia się błąd kompilacji.</title>
<link>https://forum.pasja-informatyki.pl/597612/po-podlaczeniu-biblioteki-sfml-do-mojego-kodu-pojawia-sie-blad-kompilacji</link>
<description>Próbuję podłączyć bibliotekę SFML 3.0, aby działała w Visual Studio Code 2022. Obejrzałem kilka poradników na ten temat i próbowałem to zrobić kilka razy, ale za każdym razem, pomimo że robię wszystko jak na filmikach tutorialowych, pojawia się błąd: &amp;quot;Wystąpiły błędy kompilacji. Czy chcesz kontynuować i uruchomić ostatnią kompilację zakończoną powodzeniem?&amp;quot;. Na liście błędów wyświetla się 480 różnych błędów. Zauważyłem, że w poradnikach w katalogu 'bin' znajduje się plik o nazwie 'openal32.dll', a ja tego pliku nie mam i nie wiem, czy to może być problemem. Do testowania, czy biblioteka działa, użyłem kodu z oficjalnej strony SFML.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597612/po-podlaczeniu-biblioteki-sfml-do-mojego-kodu-pojawia-sie-blad-kompilacji</guid>
<pubDate>Sun, 05 Jan 2025 17:30:36 +0000</pubDate>
</item>
<item>
<title>Ładowanie obrazu w assemblerze</title>
<link>https://forum.pasja-informatyki.pl/597609/ladowanie-obrazu-w-assemblerze</link>
<description>

&lt;p&gt;Witam, mam problem związany z assemblerem. Na studiach uczę się assemblera, ale stanąłem pod ściana. dostałem zadanie, które polega na wczytaniu obrazu przy pomocy&amp;nbsp;assemblera i c++. Chciałem wczytać obraz za pomocą c++, następnie przekazać parametry obrazu do assemblera i następnie znowu pokazać wczytany obraz bo przejściu przez assemblera. Mam problem z kodem, nie potrafię wczytać odpowiednio pikseli, jest to może problem z przekazywaniem obrazu bądź też z samym kodem assemblera. Obraz który zwraca mi program&amp;nbsp;odpaleniu go jest &quot;pusty&quot;.
&lt;br&gt;
Mam trzy pliki:
&lt;br&gt;
c++
&lt;br&gt;
masm
&lt;br&gt;
dll (tylko do przekazania metod)
&lt;br&gt;
Za każdą pomoc dziękuje :)
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;opencv2/opencv.hpp&amp;gt;
#include &amp;lt;iostream&amp;gt;

extern &quot;C&quot; int _fastcall processImage(const unsigned char* inputBuffer, int width, int height, int channels, unsigned char* outputBuffer, int stride);

int main() {
&amp;nbsp; &amp;nbsp; const char* imagePath = &quot;C:/obraz.jpg&quot;;
&amp;nbsp; &amp;nbsp; cv::Mat image = cv::imread(imagePath, cv::IMREAD_COLOR);

&amp;nbsp; &amp;nbsp; if (image.empty()) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; std::cerr &amp;lt;&amp;lt; &quot;Error: Could not load the image!&quot; &amp;lt;&amp;lt; std::endl;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; cv::Mat outputImage(image.size(), image.type());

&amp;nbsp; &amp;nbsp; if (!outputImage.data) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; std::cerr &amp;lt;&amp;lt; &quot;Error: Could not allocate memory for output buffer!&quot; &amp;lt;&amp;lt; std::endl;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; int stride = image.cols * image.channels();

&amp;nbsp; &amp;nbsp; int result = processImage(
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; image.data, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Input buffer
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; image.cols, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Image width
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; image.rows, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Image height
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; image.channels(), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Number of channels (e.g., 3 for RGB)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outputImage.data, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Output buffer
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stride &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Stride (width * channels)
&amp;nbsp; &amp;nbsp; );

&amp;nbsp; &amp;nbsp; if (result != 0) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; std::cerr &amp;lt;&amp;lt; &quot;Error: Assembly function failed!&quot; &amp;lt;&amp;lt; std::endl;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; cv::imshow(&quot;Output Image&quot;, outputImage);
&amp;nbsp; &amp;nbsp; cv::waitKey(0);

&amp;nbsp; &amp;nbsp; return 0;
}
&lt;/pre&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
;.586
;.MODEL FLAT, C

.DATA

.CODE

; Set up to load image data and apply a filter (convolution)
; rcx - input image pointer (pixels)
; rdx - output image pointer (pixels)
; r8 - filter pointer (kernel)
; r9 - current byte index (pixel index)
; rsp+40 - stride (width of the image in bytes)

; Purpose of registers:
; r10 - used for iterating through the kernel convolution
; r11 - number of bytes left to process

processImage proc export
&amp;nbsp; &amp;nbsp; ; Load the amount of bytes to process
&amp;nbsp; &amp;nbsp; MOV R11, [RSP+40] &amp;nbsp; ; Amount of bytes left to process
&amp;nbsp; &amp;nbsp; SUB R11, 8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Adjust the byte count (account for stride)

NextPixel:
&amp;nbsp; &amp;nbsp; MOV R10, R9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Set R10 to the current pixel index (center)
&amp;nbsp; &amp;nbsp; SUB R10, [RSP+40] &amp;nbsp; &amp;nbsp;; Adjust to the top middle pixel
&amp;nbsp; &amp;nbsp; SUB R10, 4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Adjust to top-left pixel

&amp;nbsp; &amp;nbsp; ; Load 3x3 matrix of color-coded pixels into xmm registers
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm0, [RCX+R10] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Top-left
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm1, [RCX+R10+4] &amp;nbsp; &amp;nbsp; &amp;nbsp;; Top-middle
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm2, [RCX+R10+8] &amp;nbsp; &amp;nbsp; &amp;nbsp;; Top-right
&amp;nbsp; &amp;nbsp; ADD R10, [RSP+40] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Move to the next line (stride)
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm3, [RCX+R10] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Middle-left
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm4, [RCX+R10+4] &amp;nbsp; &amp;nbsp; &amp;nbsp;; Middle
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm5, [RCX+R10+8] &amp;nbsp; &amp;nbsp; &amp;nbsp;; Middle-right
&amp;nbsp; &amp;nbsp; ADD R10, [RSP+40] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Move to the next line (stride)
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm6, [RCX+R10] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Bottom-left
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm7, [RCX+R10+4] &amp;nbsp; &amp;nbsp; &amp;nbsp;; Bottom-middle
&amp;nbsp; &amp;nbsp; PMOVZXBD xmm8, [RCX+R10+8] &amp;nbsp; &amp;nbsp; &amp;nbsp;; Bottom-right

&amp;nbsp; &amp;nbsp; ; Apply the filter (multiply each pixel by the filter value)
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Load filter value
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Broadcast filter value to all positions
&amp;nbsp; &amp;nbsp; PMULLD xmm0, xmm9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Multiply top-left pixel by filter
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+4] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Load next filter value
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Broadcast filter value
&amp;nbsp; &amp;nbsp; PMULLD xmm1, xmm9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Multiply top-middle pixel by filter
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+8] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Load next filter value
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Broadcast filter value
&amp;nbsp; &amp;nbsp; PMULLD xmm2, xmm9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Multiply top-right pixel by filter

&amp;nbsp; &amp;nbsp; ; Repeat for other pixels in the filter (left to right, top to bottom)
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+12]
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9
&amp;nbsp; &amp;nbsp; PMULLD xmm3, xmm9
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+16]
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9
&amp;nbsp; &amp;nbsp; PMULLD xmm4, xmm9
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+20]
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9
&amp;nbsp; &amp;nbsp; PMULLD xmm5, xmm9
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+24]
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9
&amp;nbsp; &amp;nbsp; PMULLD xmm6, xmm9
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+28]
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9
&amp;nbsp; &amp;nbsp; PMULLD xmm7, xmm9
&amp;nbsp; &amp;nbsp; PMOVSXBD xmm9, [R8+32]
&amp;nbsp; &amp;nbsp; VPBROADCASTD xmm9, xmm9
&amp;nbsp; &amp;nbsp; PMULLD xmm8, xmm9

&amp;nbsp; &amp;nbsp; ; Sum the components of the pixels (add the results of the multiplications)
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm1
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm2
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm3
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm4
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm5
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm6
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm7
&amp;nbsp; &amp;nbsp; PADDD xmm0, xmm8

&amp;nbsp; &amp;nbsp; ; Check if the pixel value is between 0 and 255 (clamp to this range)
Blue:
&amp;nbsp; &amp;nbsp; MOVD EAX, xmm0
&amp;nbsp; &amp;nbsp; CMP EAX, 255
&amp;nbsp; &amp;nbsp; JG BlueGreater
&amp;nbsp; &amp;nbsp; CMP EAX, 0
&amp;nbsp; &amp;nbsp; JL BlueLesser

Green:
&amp;nbsp; &amp;nbsp; MOV [RDX+R9], AL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Store the result (Blue component)
&amp;nbsp; &amp;nbsp; PSRLDQ xmm0, 4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Shift the next component (Green)
&amp;nbsp; &amp;nbsp; MOVD EAX, xmm0
&amp;nbsp; &amp;nbsp; CMP EAX, 255
&amp;nbsp; &amp;nbsp; JG GreenGreater
&amp;nbsp; &amp;nbsp; CMP EAX, 0
&amp;nbsp; &amp;nbsp; JL GreenLesser

Red:
&amp;nbsp; &amp;nbsp; MOV [RDX+R9+1], AL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Store the result (Green component)
&amp;nbsp; &amp;nbsp; PSRLDQ xmm0, 4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Shift the next component (Red)
&amp;nbsp; &amp;nbsp; MOVD EAX, xmm0
&amp;nbsp; &amp;nbsp; CMP EAX, 255
&amp;nbsp; &amp;nbsp; JG RedGreater
&amp;nbsp; &amp;nbsp; CMP EAX, 0
&amp;nbsp; &amp;nbsp; JL RedLesser

Alpha:
&amp;nbsp; &amp;nbsp; MOV [RDX+R9+2], AL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Store the result (Red component)
&amp;nbsp; &amp;nbsp; MOV EAX, 255
&amp;nbsp; &amp;nbsp; MOV [RDX+R9+3], AL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Set the Alpha component to 255
&amp;nbsp; &amp;nbsp; ADD R9, 4
&amp;nbsp; &amp;nbsp; SUB R11, 4
&amp;nbsp; &amp;nbsp; CMP R11, 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; Check if there are more bytes to process
&amp;nbsp; &amp;nbsp; JNE NextPixel
&amp;nbsp; &amp;nbsp; ret

BlueGreater:
&amp;nbsp; &amp;nbsp; MOV AL, 255 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Set Blue to 255 if it's greater
&amp;nbsp; &amp;nbsp; JMP Green

BlueLesser:
&amp;nbsp; &amp;nbsp; MOV AL, 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Set Blue to 0 if it's less
&amp;nbsp; &amp;nbsp; JMP Green

GreenGreater:
&amp;nbsp; &amp;nbsp; MOV AL, 255 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Set Green to 255 if it's greater
&amp;nbsp; &amp;nbsp; JMP Red

GreenLesser:
&amp;nbsp; &amp;nbsp; MOV AL, 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Set Green to 0 if it's less
&amp;nbsp; &amp;nbsp; JMP Red

RedGreater:
&amp;nbsp; &amp;nbsp; MOV AL, 255 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Set Red to 255 if it's greater
&amp;nbsp; &amp;nbsp; JMP Alpha

RedLesser:
&amp;nbsp; &amp;nbsp; MOV AL, 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Set Red to 0 if it's less
&amp;nbsp; &amp;nbsp; JMP Alpha

processImage endp

END
&lt;/pre&gt;



&lt;p&gt;.&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
<category>Assembler</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597609/ladowanie-obrazu-w-assemblerze</guid>
<pubDate>Sun, 05 Jan 2025 13:32:32 +0000</pubDate>
</item>
<item>
<title>Problem z nauką C++ poprzez zadania</title>
<link>https://forum.pasja-informatyki.pl/597483/problem-z-nauka-c-poprzez-zadania</link>
<description>Cześć, uczę się od paru miesięcy C++ czysto hobbystycznie kiedy akurat jest czas. Napotykam problem z utrwalaniem wiedzy.&lt;br /&gt;
&lt;br /&gt;
Zauważyłem że robiąc różne zadania utrwalam w ten sposób jedynie te zagadnienia które już całkowicie zrozumiałem, natomiast nie jestem w stanie przez praktykę lepiej zrozumieć tych z którymi jest mi ciężej. Na przykład jeśli nie jestem w stanie napisać kodu mam często jedynie opcję zobaczenia całej odpowiedzi do zadania czyli kompletnego kodu co potrafi być zniechęcające i dużo lepiej nie rozumiem tego co się zadziało.&lt;br /&gt;
&lt;br /&gt;
Przez to czuję jakbym robił minimalne postępy w nauce. Tym bardziej boję się, że tak samo utknę jeśli będę chciał pobawić się z nauką innego języka programowania.&lt;br /&gt;
&lt;br /&gt;
Spotkaliście się z tym osobiście? Znacie może bazy zadań jakie byłyby tutaj pomocne? Albo i same materiały pomocnicze jak filmiki czy strony o C++ do przejrzenia, które pomogą mi jeszcze lepiej zrozumieć język na tyle żebym mógł radzić sobie z zadaniami.</description>
<category>Rozwój zawodowy, nauka, praca</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597483/problem-z-nauka-c-poprzez-zadania</guid>
<pubDate>Tue, 24 Dec 2024 14:45:56 +0000</pubDate>
</item>
<item>
<title>tablice i ciąg</title>
<link>https://forum.pasja-informatyki.pl/597396/tablice-i-ciag</link>
<description>Potrzebuje pomocy utknęłam i licze na pomoc&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i , tab[11];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tab[1]=1;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (i=2; i&amp;lt;=11; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tab[i]=tab[i-1]*3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
program powinien na początku powinien wyświetlać liczbę 1</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597396/tablice-i-ciag</guid>
<pubDate>Mon, 16 Dec 2024 16:20:54 +0000</pubDate>
</item>
<item>
<title>Rodzaj palindroma w C++</title>
<link>https://forum.pasja-informatyki.pl/597314/rodzaj-palindroma-w-c</link>
<description>Co to jest fufsopalindromem. ?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597314/rodzaj-palindroma-w-c</guid>
<pubDate>Mon, 09 Dec 2024 19:41:04 +0000</pubDate>
</item>
<item>
<title>Obiekty w C+ — pytanie o koncept na podstawie problemów w C++</title>
<link>https://forum.pasja-informatyki.pl/597279/obiekty-w-c-pytanie-o-koncept-na-podstawie-problemow-w-c</link>
<description>

&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Zwykle programuję w C (a właściwie w jego rozszerzeniu C+), ale zastanawiam się nad obiektowością języka C++.&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Wygodnie było by mieć możliwość definiowania obiektów (w C++ nazywanych klasami lub strukturami) w blokach strukturalnych programu, tak by były zwalniane przez kompilator automatycznie po opuszczeniu bloku strukturalnego. Jednak ze względu na sposób, w jaki kompilator obsługuje w programie wynikowym te obiekty, skłaniam się do ich nieużywania. Mianowicie są dwa problemy:&lt;/p&gt;



&lt;ol style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;
	

&lt;li style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Obiekty są umieszczane na stosie, co zaburza optymalizację rozmiaru stosu, jego ograniczenia do zmiennych tymczasowych, adresów powrotu z procedur — i przewidywalności.&lt;/li&gt;
	

&lt;li style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Obiekty są zwalniane przy opuszczaniu bloku strukturalnego programu, co jest naturalne w programie jednozadaniowym (jednowątkowym), ale przeszkadza w programie, w którym następują nieliniowe przełączenia wykonywania. Wiem, że w C++ są operatory “new”/“delete”, ale nie dają mi one nic więcej ponad to, co już mam w C+.&lt;/li&gt;
&lt;/ol&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Wymieniłem powyżej dwa problemy (które teraz już zauważam)&amp;nbsp;z obiektami, ale nie te problemy są najważniejsze. One tylko wskazują, iż brakuje innej koncepcji użycia (implementacji przez kompilator) obiektów w języku programowania.&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Natomiast teraz zastanowię się nad sensownością użycia obiektów w dotychczasowy sposób.&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Można zakładać, że obiekt umieszczony na stosie w bloku strukturalnym programu (na przykład ograniczonym klamrami “{” i “}”) zawiera wewnątrz zmienne, które i tak byłyby użyte, gdyby implementować tę funkcjonalność bez użycia klasy C++. Jednak z moich obserwacji wynika, że klasy zawierają uniwersalne funkcjonalności, które są czasem nadmiarowe względem potrzeb bieżących, więc logiczne, że zawierają wiele zmiennych, które są niepotrzebne w danym kontekście użycia, niewykorzystane. W C+ (opartym bezpośrednio na C, ale bez użycia biblioteki standardowej) rozwiązuję ten problem przez definiowanie obiektu podstawowego i obiektu rozszerzającego, który nie musi być tworzony. Na przykład mam w postaci procedur języka C — definiujących&amp;nbsp;konstruktora, destruktora i metody — obiekt tablicy dynamicznej (zdaje się podobnie jak w C++ “vector”) oraz obiekt rozszerzający: ‘iterator’ elementów tablicy dynamicznej zachowujący poprawny i postępujący stan niezależnie od zmieniana zawartości tablicy. Drugi obiekt korzystając ze zmiennych pierwszego obiektu tworzy własne zmienne tylko wtedy, gdy sam zostanie utworzony, i usuwa je po jego wyrzuceniu (z pamięci), tutaj procedurą destruktora, lub zakończeniu ‘iteracji’.&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Powyższy problem mógłby być rozwiązany w C++ przez przydzielanie wewnątrz klasy danych na stercie w przypadku użycia nadmiarowej funkcjonalności. Ale czy tak jest powszechnie robione? Oraz czy to nie wymaga ręcznego zarządzania tworzeniem/wyrzucaniem obiektów wewnątrz takiej klasy, ponieważ nie ma odpowiednich konstrukcji języka programowania?&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Ponadto w C+ program wykonuje się w tzw. ‹zadaniach›, które są w powszechnym rozumieniu ograniczonymi wątkami (wirtualnymi lub rzeczywistymi). To powoduje konieczność definiowania zmiennych używanych przez więcej niż jedno ‹zadanie› — w przestrzeni globalnej (poza procedurami). Oczywiście pogrupowałem takie zmienne według zastosowania i umieszczam je w strukturach globalnych. W tym przypadku kompletnie nie mam koncepcji, jak w programie miało by być pomyślane użycie takich zmiennych,&amp;nbsp;w jego składni.&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Pytania są następujące. O czym w ogóle piszę: czy taki&amp;nbsp;koncept&amp;nbsp;jest już gdziekolwiek realizowany&amp;nbsp;w języku programowania (w naturalny sposób) i co to za koncept? Jak w hipotetycznej składni programu umieszczać obiekty, które są współdzielone pomiędzy ‹zadaniami›? Jak realizować rozszerzalność obiektów nie w postaci rozbudowy (w C++ dziedziczenie), ale w postaci rozszerzania w przypadku użycia — a to wszystko automatyzowane w składni języka?&amp;nbsp;No i oczywiście pytania z poprzednich akapitów.&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;⁂&lt;/p&gt;



&lt;p style=&quot;border-color: rgb(122, 122, 127) !important; outline-color: rgb(122, 122, 127) !important;&quot;&gt;Wiem mniej więcej, co miałem na myśli w tym pytaniu. Zamiast bloków strukturalnych języka programowania potrzebne mi są bloki wykonawcze, w których dane byłyby przechowywane pomiędzy procedurami,&amp;nbsp;bez względu na hierarchię strukturalną programu,&amp;nbsp;i usuwane na końcu. Program wykonuje się&amp;nbsp;zmieniając stany obiektów. W pewnym stanie obiektów&amp;nbsp;jest początek bloku wykonawczego, a w innym stanie obiektów jest koniec tego bloku wykonawczego. Ponieważ program wykonuje się centrycznie wokół wejścia danych (np. “socket”)&amp;nbsp;lub wyjścia danych (np. rysowanie obiektów graficznych w oknie), a nie wokół obiektu tworzonego pobocznie, nie jest możliwe użycie bloku strukturalnego. Pewną próbą podejścia do tej sytuacji (powiązania bloku strukturalnego z wykonawczym) jest znany z języka Python blok strukturalny “&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.python.org/3.13/reference/compound_stmts.html#the-with-statement&quot; target=&quot;_blank&quot;&gt;with&lt;/a&gt;”, ale on umożliwia tylko proste użycia, które u mnie nie mają zastosowania. Globalne kolekcje obiektów, których używam (np. kolekcja otwartych plików) są tylko wąskim zastosowaniem bloku wykonawczego, tzn. tylko dla obiektu otwartego pliku. Pełne zastosowanie bloku wykonawczego wymagałoby tworzenia tymczasowych globalnych (by były dostępne pomiędzy procedurami)&amp;nbsp;obiektów, w których byłyby zmienne bloku wykonawczego.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597279/obiekty-w-c-pytanie-o-koncept-na-podstawie-problemow-w-c</guid>
<pubDate>Sun, 08 Dec 2024 06:57:57 +0000</pubDate>
</item>
<item>
<title>Wskaźniki problem z wyswietlaniem</title>
<link>https://forum.pasja-informatyki.pl/597220/wskazniki-problem-z-wyswietlaniem</link>
<description>

&lt;p&gt;Hej mam za zadanie napisać &quot;funkcję, która jako argumenty przyjmuje dwa wskaźniki i działa tak, że oblicza sumę wartości tych wskaźników. Wywołaj tę funkcję by wartości w co drugiej kolumnie zmienić na sumy dwóch sąsiednich w wierszu komórek.&quot;&lt;/p&gt;



&lt;p&gt;Zrobiłem funkcje ale wyświetlają się tylko te kolumny, które są sumą dwóch sąsiadujących, a chce żeby te sąsiadujące też się wyświetlały, co zrobić aby tak było?&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include&amp;lt;math.h&amp;gt;
#include&amp;lt;time.h&amp;gt;





void sumaws(int *x, int *y)
{
    int starex=*x;
    int starey=*y;
    *x=*y;
    *y=starex+starey;

}


int main()
{

    srand(time(0));

    int n;
    printf(&quot;Podaj n \n&quot;);
    scanf(&quot;%d&quot;, &amp;amp;n);
    
    printf(&quot;\n&quot;);

	int **p;
    p=(int**)malloc(n*sizeof(int*));

    for(int i=0; i&amp;lt;n; i=i+1)
    {
       *(p+i)=(int*)malloc(n*sizeof(int));
    }



	for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {
       *(*(p+i)+j)=-9+rand()%(10-(-9));
        printf(&quot;%2.d &quot;, *(*(p+i)+j) );
    }
        printf(&quot;\n&quot;);
    }

      printf(&quot;\n\n&quot;);


    for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=1; j&amp;lt;n; j=j+2)
    {

        sumaws(   (*(p+i)+j-1) ,  (*(p+i)+j+1)   );

        printf(&quot;%2.d &quot;, *(*(p+i)+j+1));
    }
        printf(&quot;\n&quot;);
    }






   for(int i=0; i&amp;lt;n; i=i+1)
    {
        free(*(p+i));
    }

    free(p);






    return 0;
}



&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597220/wskazniki-problem-z-wyswietlaniem</guid>
<pubDate>Wed, 04 Dec 2024 14:44:38 +0000</pubDate>
</item>
<item>
<title>Program tworzący pliki na dysku google</title>
<link>https://forum.pasja-informatyki.pl/597160/program-tworzacy-pliki-na-dysku-google</link>
<description>Potrzebuje zrobić program który będzie pobierał sobie dane z mojego dysku google przeliczał a następnie je tam zapisywał pobieranie udało mi się zrobić z pomocą pliku batch ale nie mam pomysłu jak zrobić zapisywanie chciałbym zrobić to tak żeby działało na każdym komputerze czyli najlepiej żeby samo logowało się do dysku i zarządzało danymi</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597160/program-tworzacy-pliki-na-dysku-google</guid>
<pubDate>Mon, 02 Dec 2024 17:55:53 +0000</pubDate>
</item>
<item>
<title>Wskaźniki macierzy nie wyświetla liczby zero</title>
<link>https://forum.pasja-informatyki.pl/597150/wskazniki-macierzy-nie-wyswietla-liczby-zero</link>
<description>

&lt;p&gt;Hej, nie mam pojęcia czemu liczba zero nie jest wyświetlana w macierzy, ilość zer natomiast działa dobrze, i nie mam pomysłu jak to naprawić, z góry dzięki&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include&amp;lt;math.h&amp;gt;
#include&amp;lt;time.h&amp;gt;



int main()
{


    int n;
    printf(&quot;Podaj n\n&quot;);
    scanf(&quot;%d&quot;, &amp;amp;n);


	int **p, suma=0,sumaprawej=0, ilezer=0;
    p=(int**)malloc(n*sizeof(int*));

    for(int i=0; i&amp;lt;n; i=i+1)
    {
       *(p+i)=(int*)malloc(n*sizeof(int));
    }



	for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {
        *(*(p+i)+j)=-1+rand()%(2-(-1));
        printf(&quot;%3.d &quot;, *(*(p+i)+j) );
    }
        printf(&quot;\n&quot;);
    }



    for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {

        if((*(*(p+i)+j))==0)
        {
            ilezer=ilezer+1;
        }
    }
    }


    for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {

         if(i==j)
        {
            suma=suma+*(*(p+i)+j);
        }

    }
    }


    for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {

        if(i==(n-1-j) || i==j==n)
        {
            sumaprawej=sumaprawej+*(*(p+i)+j);
        }
    }
    }

    printf(&quot;Suma na przekatnej lewej: %d\n&quot;, suma);
    printf(&quot;Suma na przekatnej prawej: %d\n&quot;, sumaprawej);
    printf(&quot;Ilosc zer: %d\n&quot;, ilezer);








    for(int i=0; i&amp;lt;n; i=i+1)
    {
        free(*(p+i));
    }

    free(p);





    return 0;
}


&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597150/wskazniki-macierzy-nie-wyswietla-liczby-zero</guid>
<pubDate>Mon, 02 Dec 2024 17:26:31 +0000</pubDate>
</item>
<item>
<title>Zamiana wierszy miejscami w macierzy</title>
<link>https://forum.pasja-informatyki.pl/597148/zamiana-wierszy-miejscami-w-macierzy</link>
<description>

&lt;p&gt;Hej, chciałbym zamienić ostatni wiersz z przed ostatnim, ale nie mam pojęcia jak to zrobić, temp tutaj nie zadziała, ponieważ używam wskaźników, jak inaczej mógłbym to zrobić?&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include&amp;lt;math.h&amp;gt;
#include&amp;lt;time.h&amp;gt;



int main()
{



    int n;
    printf(&quot;Podaj n\n&quot;);
    scanf(&quot;%d&quot;, &amp;amp;n);


	int **p, suma=0,sumaprawej=0;
    p=(int**)malloc(n*sizeof(int*));

    for(int i=0; i&amp;lt;n; i=i+1)
    {
       *(p+i)=(int*)malloc(n*sizeof(int));
    }



	for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {
        *(*(p+i)+j)=(i+1)*(j+1);
        printf(&quot;%3.d &quot;, *(*(p+i)+j) );
    }
        printf(&quot;\n&quot;);
    }

    printf(&quot;\n&quot;);

    for(int i=0; i&amp;lt;n; i=i+1)
    {
        for(int j=0; j&amp;lt;n; j=j+1)
    {

    
        printf(&quot;%3.d &quot;, *(*(p+i)+j) );
    }
        printf(&quot;\n&quot;);
    }





   for(int i=0; i&amp;lt;n; i=i+1)
    {
        free(*(p+i));
    }

    free(p);






    return 0;
}


&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597148/zamiana-wierszy-miejscami-w-macierzy</guid>
<pubDate>Mon, 02 Dec 2024 17:19:50 +0000</pubDate>
</item>
<item>
<title>Sortowanie bąbelkowe wskaźniki</title>
<link>https://forum.pasja-informatyki.pl/597057/sortowanie-babelkowe-wskazniki</link>
<description>

&lt;p&gt;Chce aby wyświetlano 2 razy 20 losowych liczb, ale za drugim razem były posortowane nie malejąco, gdzie tu jest błąd? Z góry dzięki za pomoc&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include&amp;lt;math.h&amp;gt;
#include&amp;lt;time.h&amp;gt;

void sortowanie(int n, int *T)
{

&amp;nbsp; &amp;nbsp; int i,j,x;
&amp;nbsp; &amp;nbsp; for (i=1; i&amp;lt;n; i++)
&amp;nbsp; &amp;nbsp; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (j=n-1; j&amp;gt;=i; j--)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (T[j-1]&amp;gt;T[j])
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x=T[j];
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;T[j]=T[j-1];
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;T[j-1]=x;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&amp;nbsp; &amp;nbsp; }

}

int main()
{

&amp;nbsp; &amp;nbsp; srand(time(0));

&amp;nbsp;&amp;nbsp; &amp;nbsp;int *p;

&amp;nbsp;&amp;nbsp; &amp;nbsp;p = (int*)malloc(20*sizeof(int));

&amp;nbsp;&amp;nbsp; &amp;nbsp;int najwieksza=-100, najmniejsza=100;
&amp;nbsp;&amp;nbsp; &amp;nbsp;int druganajwieksza=-99, druganajmniejsza=99;

&amp;nbsp;&amp;nbsp; &amp;nbsp;for(int i=0; i&amp;lt;20; i=i+1)
&amp;nbsp; &amp;nbsp; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(p+i)=-99+rand()%(100-(-99));

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&quot;%d &quot;, &amp;nbsp;*(p+i));

&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; printf(&quot;\n&quot;);

&amp;nbsp; &amp;nbsp; for(int i=0; i&amp;lt;20; i=i+1)
&amp;nbsp; &amp;nbsp; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(p+i)=-99+rand()%(100-(-99));


&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int n=20;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sortowanie(n, (p+i));
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&quot;%d &quot;, &amp;nbsp;*(p+i));


&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; free(p);

&amp;nbsp; &amp;nbsp; return 0;
}


&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597057/sortowanie-babelkowe-wskazniki</guid>
<pubDate>Thu, 28 Nov 2024 18:06:36 +0000</pubDate>
</item>
<item>
<title>Kurs C++ 23 albo 20</title>
<link>https://forum.pasja-informatyki.pl/597032/kurs-c-23-albo-20</link>
<description>Hej, studiuję informatykę i znam podstawy c++, ale głównie starszych wersji, których uczą w liceum. Natomiast na studiach mam obecnie taki przedmiot jak właśnie programowanie w c++, które nie wygląda tak jak się tego spodziewałam. Na ćwiczeniach facet głównie pisze kody w c++ 23, 20 i w ogóle w tych nowszych. Składnia tego języka strasznie różni się od tego co już umiem dlatego poszukuję kursu c++ ale właśnie jakiegoś nowszego. Może znacie taki kurs i moglibyście mi go polecić bo niestety nie mogę znależć nic fajnego.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/597032/kurs-c-23-albo-20</guid>
<pubDate>Wed, 27 Nov 2024 23:26:27 +0000</pubDate>
</item>
<item>
<title>Pętle while,ify,wczytywanie liczb.</title>
<link>https://forum.pasja-informatyki.pl/596334/petle-while-ify-wczytywanie-liczb</link>
<description>

&lt;p&gt;Hej, potrzebuję pomocy w takim zadaniu:&lt;/p&gt;



&lt;p&gt;Napisać aplikację, która wczytuje liczby całkowite do momentu aż dwie pierwsze liczby nie pojawią się ponownie w tej samej kolejności. Obliczyć i wydrukować liczbę wczytanych liczb dwucyfrowych podzielnych przez x (x – wczytane przez użytkownika). Zadanie wykonać bez użycia tablic.&lt;/p&gt;



&lt;p&gt;Ogólnie to program prawie działa. Tylko kiedy wczytuje się liczby to działa to tylko jak wpisuje się je parami. Mam namyśli że kiedy wczytamy liczby 5,6 i 5,6 to przerwie program. Ale kiedy wczytamy 5,6,7 i 5,6 to pętla tego nie przerywa. Zobaczcie co mam już napisane. Proszę o pomoc.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

int main()
{
  int liczba1,liczba2,liczba3,ilosc=0,zmienna1,zmienna2,x;


    cout &amp;lt;&amp;lt;&quot;Podaj x: &quot;&amp;lt;&amp;lt;endl;
    cin &amp;gt;&amp;gt;x;
    cout &amp;lt;&amp;lt;&quot;Podaj swoje liczby&quot; &amp;lt;&amp;lt; endl;
    cin &amp;gt;&amp;gt; liczba1&amp;gt;&amp;gt;liczba2;



    if((liczba1&amp;gt;=10)&amp;amp;&amp;amp;(liczba1&amp;lt;=99)&amp;amp;&amp;amp;(liczba1%x==0)){
   ilosc++;
   }
    if((liczba2&amp;gt;=10)&amp;amp;&amp;amp;(liczba2&amp;lt;=99)&amp;amp;&amp;amp;(liczba2%x==0)){
   ilosc++;
   }
   if((liczba1&amp;gt;=-99)&amp;amp;&amp;amp;(liczba1&amp;lt;=-10)&amp;amp;&amp;amp;(liczba1%x==0)){
   ilosc++;
   }
    if((liczba2&amp;gt;=-99)&amp;amp;&amp;amp;(liczba2&amp;lt;=-10)&amp;amp;&amp;amp;(liczba2%x==0)){
   ilosc++;
   }

    while((liczba1!=zmienna1) || (liczba2!=zmienna2)){

        cin&amp;gt;&amp;gt;zmienna1&amp;gt;&amp;gt;zmienna2;
        

    if((liczba3&amp;gt;=10)&amp;amp;&amp;amp;(liczba3&amp;lt;=99)&amp;amp;&amp;amp;(liczba3%x==0)){
   ilosc++;
   }

    if((liczba3&amp;gt;=-99)&amp;amp;&amp;amp;(liczba3&amp;lt;=-10)&amp;amp;&amp;amp;(liczba3%x==0)){
   ilosc++;
   }


  }

cout &amp;lt;&amp;lt;&quot;Ilosc dwucyfrowych podzielnych: &quot;&amp;lt;&amp;lt;ilosc&amp;lt;&amp;lt;endl;


  return 0;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596334/petle-while-ify-wczytywanie-liczb</guid>
<pubDate>Fri, 25 Oct 2024 06:41:05 +0000</pubDate>
</item>
<item>
<title>szyfrowanie wyrazów</title>
<link>https://forum.pasja-informatyki.pl/596245/szyfrowanie-wyrazow</link>
<description>

&lt;p&gt;Potrzebuje pomocy&lt;/p&gt;



&lt;p&gt;treść:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Napis program szyfrujący Twoje nazwisko.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Działanie programu ma polegać na:&amp;nbsp;&lt;/p&gt;



&lt;ul&gt;
	

&lt;li&gt;wpisywaniu poszczególnych liter Twojego&amp;nbsp; nazwiska,&amp;nbsp;&lt;/li&gt;
	

&lt;li&gt;zaszyfrowaniu poszczególnej litery o ustalony wcześniej kod,&amp;nbsp;&lt;/li&gt;
	

&lt;li&gt;wyświetleniu zaszyfrowanych liter Twojego nazwiska.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Wykorzystaj zmienne typu char, string, int , polecenia cin, cout, endl, tablice zmiennych do przechowywania zaszyfrowanych znaków, pętlę for.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Narazie mam tyle:&lt;/p&gt;



&lt;p&gt;#include &amp;lt;iostream&amp;gt;&lt;/p&gt;



&lt;p&gt;using namespace std;&lt;/p&gt;



&lt;p&gt;int main()
&lt;br&gt;
{
&lt;br&gt;
&amp;nbsp; &amp;nbsp; char litera, litera2;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; int i;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; for (i=1; i&amp;lt;=8; i++)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; cin &amp;gt;&amp;gt; litera;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; litera2 = litera+7;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; litera2 &amp;lt;&amp;lt; endl;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Twoj znak to: &quot; &amp;lt;&amp;lt; litera &amp;lt;&amp;lt; &quot; Nowy znak to: &quot; &amp;lt;&amp;lt; litera2 &amp;lt;&amp;lt; endl;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; }&lt;/p&gt;



&lt;p&gt;&amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;
}
&lt;br&gt;
I musze upchac gdzies string ale nie wiem gdzie&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596245/szyfrowanie-wyrazow</guid>
<pubDate>Sat, 19 Oct 2024 12:19:03 +0000</pubDate>
</item>
<item>
<title>Pętla while i ify  C++</title>
<link>https://forum.pasja-informatyki.pl/596235/petla-while-i-ify-c</link>
<description>

&lt;p&gt;Hejka, potrzebuję pomocy przy zadaniu. Treść:
&lt;br&gt;

&lt;br&gt;
Napisać program, który wczytuje liczby całkowite aż do wczytania liczby podzielnej
&lt;br&gt;
przez M (M- stała) i zarazem większej od obu poprzedników. Wydrukować średnią
&lt;br&gt;
wszystkich wczytanych liczb dwucyfrowych.
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;
&lt;br&gt;

&lt;br&gt;
Zobaczcie co napisałem, ale jakoś tym liczbom dwucyfrowym źle średnią liczy. I nie wiem jak zaznaczyć, żeby liczba była większa od dwóch poprzedników. Pomóżcie pls.
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cmath&amp;gt;

using namespace std;

int main()
{

    int k;
    int suma=0;
    int ilosc=0;

    while(true){

    cout &amp;lt;&amp;lt; &quot;Podaj swoje liczby: &quot; &amp;lt;&amp;lt; endl;
    cin &amp;gt;&amp;gt; k;

    if(k%3==0)
        {
        break;
    }

  }


  if(k&amp;gt;=10){

        suma = suma + k ;
        ilosc ++;

        cout &amp;lt;&amp;lt; &quot;Srednia liczb dwucyfrowych: &quot;&amp;lt;&amp;lt; double(suma)/ilosc &amp;lt;&amp;lt;endl;

    }

return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596235/petla-while-i-ify-c</guid>
<pubDate>Thu, 17 Oct 2024 19:50:39 +0000</pubDate>
</item>
<item>
<title>szyfrowanie wyrazu o długości 8 znaków</title>
<link>https://forum.pasja-informatyki.pl/596222/szyfrowanie-wyrazu-o-dlugosci-8-znakow</link>
<description>Potrzebuje pomocy w napisaniu programu ktory szyfruje dany wyraz uzywajac tablic string cin cout char i petla for</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596222/szyfrowanie-wyrazu-o-dlugosci-8-znakow</guid>
<pubDate>Thu, 17 Oct 2024 14:33:44 +0000</pubDate>
</item>
<item>
<title>qt 6 konsola polskie znaki problem</title>
<link>https://forum.pasja-informatyki.pl/596161/qt-6-konsola-polskie-znaki-problem</link>
<description>

&lt;p&gt;Witam, zacząłem się właśnie bawić trochę qt i mam klasyczny w sumie problem z brakiem polskich znaków w konsoli. W microsoft visual studio udało mi się kiedyś znaleźć kilka rozwiązań tego problemu, ba nawet w imgui miałem polskie znaki, ale w qt nic nie działa. Dokładnie mam &lt;strong&gt;Qt Creator 14.0.2 i &lt;/strong&gt;Qt 6.7.3. Próbuje różnych opcji, czytam różne tematy, próbuje różnych metod i nic. testowałem już qtextstream, qdebug, cout, wcout i ciągle są jakieś krzaczki albo brakujące litery. Ogólnie wiem o co chodzi, w qt mam tekst utf8, w konsoli windows jest cp852 wiadomo. Jak debuguje program i np zajrzę do qstringa czy do zwykłego stringa to widzę elegancko polskie litery np klasyczne: Zażółć gęślą jaźń, jak zapisze takiego np qstringa do pliku to też wszystko jest elegancko po polsku. W aplikacji okienkowej qt też nie ma żadnych problemów. Problem jest tylko i wyłącznie z konsolą, jestem na windows 10 jak coś. Testowałem też już różne kody z forów dyskusyjnych, rozmawiałem z czatami ai i nic. Widziałem, że są też jakieś pozmieniane rzeczy np kiedyś było jakieś qtextcodec, a teraz tego nie ma, jest jakieś qstringconverter i z tego co czytałem ma mniejsze możliwości od qtextcodec? Nie wiem może powinienem zainstalować starszą wersję qt np 5, ale czy to coś da?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/596161/qt-6-konsola-polskie-znaki-problem</guid>
<pubDate>Fri, 11 Oct 2024 20:25:49 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów w klasie</title>
<link>https://forum.pasja-informatyki.pl/595989/przeciazanie-operatorow-w-klasie</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;zacząłem się bawić w klasy w C++. W ramach treningu napisałem swój wektor. Chciałem przeciążyć operator[] w taki sposób, żebym mógł pisać np.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
vec[i]=vec[i-1]+3&lt;/pre&gt;



&lt;p&gt;Dotychczas zwracałem wartość tablicy w indeksie i, ale w takim wypadku nie działa przypisanie do indeksu. Nie wiem jak zrobić by raz vec[i] dawało element jaki przechowuje wektor, a raz wskaźnik na element by można było przypisać wartość.&lt;/p&gt;



&lt;p&gt;W skrócie, mój kod wygląda tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template &amp;lt;typename Typ&amp;gt; class Wektor
{
    Typ *content;  //zawartosc
    int capacity;  //maksymalna pojemnosc
    int current;  //indeks ostatniej komorki+1

public:
    Wektor();
    ~Wektor();
    Typ get(int index);  //zwraca content[index]
    void push_back(int val);
    
    Wektor&amp;amp; operator=(Wektor&amp;amp; other);  //i to dziala jak powinno

    Typ operator[](int i)
    {
        if(i&amp;gt;=size())  //jesli jest ponad zakresem to blad
            exit(0);
        return get(i);  //zwroc wartosc
    }
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;Z góry dzięki za pomoc.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595989/przeciazanie-operatorow-w-klasie</guid>
<pubDate>Mon, 23 Sep 2024 10:48:46 +0000</pubDate>
</item>
<item>
<title>Problem z zadaniem Urząd statystyczny</title>
<link>https://forum.pasja-informatyki.pl/595770/problem-z-zadaniem-urzad-statystyczny</link>
<description>

&lt;p&gt;Cześć mam problem z zadaniem oto jego treść&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=25056006401946987&quot; style=&quot;height:787px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Oto moje rozwiązanie:&lt;/p&gt;



&lt;p&gt;dane.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#ifndef DANE_H_INCLUDED
#define DANE_H_INCLUDED
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;cmath&amp;gt;
using namespace std;
struct Firma
{
private:
    string REGON,msc,kodpocztowy,nazwa;
    double przychod,koszt;
public:
    Firma(string r=&quot; &quot;,string m=&quot; &quot;,string k=&quot; &quot;,string n=&quot; &quot;,double p=0.0)
    {
        REGON=r;
        msc=m;
        kodpocztowy=k;
        nazwa=n;
        przychod=p;
    }
    void wypiszOsobe()
    {
        cout&amp;lt;&amp;lt;REGON&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;msc&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;kodpocztowy&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nazwa&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;przychod&amp;lt;&amp;lt;endl;
    }
    string getREGON(){return REGON;}
    string getMiejscowosc(){return msc;}
    string getKodPocztowy(){return kodpocztowy;}
    string getNazwa(){return nazwa;}
    double getPrzychod(){return przychod;}
    double getKoszty(){return koszt;}
    void ustawPrzychod(double p) {
        przychod = p;
    }
    void ustawKoszt(double k) {
        koszt = k;
    }
    double obliczDochod() const
    {
        return round(przychod-koszt);
    }
    bool czyPoprawnyREGON() const{
        if(REGON.length()!=9)
            return false;

        int wagi[]={8,9,2,3,4,5,6,7};
        int suma=0;

        for(int i=0;i&amp;lt;8;++i)
        {
            if(!isgraph(REGON[i]))
                return false;
            suma+=(REGON[i]-'0')*wagi[i];
        }
        int reszta=suma%11;
        int cyfraKontrolna=(reszta==10) ? 0 :reszta;
        return (cyfraKontrolna == (REGON[8] - '0'));
    }
};
#endif // DANE_H_INCLUDED
&lt;/pre&gt;



&lt;p&gt;kontener.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#ifndef KONTENER_H_INCLUDED
#define KONTENER_H_INCLUDED
#include&quot;dane.h&quot;
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;iomanip&amp;gt;
#include&amp;lt;fstream&amp;gt;
using namespace std;
struct Lista
{
private:
    struct Node{
         Firma dane;
         Node*nast;
         Node(Firma d,Node*N=nullptr)
         {
             dane=d;
             nast=N;
         }
    };
    Node*pocz;
    int ileJest;
public:
    Lista()
    {
        pocz=nullptr;
        ileJest=0;
    }
    ~Lista()
    {
        Node*nowy=pocz;
        while(nowy!=nullptr)
        {
            Node*szuk;
            szuk=nowy-&amp;gt;nast;
            delete szuk;
            szuk=nowy;
        }
    }
    void wypisz()
    {
        int numerWpisu=1;
        Node*nowy=pocz;
        while(nowy!=nullptr)
        {
            cout&amp;lt;&amp;lt;numerWpisu&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;fixed&amp;lt;&amp;lt;setprecision(2)&amp;lt;&amp;lt;nowy-&amp;gt;dane.obliczDochod()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getNazwa()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getKodPocztowy()&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nowy-&amp;gt;dane.getMiejscowosc()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getREGON()&amp;lt;&amp;lt;endl;
            numerWpisu++;
            nowy=nowy-&amp;gt;nast;
        }
    }
    void wstaw(Firma f)
    {
        Node*nowy;
        nowy=new Node(f);
        if(pocz==nullptr)
        {
            pocz=nowy;
            return;
        }
        else
        {
            Node*szuk=pocz;
            while(szuk-&amp;gt;nast!=nullptr)
            {
                szuk=szuk-&amp;gt;nast;
            }
            szuk-&amp;gt;nast=nowy;
        }
        ileJest++;
    }
    void zapisz()
    {
        if (!pocz) return;
        for (Node *i = pocz; i != nullptr; i = i-&amp;gt;nast) {
            for (Node *j = i-&amp;gt;nast; j != nullptr; j = j-&amp;gt;nast) {
                if (i-&amp;gt;dane.obliczDochod() &amp;lt; j-&amp;gt;dane.obliczDochod()) {
                    swap(i-&amp;gt;dane, j-&amp;gt;dane);
                }
            }
        }
        ofstream wynikFile(&quot;wynik.txt&quot;);
        if(!wynikFile.is_open())
        {
            throw logic_error(&quot;Blad: Nie mozna otworzyc pliku&quot;);
        }
        Node*nowy=pocz;
        int numerWpisu=1;
        while(nowy!=nullptr)
        {
            string regon=nowy-&amp;gt;dane.getREGON();
            int pierwszeDwie = stoi(regon.substr(0,2));
            if(pierwszeDwie&amp;gt;=2 &amp;amp;&amp;amp; pierwszeDwie&amp;lt;=34 &amp;amp;&amp;amp; pierwszeDwie %2==0)
            {
                if(nowy-&amp;gt;dane.getPrzychod()&amp;gt;0)
                {
                    wynikFile&amp;lt;&amp;lt;numerWpisu&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;fixed&amp;lt;&amp;lt;setprecision(2)&amp;lt;&amp;lt;nowy-&amp;gt;dane.obliczDochod()&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;nowy-&amp;gt;dane.getNazwa()&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;nowy-&amp;gt;dane.getKodPocztowy()&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nowy-&amp;gt;dane.getMiejscowosc()&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;nowy-&amp;gt;dane.getREGON()&amp;lt;&amp;lt;endl;
                }
                else
                {

                    wynikFile&amp;lt;&amp;lt;numerWpisu&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;&quot;0 DO WERYFIKACJI&quot;&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;nowy-&amp;gt;dane.getNazwa()&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;nowy-&amp;gt;dane.getKodPocztowy()&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nowy-&amp;gt;dane.getMiejscowosc()&amp;lt;&amp;lt;endl;
                    wynikFile&amp;lt;&amp;lt;nowy-&amp;gt;dane.getREGON()&amp;lt;&amp;lt;endl;
                }
            }
            numerWpisu++;
            nowy=nowy-&amp;gt;nast;
        }
        wynikFile.close();
    }
};
#endif // KONTENER_H_INCLUDED
&lt;/pre&gt;



&lt;p&gt;main.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include&quot;dane.h&quot;
#include&quot;kontener.h&quot;
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;fstream&amp;gt;
using namespace std;

int main()
{
    string nazwa;
    cout&amp;lt;&amp;lt;&quot;Podaj nazwe pliku: &quot;&amp;lt;&amp;lt;endl;
    cin&amp;gt;&amp;gt;nazwa;
    Lista li;
    try{
        ifstream plik;
        plik.open(nazwa.c_str(),ios::in);
        if(!plik.good())
        {
            throw logic_error(&quot;Plik nie dziala&quot;);
        }
        string nazwaM,kodPocztowy,msc,REGON;
        double przychod,koszt;
        while(plik&amp;gt;&amp;gt;REGON&amp;gt;&amp;gt;msc&amp;gt;&amp;gt;kodPocztowy&amp;gt;&amp;gt;nazwaM)
        {
            getline(plik, nazwaM);
            Firma f(REGON,msc,kodPocztowy,nazwaM,przychod);
            if (!(plik &amp;gt;&amp;gt; przychod &amp;gt;&amp;gt; koszt)) {
                cerr &amp;lt;&amp;lt; &quot;Blad: Niezgodna liczba rekordow w plikach przychod.txt lub koszt.txt&quot; &amp;lt;&amp;lt; endl;
                break;
            }
            f.ustawPrzychod(przychod);
            f.ustawKoszt(koszt);
            if(f.czyPoprawnyREGON())
            {
                li.wstaw(f);
            }
            else
            {
                cerr&amp;lt;&amp;lt;&quot;NIEPOPRAWNY REGON&quot;&amp;lt;&amp;lt;REGON&amp;lt;&amp;lt;endl;
            }
        }
        li.wypisz();
        li.zapisz();
        plik.close();
    }catch(exception &amp;amp;e)
    {
        cout&amp;lt;&amp;lt;e.what()&amp;lt;&amp;lt;endl;
    }
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;oto plik testowy przychod.txt&lt;/p&gt;



&lt;p&gt;493028210
&lt;br&gt;
Krakow 30-001&amp;nbsp;
&lt;br&gt;
FirmaB
&lt;br&gt;
15000&lt;/p&gt;



&lt;p&gt;914112556
&lt;br&gt;
Gdansk 80-001&amp;nbsp;
&lt;br&gt;
FirmaC
&lt;br&gt;
20000&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=5932220169075036102&quot; style=&quot;height:333px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;problem polega na tym iż źle zczytuje kwote a na dodatek nie zapisuje danycb do pliku wynik.txt&amp;nbsp;nie mam pomysłu jak go rozwiązać gdize może być błąd według wasz z góry dziękuje za pomoc&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595770/problem-z-zadaniem-urzad-statystyczny</guid>
<pubDate>Tue, 03 Sep 2024 17:53:53 +0000</pubDate>
</item>
<item>
<title>Problem z odczytem pliku w C++</title>
<link>https://forum.pasja-informatyki.pl/595767/problem-z-odczytem-pliku-w-c</link>
<description>

&lt;p&gt;Witam, potrzebuje pomocy.
&lt;br&gt;
Robię tutorial jestem na odcinku 7 dokładniej&amp;nbsp;
&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/watch?v=h2Taf16gQDI&amp;amp;list=PLOYHgt8dIdoxx0Y5wzs7CFpmBzb40PaDo&amp;amp;index=9&quot;&gt;07. PLIKI TEKSTOWE. ZAPIS I ODCZYT Z PLIKU&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;string&amp;gt;

using namespace std;

string imie, nazwisko;
int nr_tel;

int main()
{
&amp;nbsp;&amp;nbsp; &amp;nbsp;fstream plik;
&amp;nbsp;&amp;nbsp; &amp;nbsp;plik.open(&quot;wizytkowka.txt&quot;, ios::in);

&amp;nbsp;&amp;nbsp; &amp;nbsp;if (plik.good()==false)
&amp;nbsp;&amp;nbsp; &amp;nbsp;{
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;cout &amp;lt;&amp;lt; &quot;Plik nie istnieje!&quot;;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit(0);
&amp;nbsp;&amp;nbsp; &amp;nbsp;}

&amp;nbsp;&amp;nbsp; &amp;nbsp;string linia;
&amp;nbsp;&amp;nbsp; &amp;nbsp;int nr_linii = 1;
&amp;nbsp;&amp;nbsp; &amp;nbsp;while(getline(plik, linia));
&amp;nbsp;&amp;nbsp; &amp;nbsp;{
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;switch (nr_linii)
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 1: imie = linia; break;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 2: nazwisko = linia; break;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 3: nr_tel = atoi(linia.c_str()); break;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nr_linii++;
&amp;nbsp;&amp;nbsp; &amp;nbsp;}

&amp;nbsp;&amp;nbsp; &amp;nbsp;cout &amp;lt;&amp;lt; &quot;imie: &quot; &amp;lt;&amp;lt; imie &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp; &amp;nbsp;cout &amp;lt;&amp;lt; &quot;nazwisko: &quot; &amp;lt;&amp;lt; nazwisko &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp; &amp;nbsp;cout &amp;lt;&amp;lt; &quot;nr_tel: &quot; &amp;lt;&amp;lt; nr_tel &amp;lt;&amp;lt; endl;

&amp;nbsp;&amp;nbsp; &amp;nbsp;plik.close();

&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;
}&lt;/pre&gt;



&lt;p&gt;Powyższy kod wypluwa w konsoli to:
&lt;br&gt;
&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=1255585999679338095&quot; style=&quot;height:308px; width:600px&quot;&gt;
&lt;br&gt;

&lt;br&gt;
Gdzie podziały się linie z imieniem i nazwiskiem?
&lt;br&gt;

&lt;br&gt;

&lt;br&gt;
// Visual Studio 2022&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595767/problem-z-odczytem-pliku-w-c</guid>
<pubDate>Tue, 03 Sep 2024 15:43:56 +0000</pubDate>
</item>
<item>
<title>kody ansi w c++ problem z usuwaniem odpowiedniej ilosci lini w terminalu</title>
<link>https://forum.pasja-informatyki.pl/595685/kody-ansi-w-c-problem-z-usuwaniem-odpowiedniej-ilosci-lini-w-terminalu</link>
<description>Cześć,&lt;br /&gt;
&lt;br /&gt;
Właśnie tworzę małą (a właściwie dużą...) grę konsolową, i żeby to ładnie wyglądało, postanowiłem używać clear. Ponieważ nie chcę się męczyć z licencjami, zdecydowałem się na użycie kodów ANSI do czyszczenia ekranu. Napotkałem jednak problem: nie wiem, jak zrobić, aby te kody ANSI usuwały automatycznie tylko te linie, które zostały wypisane przez program, a nie cały terminal.&lt;br /&gt;
&lt;br /&gt;
Obecnie mam jedno niewygodne rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
W każdej funkcji, pętli itp., liczę liczbę wypisanych linii, a następnie w razie potrzeby czyszczę odpowiednią ilość linii kodami ANSI.&lt;br /&gt;
&lt;br /&gt;
Zastanawiam się jednak, czy jest prostsze rozwiązanie, dlatego proszę o pomoc.&lt;br /&gt;
&lt;br /&gt;
Z góry dziękuję!</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595685/kody-ansi-w-c-problem-z-usuwaniem-odpowiedniej-ilosci-lini-w-terminalu</guid>
<pubDate>Wed, 28 Aug 2024 02:30:57 +0000</pubDate>
</item>
<item>
<title>Problem z wypisaniem poprawny danych i problem ze średnią</title>
<link>https://forum.pasja-informatyki.pl/595587/problem-z-wypisaniem-poprawny-danych-i-problem-ze-srednia</link>
<description>

&lt;p&gt;Cześć mam problem z zadaniem oto jego treść:&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=12265246407514357757&quot; style=&quot;height:635px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=13163838370739165953&quot; style=&quot;height:354px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;problem polega na tym że jak wstawie trzeciego studenta to nie wypisuje jego imienia tylko numer indeksu a na dodatek źle liczy średnią ze wszystkich ocen oto mój kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
dane.h
#ifndef DANE_H_INCLUDED
#define DANE_H_INCLUDED
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;sstream&amp;gt;
#include&amp;lt;vector&amp;gt;
using namespace std;
struct Student{
private:
    string imie,nazwisko,mail,status;
    int numerAlbumu,rok;
    double srd;
    vector&amp;lt;double&amp;gt; oceny;
public:
    Student(string im=&quot; &quot;,string naz=&quot; &quot;,string ma=&quot; &quot;,int numer=0,int r=0)
    {
        imie=im;
        nazwisko=naz;
        mail=ma;
        numerAlbumu=numer;
        rok=r;
    }
    void wypiszOsobe()
    {
        cout&amp;lt;&amp;lt;imie&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nazwisko&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;mail&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;numerAlbumu&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;rok&amp;lt;&amp;lt;endl;
    }
    string getImie(){return imie;}
    string getNazwisko(){return nazwisko;}
    string getAdresMail(){return mail;}
    string getStatus(){return status;}
    int getNumerAlbumu(){return numerAlbumu;}
    int getRok(){return rok;}
    vector&amp;lt;double&amp;gt; getOcena(){return oceny;}
    double getSrednia(){return srd;}
    void setSrednia(double s){srd=s;}
    void setStatus(string st){status=st;}
    void addOcena(double ocena) {
        oceny.push_back(ocena);
    }
    double calculateSrednia() {
        if (oceny.empty()) {
            srd = 0.0;
        } else {
            double suma = 0.0;
            for (double ocena : oceny) {
                suma += ocena;
            }
            srd = suma / static_cast&amp;lt;double&amp;gt;(oceny.size());
        }
        return srd;
    }
    void generateEmail()
    {
        ostringstream emailStream;
        emailStream&amp;lt;&amp;lt;&quot;STUD&quot;;

        int iloczyn = 1;
        int numer = numerAlbumu;
        while (numer &amp;gt; 0) {
            int cyfra = numer % 10;
            if (cyfra != 0) {
                iloczyn *= cyfra;
            }
            numer /= 10;
        }
        string digits = to_string(iloczyn);
        if(digits.size()&amp;gt;=3)
        {
           digits = digits.substr(digits.size()-3);
        }
        else
        {
            while(digits.size()&amp;lt;3)
            {
                digits=&quot;0&quot;+digits;
            }
        }
        emailStream&amp;lt;&amp;lt;digits&amp;lt;&amp;lt;imie[0]&amp;lt;&amp;lt;nazwisko[0]&amp;lt;&amp;lt;&quot;@wsit.pl&quot;;
        mail=emailStream.str();
    }
};
#endif // DANE_H_INCLUDED
&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
kontener.h
#ifndef KONTENER_H_INCLUDED
#define KONTENER_H_INCLUDED
#include&quot;dane.h&quot;
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;iomanip&amp;gt;
#include&amp;lt;fstream&amp;gt;
using namespace std;
struct Lista{
private:
    struct Node{
        Student dane;
        Node*nast;
        Node(Student d,Node*N=nullptr)
        {
            dane=d;
            nast=N;
        }
    };
    Node*pocz;
    int ileJest;
public:
    Lista()
    {
        pocz=nullptr;
        ileJest=0;
    }
    ~Lista()
    {
        Node*nowy=pocz;
        while(nowy!=nullptr)
        {
            Node*szuk;
            szuk=nowy-&amp;gt;nast;
            delete nowy;
            nowy=szuk;
        }
    }
    void wypisz()
    {
        int numerWpisu=1;
        Node*nowy=pocz;
        while(nowy!=nullptr)
        {
            cout&amp;lt;&amp;lt;numerWpisu&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getImie()&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nowy-&amp;gt;dane.getNazwisko()&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;nowy-&amp;gt;dane.getAdresMail()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getNumerAlbumu()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getRok()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;fixed&amp;lt;&amp;lt;setprecision(2)&amp;lt;&amp;lt;nowy-&amp;gt;dane.getSrednia()&amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;nowy-&amp;gt;dane.getStatus()&amp;lt;&amp;lt;endl;
            numerWpisu++;
            nowy=nowy-&amp;gt;nast;
        }
    }
    void wstaw(Student d)
    {
        d.generateEmail();
        Node*nowy;
        nowy = new Node(d);
        if(pocz==nullptr)
        {
            pocz=nowy;
            return;
        }
        else
        {
            Node*szuk=pocz;
            while(szuk-&amp;gt;nast!=nullptr)
            {
                szuk=szuk-&amp;gt;nast;
            }
            szuk-&amp;gt;nast=nowy;
        }
        ileJest++;
    }
    void calculateAverage()
    {
        Node* nowy = pocz;
        while (nowy != nullptr) {
            double srednia = nowy-&amp;gt;dane.calculateSrednia();
            if (srednia == 0) {
                nowy-&amp;gt;dane.setStatus(&quot;DO WERYFIKACJI&quot;);
            } else if (srednia &amp;gt;= 3.0) {
                nowy-&amp;gt;dane.setStatus(&quot;OK&quot;);
            } else {
                nowy-&amp;gt;dane.setStatus(&quot;DO WERYFIKACJI&quot;);
            }
            nowy = nowy-&amp;gt;nast;
        }
    }
    void zapisz()
    {
        ofstream rok1File(&quot;rok1.txt&quot;);
        ofstream rok2File(&quot;rok2.txt&quot;);
        ofstream rok3File(&quot;rok3.txt&quot;);
        if(!rok1File.is_open() || !rok2File.is_open() || !rok3File.is_open())
        {
            throw logic_error(&quot;Blad: Nie mozna otworzyc pliku&quot;);
        }
        Node*szuk=pocz;
        int numerWpisu=1;
        while(szuk!=nullptr)
        {
            ofstream* plik;
            if(szuk-&amp;gt;dane.getRok()==1)
            {
                plik=&amp;amp;rok1File;
            }
            else if(szuk-&amp;gt;dane.getRok()==2)
            {
                plik=&amp;amp;rok2File;
            }
            else if(szuk-&amp;gt;dane.getRok()==3)
            {
                plik=&amp;amp;rok3File;
            }
            if(plik)
            {
                *plik&amp;lt;&amp;lt;szuk-&amp;gt;dane.getNumerAlbumu()&amp;lt;&amp;lt;endl;
                *plik&amp;lt;&amp;lt;szuk-&amp;gt;dane.getNazwisko()&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;szuk-&amp;gt;dane.getImie()&amp;lt;&amp;lt;endl;

                if(szuk-&amp;gt;dane.getSrednia()&amp;gt;=3.0)
                {
                    *plik&amp;lt;&amp;lt;fixed&amp;lt;&amp;lt;setprecision(2)&amp;lt;&amp;lt;szuk-&amp;gt;dane.getSrednia()&amp;lt;&amp;lt;endl;
                }
                else
                {
                    *plik&amp;lt;&amp;lt;&quot;DO WERYFIKACJI!&quot;&amp;lt;&amp;lt;endl;
                }
                *plik&amp;lt;&amp;lt;szuk-&amp;gt;dane.getAdresMail()&amp;lt;&amp;lt;endl;
            }
            numerWpisu++;
            szuk=szuk-&amp;gt;nast;
        }
        rok1File.close();
        rok2File.close();
        rok3File.close();
    }
};
#endif // KONTENER_H_INCLUDED
&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
main.cpp
#include&quot;dane.h&quot;
#include&quot;kontener.h&quot;
#include &amp;lt;iostream&amp;gt;
#include&amp;lt;fstream&amp;gt;
using namespace std;

int main()
{
    string nazwa;
    cout&amp;lt;&amp;lt;&quot;Podaj nazwe pliku: &quot;&amp;lt;&amp;lt;endl;
    cin&amp;gt;&amp;gt;nazwa;
    Lista li;
    try{
        ifstream plik;
        plik.open(nazwa.c_str(),ios::in);
        if(!plik.good())
        {
            throw logic_error(&quot;Plik nie dziala&quot;);
        }
        while(plik)
        {
            int numerAlbumu,rok;
            string imie,nazwisko,adresMail;
            int liczbaOcen;

            plik&amp;gt;&amp;gt;numerAlbumu&amp;gt;&amp;gt;nazwisko&amp;gt;&amp;gt;imie&amp;gt;&amp;gt;rok&amp;gt;&amp;gt;adresMail&amp;gt;&amp;gt;liczbaOcen;
            Student student(imie,nazwisko,adresMail,numerAlbumu,rok);
            for(int i=0;i&amp;lt;liczbaOcen;++i)
            {
                double ocena;
                plik&amp;gt;&amp;gt;ocena;
                student.addOcena(ocena);
            }
            li.wstaw(student);
        }
        li.calculateAverage();
        li.wypisz();
        li.zapisz();
        plik.close();
    }
    catch(exception &amp;amp;e)
    {
        cout&amp;lt;&amp;lt;e.what()&amp;lt;&amp;lt;endl;
    }
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;oto dane testowe które wstawiałem&lt;/p&gt;



&lt;p&gt;999919 Kowalski Jan 1 5
&lt;br&gt;
4 3 4 5 3&lt;/p&gt;



&lt;p&gt;899919 Nowak Anna 2 4
&lt;br&gt;
2 2 3 2&lt;/p&gt;



&lt;p&gt;100004 Lewandowski Robert 1 3
&lt;br&gt;
5 4 4&lt;/p&gt;



&lt;p&gt;100005 Zielińska Maria 2 2
&lt;br&gt;
2 3&lt;/p&gt;



&lt;p&gt;100006 Krawczyk Andrzej 3 4
&lt;br&gt;
4 4 4 4
&lt;br&gt;
Wynik mojego programu:&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=7778902424806246809&quot; style=&quot;height:470px; width:467px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Pytanie gdzie może leżeć błąd jeśli chodzi o wypisywanie trzeciego studenta i gdzie leży problem z obliczaniem średniej z ocen&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595587/problem-z-wypisaniem-poprawny-danych-i-problem-ze-srednia</guid>
<pubDate>Sun, 18 Aug 2024 11:14:08 +0000</pubDate>
</item>
<item>
<title>Zadanie puzzle z mistrza programowania 2023</title>
<link>https://forum.pasja-informatyki.pl/595342/zadanie-puzzle-z-mistrza-programowania-2023</link>
<description>

&lt;p&gt;Hej, napisałam kod, który działa mi w kompilatorze, ale jak wrzucam na szkopuła to wyświetla signal 11. Na razie tablica jest ustawiona na 1e6, bo na 1e7 jest przekroczenie czasu, więc jeżeli ktoś wie jak można skrócić czas działania programu, to będę wdzięczna za pomoc. Poniżej wrzucam też link do treści zadania ze szkopuła.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://szkopul.edu.pl/problemset/problem/rZa6uMvtCyNIUH1_U0GNM8SU/site/?key=statement&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://szkopul.edu.pl/problemset/problem/rZa6uMvtCyNIUH1_U0GNM8SU/site/?key=statement&lt;/a&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int MAX=1e6;
int dzielniki[MAX+2];

void Sito(){
    int zakres=sqrt(MAX);
    for (int i=1; i&amp;lt;=zakres;i++){
        for(int j=i*i; j&amp;lt;=MAX; j++){
            dzielniki[j]=i;
        }
    }
    
}

int main(){
    ios_base::sync_with_stdio(0);   cin.tie(0); cout.tie(0);
    Sito();
	int t, n, ans;
    cin &amp;gt;&amp;gt; t;
    while(t--){
        cin &amp;gt;&amp;gt; n;
        ans=(dzielniki[n]+2)*2+(n/dzielniki[n]+2)*2-4;
        cout &amp;lt;&amp;lt; ans &amp;lt;&amp;lt; endl;
    }

    return 0;
}&lt;/pre&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=333901255010314764&quot; style=&quot;height:283px; width:600px&quot;&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595342/zadanie-puzzle-z-mistrza-programowania-2023</guid>
<pubDate>Thu, 25 Jul 2024 10:57:14 +0000</pubDate>
</item>
<item>
<title>Problem z uruchamianiem pliku binarnego</title>
<link>https://forum.pasja-informatyki.pl/595179/problem-z-uruchamianiem-pliku-binarnego</link>
<description>Witam, napisałem niedawno konsolowy program w C++ i chciałem sprawdzić jego działanie na innej maszynie. Ku mojemu zdziwieniu terminal &amp;quot;wypluł&amp;quot; błędy o braku zainstalowanych bibliotek w systemie. Zdziwiłem się dlatego, że uruchamiałem przecież skompilowany wcześniej plik binarny, a więc same zera i jedynki. Rozumiem, gdyby na etapie kompilacji, g++ &amp;quot;wypluwał&amp;quot; errory o braku bibliotek, bo wtedy miałoby to sens, np. używanie funkcji i metod niezawatych w standardzie C++, ale na etapie uruchamiania pliku binarnego nie powinno być takiego błędu, prawda? No właśnie takie jest moje pytanie. Czy rzeczywiście plik binarny może potrzebować dodatkowych bibliotek?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595179/problem-z-uruchamianiem-pliku-binarnego</guid>
<pubDate>Wed, 10 Jul 2024 18:44:03 +0000</pubDate>
</item>
</channel>
</rss>