C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Дали може некој да објасни зошто се користат Конструкторите?
Дали се тие замена за Гет и Сет методите?
Прво да разјасниме што би можело да претставува еден објект. Еден објект ти е пример контакт во именикот во телефонот, за него имаш податоци име, презиме, бројот понекогаш адреса зависно значи кога ќе внесиш ти име и број што нормално тоа го бараш во main-от да внеси корисникот име и број ти од класата повикуваш нешто што се вика конструктор самото име кажува креирај ми објект со овие и овие податоци, фактички od main праќаш податоци на конструкторот за да креира објект.

Гет и Сет методите мислам дека самото име ти кажува многу за нив.

Се надевам дека ти помогнав ако треба уште нешто кажи, поздрав.
 
Zdravo. Instalirav Eclipse i MinGW. E sega, koga ke napisam nekoj kod, idam se postapno, prvo SAVE, pa BUILD, pa RUN. Otkako idam RUN, ne mi pisuva nikakov tekst vo CONSOLE, tuku stoi prazno. Probav da napisam programa koja pokazuva koj broj e vnesen od tastatura, ne ja cita prvata funkcija printf za da mi kaze sto da pravam. Duri koga ke go stavam kursorot vo CONSOLE(ili kako i da se vika) i ke pritisnam nekoj broj, ke idam ENTER, duri togas mi gi cita dvete funkcii printf odednas, a prethodno ne ja cita prvata funkcija printf. Dali nekoj znae sto e problemot?
P.S. Kodot e sledniov:

#include <stdio.h>
int main()
{
int broj;
printf("Vnesi nekoj broj:\n");
scanf("%d", &broj);
printf("Brojot koj go vnesovte e: %d", broj);
return 0;
}
 
Последно уредено:
Zdravo. Instalirav Eclipse i MinGW. E sega, koga ke napisam nekoj kod, idam se postapno, prvo SAVE, pa BUILD, pa RUN. Otkako idam RUN, ne mi pisuva nikakov tekst vo CONSOLE, tuku stoi prazno. Probav da napisam programa koja pokazuva koj broj e vnesen od tastatura, ne ja cita prvata funkcija printf za da mi kaze sto da pravam. Duri koga ke go stavam kursorot vo CONSOLE(ili kako i da se vika) i ke pritisnam nekoj broj, ke idam ENTER, duri togas mi gi cita dvete funkcii printf odednas, a prethodno ne ja cita prvata funkcija printf. Dali nekoj znae sto e problemot?
P.S. Kodot e sledniov:

#include <stdio.h>
int main()
{
int broj;
printf("Vnesi nekoj broj:\n");
scanf("%d", &broj);
printf("Brojot koj go vnesovte e: %d", broj);
return 0;
}
Инсталирај си CodeBlocks за C е измислен, нема да имаш никаков проблем искрено малце Eclipse ти е замарање за C, да ти е за јава ајде онака океј подобро е ама чисто пријателски и сигурно си почетник така да CodeBlocks и раат.
 
Дечки може ли некој да ми помогне околу задачава?

*Кодирање и декодирање на текст и користење на
различен клуч како променлива зададена од корисникот 39.

-Да се состави програма за кодирање и декодирање на текст составен само од
големи букви и празни места.
Да се користи мени со две функции по избор, за кодирање и декодирање.
При тестирање на задачата да се искористи тестна реченица,
која прво ќе се шифрира па ќе се дешифрира.
Текстот да се кодира на тој начин што секоја буква ќе се
замени со карактер чиј ASCII код е зголемен за вредноста од
најмалата цифра од произволен внесен троцифрен број,
(на пример при внесен број 231 сите букви следствено ќе се преместат за
една позиција понапред во однос на оригиналните.
Цифрата треба за секој број да се пронајде).
При секое внесување тестната реченица и троцифрениот број да се
различни и да се внесуваат како променливи.
При дешифрирање разбирливо, се користи истиот троцифрен број како клуч.
 
Ми треба помош за задачава:

Имам почнато, но не ми е јасно како да продолжам.
Пример влез 19 17 13 50

Почетна состојба = (0,0,0,50)

Се додека некоја состојба не е проверена:
Провери дали последниот параметар од состојбата е делив со 19, 17 или 13 и ако е точно формулирај и испечати решение и заврши.​
Ако не е точно, провери ги уникатните и валидни состојби (0+1, 0, 50-19), (0, 0+1, 0, 50-17) и (0, 0, 0+1, 50-13). Состојбата е уникатна ако последниот параметар не е дел од некоја досега пронајдена состојба, а е валидна ако не е број помал од нула.​

Испечати ја состојбата чиј последен параметар е најмал.
 
Ми треба помош за задачава:

Имам почнато, но не ми е јасно како да продолжам.

Најди ги сите уникатни комбинации на бонбони од инпутот на цените и стави ги во низи поединечно, еве ти го алгоритмот во js ќе треба да го напишеш во C++


