C/C++

M

Mr.InF3ction

Гостин
C++ ти одличен старт :)
Почни тоа што се учи во школо и паралелно гледај ги видеата ако си добар со англиски. Ако не си прво научи англиски после научи да програмираш.
Инаку да, во школо не се бара visual c++, туку сите користат code:blocks :)
 
Член од
10 февруари 2008
Мислења
845
Поени од реакции
447
по грешка го ставив тука постот ама сепак фала за решението , дан имаш и некои други решенија на задачи ?
Кажи за која задача, некои ги имам решавано и еве го кодот ако ти го затреба. Ако му текне на некој поедноставно решение нека го постира
Да се напише програма со која се печати дијамант од ѕвездички (*). Дијамантот
треба да има 2*N – 1 редици, каде N се чита од тастатура.
Пр. За N = 3 се печати
*
***
*****
***
*
Код:
#include <stdio.h>
 
void print(int a, int b)
{
    int i=1;
    while (i <= a)
    {
        printf(" ");
        i++;
    }
 
    i = 1;
    while (i <= b)
    {
        printf("*");
        i++;
    }
}
 
int main(void)
{
    int row, n, space, asterix, mid, newline;
 
    scanf("%d", &n);
 
    space = n - 1;
    asterix = 1;
    mid = 0;
    newline = 0;
    row = 0;
    while (row < (2*n-1))
    {
        if (newline)
            printf("\n");
 
        print(space, asterix);
        if (!mid)
        {
            space--;
            asterix += 2;
            row++;
            if (asterix == (2*n-1))
                mid = 1;
        }
        else
        {
            space++;
            asterix -= 2;
            row++;
        }
        newline = 1;
 
    }
 
}
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Ако му текне на некој поедноставно решение нека го постира
Да се напише програма со која се печати дијамант од ѕвездички (*). . .
Незнам колку ќе е по-едноставна, но е решена на малку по друг начин. Полето се разгледува како матрица(но никаде не се дефинира матрица) врз чии индекси, во зависност каде се наоѓаат, ако се извршат некои проверки се добива резултат дали се наоѓаат во границите на дијамантот или надвор од него и се печати ѕвезда или празно место. Два вложени фор циклуса, малку математика и неколку проверки ја прават целата работа :)

