C/C++

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

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

Се надевам дека ти помогнав ако треба уште нешто кажи, поздрав.
 
Член од
29 ноември 2014
Мислења
33
Поени од реакции
1
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;
}
 
Последно уредено:
Член од
22 декември 2018
Мислења
66
Поени од реакции
26
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 и раат.
 
Член од
13 декември 2019
Мислења
1
Поени од реакции
0
Дечки може ли некој да ми помогне околу задачава?

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

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

Имам почнато, но не ми е јасно како да продолжам.
Пример влез 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). Состојбата е уникатна ако последниот параметар не е дел од некоја досега пронајдена состојба, а е валидна ако не е број помал од нула.​

Испечати ја состојбата чиј последен параметар е најмал.
 
Член од
26 јануари 2009
Мислења
11.571
Поени од реакции
17.970
Ми треба помош за задачава:

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


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

Bondon

elon musk
Член од
8 септември 2018
Мислења
29
Поени од реакции
43
Ми треба помош за задачава:

Имам почнато, но не ми е јасно како да продолжам.
Јас лично пробав да ја решам со три nested for циклуси, и од 20 решенија, точно е за 14, за другите е пребавен алгоритмот бидејќи има time complexity од O(n^3). За друго решение немам идеја.
 
Член од
21 март 2014
Мислења
509
Поени од реакции
366
Пример влез 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;

}

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

За рекурзивно мислење најдобри книги се 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');
}
 
Член од
25 ноември 2021
Мислења
27
Поени од реакции
0
Предлог за добар курс, видео на YT, книга или нешто друго за објектно ориентирано програмирање (C++)?
 

Bondon

elon musk
Член од
8 септември 2018
Мислења
29
Поени од реакции
43
Предлог за добар курс, видео на YT, книга или нешто друго за објектно ориентирано програмирање (C++)?
Ова видео е доста добро, темелно објаснето

И делот за ООП во овој курс е исто така стварно добар.
C++ for Complete Beginners
 

Maksimot

Психијатриски случај
Член од
28 јули 2021
Мислења
277
Поени од реакции
289
Благодарам ма сите за оширните одговори. Најмногу на Bridger за дадениот код, но задачата пробувам да ја решам сам.
 
Член од
23 јуни 2022
Мислења
2
Поени од реакции
0
Барам кандидат кој познава C програмски јазик конкретно за интегрирање на графички интерфејс на контроли.

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

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

Kajgana Shop

На врв Bottom