Најди ја разликата помеѓу збирот од цените на бонбоните на секоја од низите и парите што ти ги дала мајка ти и пак стави ги во низа. Сортирај ја низата и најди го најмалиот позитивен број.
 
Ми треба помош за задачава:

Имам почнато, но не ми е јасно како да продолжам.
Јас лично пробав да ја решам со три nested for циклуси, и од 20 решенија, точно е за 14, за другите е пребавен алгоритмот бидејќи има time complexity од O(n^3). За друго решение немам идеја.
 
Пример влез 19 17 13 50

Почетна состојба = (0,0,0,50)

Се додека некоја состојба не е проверена:
Провери дали последниот параметар од состојбата е делив со 19, 17 или 13 и ако е точно формулирај и испечати решение и заврши.​
Ако не е точно, провери ги уникатните и валидни состојби (0+1, 0, 50-19), (0, 0+1, 0, 50-17) и (0, 0, 0+1, 50-13). Состојбата е уникатна ако последниот параметар не е дел од некоја досега пронајдена состојба, а е валидна ако не е број помал од нула.​

Испечати ја состојбата чиј последен параметар е најмал.
C++:
#include <iostream>
#include <vector>
#include <set>

using namespace std;

struct State{
    int amountOfDenars;
    int firstTypeBought = 0;
    int secondTypeBought = 0;
    int thirdTypeBought = 0;

    bool isBetterThan(State anotherSolution)
    {
        if(this->amountOfDenars<anotherSolution.amountOfDenars)
            return true;
    return false;
    }
};

set <int> alreadyFoundAmountsOfDenars;

bool isSolutionNewAndValid(int stateAmountOfDenars)
{
    if(alreadyFoundAmountsOfDenars.count(stateAmountOfDenars) == 1 || stateAmountOfDenars < 0)
        return false;

    alreadyFoundAmountsOfDenars.insert(stateAmountOfDenars);
    return true;
}

int firstTypeCost,secondTypeCost,thirdTypeCost,initialAmountOfDenars;
int typeCosts[3];

bool isAmountDivisibleByCost(State currentState)
{
    if(currentState.amountOfDenars % firstTypeCost == 0)
    {
        cout << 0 <<endl;
        cout << currentState.firstTypeBought + currentState.amountOfDenars / firstTypeCost << " " << currentState.secondTypeBought << " " << currentState.thirdTypeBought;
        return true;
    }
    if(currentState.amountOfDenars % secondTypeCost == 0)
    {
        cout << 0 <<endl;
        cout <<currentState.firstTypeBought<< " " <<currentState.secondTypeBought + currentState.amountOfDenars / secondTypeCost  << " " << currentState.thirdTypeBought;
        return true;
    }
    if(currentState.amountOfDenars % thirdTypeCost == 0)
    {
        cout << 0 <<endl;
        cout << currentState.firstTypeBought<< " " << currentState.secondTypeBought << " " << currentState.thirdTypeBought + currentState.amountOfDenars / thirdTypeCost << " ";
        return true;
    }
    return false;
}

int numberOfNewSolutions = 0;
bool terminateSearching = false;
vector<State> possibleSolutions;

void findNewSolution(State solution,int candyCost,int candyType)
{
    if(isSolutionNewAndValid(solution.amountOfDenars - candyCost))
    {
        State possibleSolution;
        possibleSolution.amountOfDenars = solution.amountOfDenars - candyCost;

        switch(candyType){
            case 1:
                possibleSolution.firstTypeBought = solution.firstTypeBought + 1;
                possibleSolution.secondTypeBought = solution.secondTypeBought;
                possibleSolution.thirdTypeBought = solution.thirdTypeBought;
                break;
            case 2:
                possibleSolution.firstTypeBought = solution.firstTypeBought;
                possibleSolution.secondTypeBought = solution.secondTypeBought + 1;
                possibleSolution.thirdTypeBought = solution.thirdTypeBought;
                break;
            case 3:
                possibleSolution.firstTypeBought = solution.firstTypeBought;
                possibleSolution.secondTypeBought = solution.secondTypeBought;
                possibleSolution.thirdTypeBought = solution.thirdTypeBought+1;
                break;
        }

        if(isAmountDivisibleByCost(possibleSolution)){
            terminateSearching = true;
            return; //Finish since we have 0 leftover, this is the most optimal solution.
        }

        possibleSolutions.push_back(possibleSolution);
        numberOfNewSolutions++;
    }
}