Код:
void Print_Diamond(int n)
{
    for(int i = 0; i < 2*n-1; i++)
    {
        for(int j = 0; j < 2*n - 1; j++)
        {
            if( i <= n-1 && j >= n-1 && (j - i <= n - 1) )
                printf("*");
            else if( i <= n-1 && j < n-1 && (i + j >= n - 1) )
                printf("*");
            else if( i > n-1 && j < n - 1 && (i - j <= n - 1) )
                printf("*");
            else if( i > n-1 && j >= n-1 && (i + j <= 3*(n-1)) )
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
}
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Ovaa zadaca bi trebelo da se resi samo so if else i ciklusi , bez funkcii i matrici , zosto go nemame uceno toa a ovaa zadaca e na lab. vezbi pod tema ciklusi.
pemperle go ima resenieto mislam ama zosto ne mi funkcionira koga ke napravam copy paste na kodot mi javuva greska vo 3 red.
Treba da se dopolni kodot so nesto ili jas gresam nekade ?
--- надополнето: 21 октомври 2012 во 13:38 ---
Исто така следните 3 задачи се под категоријата циклуси,
Ако некој може да ги реши без функции и матрици или да даде концепт тоа би било супер.
Пробав да ги решам но циклусиве се накако потешки за мене.
Нормално е тоа или ми треба време и искуство?

Задачи:

1. Да се напише програма која го наоѓа најголемиот заеднички делител (НЗД) на два броја. Броевите се читаат од тастатура.
Пр. a = 100, b = 584 NZD(a,b) = 4

2. Да се напише програма која ќе ги отпечати сите прости броеви од даден опсег (почетокот и крајот на опсегот се внесуваат од тастатура) кои се составени само од непарни цифри. На крајот да се испечати бројот на прости броеви кои го задоволуваат условот (за еден број велиме дека е прост доколку има точно два (различни) делители (1 и самиот тој број)).

3. Да се напише програма со која се вчитуваат N броеви од тастатура. За секој од броевите се печатат бројот на трансформации после кои оригиналниот број станува едноцифрен, како и новодобиениот трансформиран број. Со секоја трансформација на оригиналниот број, тој се заменува со збирот на неговите цифри.
Пр. 712 -> 10 -> 1
Broj na transformacii: 3, tranformiran broj: 1.
 
Член од
10 февруари 2008
Мислења
845
Поени од реакции
447
Ovaa zadaca bi trebelo da se resi samo so if else i ciklusi , bez funkcii i matrici , zosto go nemame uceno toa a ovaa zadaca e na lab. vezbi pod tema ciklusi.
pemperle go ima resenieto mislam ama zosto ne mi funkcionira koga ke napravam copy paste na kodot mi javuva greska vo 3 red.
Treba da se dopolni kodot so nesto ili jas gresam nekade ?
--- надополнето: 21 октомври 2012 во 13:38 ---
Исто така следните 3 задачи се под категоријата циклуси,
Ако некој може да ги реши без функции и матрици или да даде концепт тоа би било супер.
Пробав да ги решам но циклусиве се накако потешки за мене.
Нормално е тоа или ми треба време и искуство?

Задачи:

1. Да се напише програма која го наоѓа најголемиот заеднички делител (НЗД) на два броја. Броевите се читаат од тастатура.
Пр. a = 100, b = 584 NZD(a,b) = 4

2. Да се напише програма која ќе ги отпечати сите прости броеви од даден опсег (почетокот и крајот на опсегот се внесуваат од тастатура) кои се составени само од непарни цифри. На крајот да се испечати бројот на прости броеви кои го задоволуваат условот (за еден број велиме дека е прост доколку има точно два (различни) делители (1 и самиот тој број)).

3. Да се напише програма со која се вчитуваат N броеви од тастатура. За секој од броевите се печатат бројот на трансформации после кои оригиналниот број станува едноцифрен, како и новодобиениот трансформиран број. Со секоја трансформација на оригиналниот број, тој се заменува со збирот на неговите цифри.
Пр. 712 -> 10 -> 1
Broj na transformacii: 3, tranformiran broj: 1.
За претходната задача pemperle никаде не дефиира матрица, а не можеш да ја компајлираш затоа што не се дефинирани променливи и фали библиотека и внесување на променливи, моето решение може и без функција да се направи, само вака беше попрегледно и затоа е со функција. Еве ти трето решение само со фор циклуси
http://www.codingunit.com/printing-a-diamond-pattern-in-c

Прва задача:

Код:
#include <stdio.h>
 
int main()  {
    int num1 , num2, tmp, i, nzd=1;
 
    scanf("%d %d", &num1, &num2);
 
    if(num1 < num2) {tmp = num1; num1 = num2; num2 = tmp;}
 
    for(i=1; i<= num2; i++) {
        if((num1 % i == 0) && (num2 % i == 0)) nzd = i;
 
    }
 
    printf("%d", nzd);
 
return 0;
}
Втората задача
Код:
#include <stdio.h>
 
int main()  {
    int start ,end, tmp, i, prost=0, pecati=0, j, cifra;
 
    scanf("%d %d", &start, &end);
 
    for(i=start; i<= end; i++)
    {
        prost = 1; pecati = 1; tmp=i;
 
        for(j=2; j <= i/2; j++)
        {
            if(i % j == 0) { /*printf("%d ne e prost\n", i); */ prost = 0; break;}
        }
 
        if(prost != 0)
        {
            /*printf("%d se testira za cifri\n", i); */
            while(tmp>0)
            {
                    cifra = tmp % 10;
                    tmp /= 10;
                    if(cifra % 2 == 0) { /* printf("%d e prost no ne treba da se pecati\n", i); */ pecati = 0; break; }
            }
        if(pecati != 0) printf("%d\n", i);
        }
 
 
    }
return 0;
}
Трета задача
Код:
#include <stdio.h>
 
int main()  {
    int num, tran = 1, tmp, sum = 0;
 
    scanf("%d", &num);
 
    while (num >= 10)
    {
        tmp = num;
        sum = 0;
 
        while(tmp > 0)
        {
            sum = sum + (tmp % 10);
            tmp /= 10;
        }
 
        num = sum;
        tran++;
    }
 
    printf("Posle %d transformacii brojot e %d", tran, num);
 
return 0;
}
Ова за циклуси, да во почеток знаат да бидат малку покмплицирани, но прво мора убаво да ги разбереш како функцинираат, а после само решавање на задачи, што повеќе задачи решаваш тоа ке се ти полесни. А до првиот колоквиум нема уште многу време. Моја препорака почни да ги решаваш сам задачите само така ке научиш да програмираш, затоа што од готови решенија тешко се учи.
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
O
pemperle go ima resenieto mislam ama zosto ne mi funkcionira koga ke napravam copy paste na kodot mi javuva greska vo 3 red.
Незнам точно како си ја пуштил. Еве пробај вака со целиот код:

Код:
#include <stdio.h>
 
int main(void)
{
    int n, i, j;
    printf("Razmer: ");
    scanf("%d",&n);
 
 
    for(i = 0; i < 2*n-1; i++)
    {
        for(j = 0; j < 2*n - 1; j++)
        {
            if( i <= n-1 && j >= n-1 && (j - i <= n - 1) )
                printf("*");
            else if( i <= n-1 && j < n-1 && (i + j >= n - 1) )
                printf("*");
            else if( i > n-1 && j < n - 1 && (i - j <= n - 1) )
                printf("*");
            else if( i > n-1 && j >= n-1 && (i + j <= 3*(n-1)) )
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    printf("\n\n");
}
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Првично многу фала за решенијава .
А за тоа дека сам треба да ги решавам во право си , ама 2-3 дена се турдев да ги решам задачиве , и стигнував до некаде ама не до целосно и правилно решение.
Сега ќе поробам да научам од готовите решенија.
Уште еднаш фала.
 
Член од
16 април 2012
Мислења
333
Поени од реакции
217
Прва задача:

Код:
#include <stdio.h>
 
int main()  {
    int num1 , num2, tmp, i, nzd=1;
 
    scanf("%d %d", &num1, &num2);
 
    if(num1 < num2) {tmp = num1; num1 = num2; num2 = tmp;}
 
    for(i=1; i<= num2; i++) {
        if((num1 % i == 0) && (num2 % i == 0)) nzd = i;
 
    }
 
    printf("%d", nzd);
 
return 0;
}
Оваа задача вака напишана во codeblocks ми јавува warning дека има "too many arguments to format", и кога ќе ја извршам не ми го печати резултатот.
Јас ја решив со функции ама пак кога ќе пробам да печатам ми го јавува истиот warning, можам само со return. Некој со сличен проблем? Како да имам чувство дека компајлерот не разбира дека печатењето е откако ќе заврши циклусот, односно ме дупи. Еве го и кодов може ќе се најде на некој.
Код:
#include <stdio.h>
 
int main()
{
int a,b,c;
scanf("%d %d", &a,&b);
 
while(1)
    {
      c=a%b;
      if(c==0)
      return b;
      a=b;
      b=c;
 
 
    }
 
}
Измена: проверив на онлајн компајлер немам никаков проблем. Некоја идеја како да го решам ова со codeblocks. Како default компајлер ми е ставен GNU GCC compiler.
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Дали за оваа задача :

Да се напише програма која од тастатура ќе прочита еден природен број n, и на екран ќе го испечати најмалиот „среќен“ број кој што e поголем од n. За еден природен број велиме дека е „среќен“ ако тој содржи само „среќни“ цифри (цифрите 7 и 9).
Пример: Влез: 789 Излез: 797

Ова е правилно решение или ако треба подобро(поправилно) да се реши нека каже некој поискусен.
Исто така. како би се решила задачава за броеви од 10 до 1 000 000 на пример без да ги бaраш кои се цифрите од внесениот број.
Јас ја решив за 3-цифрени само а во задачава не е наведено тоа . ако не е само за 3-цифрени тогаш не знам како би ја решил.Имате некоја идеја?

Код:

#include <stdio.h>

int main()
{
int n,c1,c2,c3,bingo;
scanf("%d",&n);
c1=n/100;
//c2=n%100/10;
c3=n%10;
while (n<1000)
{

if (
(n/100==c1 && n%100/10==c1 && n%10==c1 && n>0) || //777
(n/100==c1 && n%100/10==c1 && n%10==c3 && n>0) || //779
(n/100==c1 && n%100/10==c3 && n%10==c1 && n>0) || //797
(n/100==c1 && n%100/10==c3 && n%10==c3 && n>0) || //799
(n/100==c3 && n%100/10==c1 && n%10==c1 && n>0) || //977
(n/100==c3 && n%100/10==c1 && n%10==c3 && n>0) || //979
(n/100==c3 && n%100/10==c3 && n%10==c1 && n>0) || //997
(n/100==c3 && n%100/10==c3 && n%10==c3 && n>0) //999
)
{
bingo=n;
printf("%d",bingo);
break;
}

n++;
}


return 0;
}
 
Член од
10 февруари 2008
Мислења
845
Поени од реакции
447
Код:
#include <stdio.h>
 
int main()
{
int a,b,c;
scanf("%d %d", &a,&b);
 
while(1)
{
c=a%b;
if(c==0)
break;
a=b;
b=c;
 
 
}
printf("NZD: %d", b);
}
Измена: проверив на онлајн компајлер немам никаков проблем. Некоја идеја како да го решам ова со codeblocks. Како default компајлер ми е ставен GNU GCC compiler.
Имаш грешка во твојот код, маин функција треба да враќа 0 или ништо да не враќа. Инаку мојот код функцинира во компајлер, а и твојот кога ке се поправи функцинира.
За ова инсталирај од почеток code::blocks заедно со компајлерот што иде со него околу 70МБ треба да е инсталација...

Дали за оваа задача :

Да се напише програма која од тастатура ќе прочита еден природен број n, и на екран ќе го испечати најмалиот „среќен“ број кој што e поголем од n. За еден природен број велиме дека е „среќен“ ако тој содржи само „среќни“ цифри (цифрите 7 и 9).
Пример: Влез: 789 Излез: 797

Ова е правилно решение или ако треба подобро(поправилно) да се реши нека каже некој поискусен.
Исто така. како би се решила задачава за броеви од 10 до 1 000 000 на пример без да ги бaраш кои се цифрите од внесениот број.
Јас ја решив за 3-цифрени само а во задачава не е наведено тоа . ако не е само за 3-цифрени тогаш не знам како би ја решил.Имате некоја идеја?
Ке ти пројде на некои примери, а некои ке ти падне, бидејќи никаде не е наведено трицифрен број, не е целосно тоа решение. Треба да размислуваш глобално како да ги опфатиш сите броеви, а не само трицифрени. Ја имам и таа решено, ке ја ставам ако заглавиш ама пробај прво сам да ја решиш. Еве ти идеја
Стави еден while циклус кој ке ги проверува сите броеви, почнувајќи од внесениот. И во него уште еден while циклус кој ке ги проверува цифрите на секој број, ако најде барем една цифра што не е 7 или 9 нека прекине, и нека оди на наредниот број...
 
Член од
19 јануари 2011
Мислења
3
Поени од реакции
1
Некој решение на следниве задачи, Благодарам
1. Да се најде коренот на реалниот број x со Њутнова формула xk=1/2(xk-1+b/ xk-1) за к=1,2,3,... со точност |xk-xk-1|<e . За вредноста b може да се земе почетната вредност на х. 2. Меѓу природните броеви помали од природниот број n, да се најде оној чиј збир на делителите е најголем.

 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Некој решение на следниве задачи, Благодарам
Нешто да не имаш згрешено во условот, како да ми се гледаат многу променливи што се преклопуваат и плус алгоритамот за корен јас го знам малку по различно. Ќе ти го напишам кодот за првата, како што мислам дека треба, па ако треба, измени го.

Код:
#include <iostream>
using namespace std;
 
double loop(double guess, double x)
{
    if(abs(guess * guess - x) < 0.001)
        return guess;
    else
        return loop( ( guess + x/guess)/2, x);
}
 
double root(double n)
{
    return loop(1, n);
}
 
int main(void)
{
    double n;
    cin >> n;
 
    cout << "Reshenje " << root(n) << endl;
 
}
Ако треба коефициентот на точност да се внесе од тастатура, ќе треба да го зададеш како параметар и во двете функции, и тоа ќе ти е бројот што ќе стои на местото на 0.001 во условот во функцијата loop. А за почетната вредност на b, (тука го напишав guess за прегледност), по добро да почнеш со некоја константа (алгоритамот ќе работи со секој позитивен број) за да се знае дека вредноста нема никаква врска со променливите или влез од тастатура.
 
Член од
19 јануари 2011
Мислења
3
Поени од реакции
1
Нешто да не имаш згрешено во условот, како да ми се гледаат многу променливи што се преклопуваат и плус алгоритамот за корен јас го знам малку по различно. Ќе ти го напишам кодот за првата, како што мислам дека треба, па ако треба, измени го.

Код:
#include <iostream>
using namespace std;
 
double loop(double guess, double x)
{
    if(abs(guess * guess - x) < 0.001)
        return guess;
    else
        return loop( ( guess + x/guess)/2, x);
}
 
double root(double n)
{
    return loop(1, n);
}
 
int main(void)
{
    double n;
    cin >> n;
 
    cout << "Reshenje " << root(n) << endl;
 
}
Ако треба коефициентот на точност да се внесе од тастатура, ќе треба да го зададеш како параметар и во двете функции, и тоа ќе ти е бројот што ќе стои на местото на 0.001 во условот во функцијата loop. А за почетната вредност на b, (тука го напишав guess за прегледност), по добро да почнеш со некоја константа (алгоритамот ќе работи со секој позитивен број) за да се знае дека вредноста нема никаква врска со променливите или влез од тастатура.
Благодарам, само што со abs јавуваше грешка па на тоа место ставив fabs и работи.
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Ке ти пројде на некои примери, а некои ке ти падне, бидејќи никаде не е наведено трицифрен број, не е целосно тоа решение. Треба да размислуваш глобално како да ги опфатиш сите броеви, а не само трицифрени. Ја имам и таа решено, ке ја ставам ако заглавиш ама пробај прво сам да ја решиш. Еве ти идеја
Стави еден while циклус кој ке ги проверува сите броеви, почнувајќи од внесениот. И во него уште еден while циклус кој ке ги проверува цифрите на секој број, ако најде барем една цифра што не е 7 или 9 нека прекине, и нека оди на наредниот број...


Еве се потрудив да ја решам задачата според помошта твоја но, што не е во ред со мојов код? кога го гледам кодов изгледа дека треба да работи , но не работи.
Не знам што е проблемот.
За внесен 789 , би требело да извади 797.


PHP:
#include <stdio.h>
 
int main()
{
int n,i,cifra,max;
scanf("%d",&n);
 
while (n<1000)
{
 
i=n;
while (i>0)
{
 
cifra= i%10;
 
 
if (cifra != 7 || cifra != 9 )
{
max=0;
break;
}
 
if (cifra== 7 || cifra== 9 )
{
max=1;
}
 
i/=10;
 
}
 
if (max == 1){
printf("%d\n",n);
break;
}
 
 
n++;
 
}
 
 
getch();
}
--- надополнето: 23 октомври 2012 во 10:58 ---
Како ги постирате кодовивете да излегуваат на бела позадина како во програмата ? Да знам за другите постови како да ги ставам така многу полено се читаат на тој начин.
 
M

Mr.InF3ction

Гостин
maxmaster

После иконите за додавање слика или видео има копче "Код", кликни на тоа одбери PHP.
 

Kajgana Shop

На врв Bottom