int main(){

    cin >> firstTypeCost >> secondTypeCost >> thirdTypeCost >> initialAmountOfDenars;

    typeCosts[0] = firstTypeCost;
    typeCosts[1] = secondTypeCost;
    typeCosts[2] = thirdTypeCost;

    State initialSolution;
    initialSolution.amountOfDenars = initialAmountOfDenars;
    initialSolution.firstTypeBought = 0;
    initialSolution.secondTypeBought = 0;
    initialSolution.thirdTypeBought = 0;

    for(int i = 0;i < 3;i++)
    {

        findNewSolution(initialSolution,typeCosts[i],i+1); //First(initial) iteration
        if(terminateSearching) return 0;
    }

    while(numberOfNewSolutions > 0)
    { //Search for better solutions
        vector<State> copyOfFoundSolutions = possibleSolutions;
        numberOfNewSolutions = 0;
        for(auto existingSolution : copyOfFoundSolutions)
        {
            for(int i = 0;i < 3;i++)
            {
                findNewSolution(existingSolution,typeCosts[i],i+1);
                if(terminateSearching) return 0;
            }

        }
    }

    State bestSolution = initialSolution;
    for(State possibleSolution : possibleSolutions)
    {
        if(possibleSolution.isBetterThan(bestSolution))
        {
            bestSolution = possibleSolution;
        }
    }
    cout << bestSolution.amountOfDenars <<endl;
    cout << bestSolution.firstTypeBought << " " << bestSolution.secondTypeBought << " " << bestSolution.thirdTypeBought;

}

Сигурно има и поубав пристап и решение од ова.
 
По принцип при оптимизационите алгоритми(на натпреварите за програмирање) се бара решение со помош на динамично програмирање, но пак за тоа е потребна рекурзивна (целева) функција. Е сега проблемот треба да има препроклопувашти под-проблеми и оптимална под-структура за да е решлив со помош на оваа метода.

За рекурзивно мислење најдобри книги се Thinking Recursively и Thinking Recursively with Java од Eric S. Roberts, за динамично програмирање има посебна глава во Introduction to Algorithms.

Нешто драснато (на Нотепад) односно проблемот многу грубо, неточно и неправилно - DO NOT USE IN PRODUCTION:
Код:
min(M - a1*b1 - a2*b2 - a3*b3)
a1, a2, a3 >= 0

recursive:
F(M, 0, 0, 0) = M
F(M, 1, 1, 1) = M - b1 - b2 - b3

recusrive solution: min F(M=const, a1, a2, a3) Forall possible a1, a2, a3

dynamic:
overlaping subproblems? && optimal substructure?
let total_spent = max(a1*b1 + a2*b2 + a3*b3)
we need to find min(M - total_spent) := min(M - max(a1*b1 + a2*b2 + a3*b3))

// brute-force recursive with memoization
Z(current_min, a1, a2, a3)
{
  if current_min == 0 return [current_min, a1, a2, a3];
  if current_min < b1 || current_min < b2 || current_min < b3 return [current_min, a1, a2, a3];

  Z_B1 := Z(current_min - b1, a1 + 1, a2, a3);
  Z_B2 := Z(... ...);
  Z_B3 := ....

  current_solution_for_this_current_min := MIN(Z_B1, Z_B2, Z_B3);
  memoization[current_min] := current_solution_for_this_new_minimum;
  return memoization[current_min];
}

ili bottom-up:
F(M, 0, 0, 0) = M
F(M, a1, a2, a3)
{
  if M <= 0 return/output solution current tuple [a1,a2,a3]
  if memoization[M] is defined return memoization[M];
  // else compute
  let take_b1 := F(M - B1 > 0, a1+1, a2, a3), take_b2 := F(M - B2, a1, a2+1, a3), take_b3 := F(M - B3, a1, a2, a3+1);
  let min = min(take_b1, take_b2, take_b3);
  memoization[M] := min
  return min
}

ili
F(M=0) = 0
F(M=x)
{
  if( M >= B1) F_B1:= F(M - B1) else F_B1:=M(=x)
  if( M >= B2) F_B2:= F(M - B2) ...
  if( M >= B3) F_B3:= F(M - B3) ...
 
  memo, taken[at M=x] := min(F_B1, F_B2, F_B3), argmin(F_B1, F_B2, F_B3)
  return memo, save taken in 'global' table (in order to 'recalculate the resulting triplet');
}
 
Предлог за добар курс, видео на YT, книга или нешто друго за објектно ориентирано програмирање (C++)?
 
Предлог за добар курс, видео на YT, книга или нешто друго за објектно ориентирано програмирање (C++)?
Ова видео е доста добро, темелно објаснето

И делот за ООП во овој курс е исто така стварно добар.
C++ for Complete Beginners
 
Благодарам ма сите за оширните одговори. Најмногу на Bridger за дадениот код, но задачата пробувам да ја решам сам.
 
Барам кандидат кој познава C програмски јазик конкретно за интегрирање на графички интерфејс на контроли.

Станува збор за интегрирање на Nuklear GUI во FilterMeister платформата за развој на Photoshop .8bf филтри. Може по предлог и договор да се интегрира и изборен модерен графички интерфејс.

Ве молам пишете ми приватна порака тие кои се заинтересирани за соработка, ќе се договориме и за цената на услугата.
 

Kajgana Shop

Back
На врв Bottom