C/C++

POS-51

Infinity Driver
Член од
11 ноември 2008
Мислења
1.411
Поени од реакции
445
За првата можеш да користиш најразлични алгоритми за сортирање (bubble sort, quick sort..) но бидејќи ти се бара со if-else наредби, мислам дека вака би било едно решение:


#define MAX_INTS 4

int main()
{
int min = INT_MAX;
int max = INT_MIN;
int a[MAX_INTS];
int i;

for (i = 0; i < MAX_INTS; i++)
{
printf( "Vnesi broj %d od %d : ", (i + 1), MAX_INTS);
scanf( "%d", &a );

if ( a < min) min = a;
if ( a > max) max = a;
}

printf("%d Najmal e \n", min);
printf("%d Najgolem e \n", max);

return 0;
}
првата ја знам, нема потреба со фор, со помошна променлива ја имам решено, и само со иф, лесна е таа ама другите две o_O
 
Член од
7 јануари 2008
Мислења
5.366
Поени од реакции
804
првата ја знам, нема потреба со фор, со помошна променлива ја имам решено, и само со иф, лесна е таа ама другите две o_O
За втората
int n - вкупен број на броевите што ќе ги внесеш (n го задаваш преку тастатура)
int a[n] - низа во која ќе ги внесеш броевите
int posleden - променлива каде ќе го запишеше последниот број

Код:
if ( a[n] % 2 == 0 ) // uslov za parnost
{
posleden = a[n];
}
cout<<"Posledniot tricifren e: "<<posleden;
Со ова ќе најдеш дали бројот е парен и последниот од тие броеви ќе го испечатиш на екран, но ова ќе работи само ако внесуваш трицифрени броеви. Е сега како да го преправиш кодот за да пронаоѓаш дали внесениот број е трицифрен па да пристапиш кон горенапишаниот if циклус, во моментов не ми текнува...
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Ајде програмеришта

Од четири цели броеви кои се читаат од СВ да се отпечати бројот со максимална вредност. Задачата да се реши со помош на if наредбата.

Да се напише програма која од непознат број на цели броеви кои се вчитуваат од СВ ќе го отпечати последно внесениот трицифрен парен број.

Од СВ се вчитуваат n цели броеви и еден број m во опсегот од 0 до 9. Да се напише програма, која од n-те броеви внесени од тастатура ќе го исфрли бројот m и ќе испечати колку вкупно пати тој е исфрлен.
Од каде се овие задачи ? пример за колоквиум или што , и на кој факс и смер ако воопшто се пример за задаци од колоквиум . Ме интересира зошто и мене ми претстојат колоквиумите.
By the way еве мои ршенија на задачите :
Првата вејќе си ја знаел па продолжуваме

Втората :

Код:
#include<stdio.h>
 
int main () {
 
int a;
 
while (scanf("%d",&a))
{
    if ((a>99&&a<1000)&&(a%2==0)) printf ("%d",a);
}
return 0;
}
Третата :

Код:
#include<stdio.h>
 
int main () {
 
int n,m,tmp,tmp2,cif,nb=0,nb2,cif2,br=0;
 
printf("Cifra za isfrluvanje m\n");
 
scanf("%d",&m);
 
printf("Vnesuvajte broevi ... \n");
 
if (m>0&&m<10)
{
while (scanf("%d",&n))
{
    tmp=n;
 
    while (tmp>0)
    {
        cif=tmp%10;
 
        tmp2=tmp;
            if ( tmp2>99999 && tmp2 <1000000 ) nb=nb+cif*100000;
            else if ( tmp2>9999 && tmp2 <100000  ) nb=nb+cif*10000;
            else if ( tmp2>999 && tmp2 <10000 )  nb=nb+cif*1000;
            else if ( tmp2>99 && tmp2 <1000 ) nb=nb+cif*100;
            else if ( tmp2>9 && tmp2 <100 ) nb=nb+cif*10;
            else if (  tmp2 <10  ) nb=nb+cif;
 
        tmp=tmp/10;
 
    }
 
    nb2=nb;
 
    while (nb2>0)
    {
        cif2=nb2%10;
 
        if (cif2!=m) printf("%d",cif2);
 
        else br++;
 
        nb2=nb2/10;
 
    }
 
    printf ("\nCifrata %d e isfrlena %d pati\n",m,br);
}
 
 
}
 
else printf("Pogresno, za m treba da vnesite cifra od 0 do 9");
 
return 0;
}
 
M

Mr.InF3ction

Гостин
Ace-Snake old_School_mk
Да направиш двојна поврзана листа, и да не е кружна е најголемата глупост што може еден програмер да направи.
Зошто? Затоа што буквално сите елементи освен првиот и последниот иркористуваат можностите да се иде напред, назад, буквално ист код ..а баш таа операција што е најскапа т.е да се иде до крајот на листата..со кружна листа ти е брзо....и ти да го оневозможиш тоа е fail..
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.160
Поени од реакции
5.938
Ace-Snake old_School_mk
Да направиш двојна поврзана листа, и да не е кружна е најголемата глупост што може еден програмер да направи.
Зошто? Затоа што буквално сите елементи освен првиот и последниот иркористуваат можностите да се иде напред, назад, буквално ист код ..а баш таа операција што е најскапа т.е да се иде до крајот на листата..со кружна листа ти е брзо....и ти да го оневозможиш тоа е fail..
Не се нервирај, chill :)

Јас само пишав како по дефиниција функционираат листите, иначе нормално дека е подобро да се направи кружна.
 

Boomerang

Немој CTRL+W.
Член од
18 јуни 2006
Мислења
3.709
Поени од реакции
809
Ај ако не му е тешко на некој нека ја ѕирне задачава, не знам зошто не работи, а вака ми изгледа точно, што не мора да значи дека e. Кога ќе и напраам run, го извршува printf-от, па после внесувам колку броеви ќе внесувам (пример 2), после тоа чека број, и откако ќе го внесам бројот којшто сакам да го трансформирам, еве пример внесувам 712, како во примерот, чекам некои 5 секунди, и ми принта некој огромен број, 230948230948, нешто такво...

Да се напише програма со која се вчитуваат N броеви од тастатура. За секој од броевите се печатат бројот на трансформации после кои оригиналниот број станува едноцифрен, како и новодобиениот трансформиран број. Со секоја трансформација на оригиналниот број, тој се заменува со збирот на неговите цифри.
Пр. 712 -> 10 -> 1
Broj na transformacii: 3, tranformiran broj: 1.


Код:
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int N, i, n, pom, pom1, suma = 0, brtran=1, cifra;
    printf("Kolku broevi kje vnesuvash? :\n");
    scanf("%d", &N);
    for(i=1;i<=N;i++)
    {
        scanf("%d", &n);
        pom=n;
        while(pom>9)
        {
            pom1=pom;
            while(pom1)
            {
                cifra=pom1%10;
                suma+=cifra;
                pom1/=10;
            }
            pom = suma;
            brtran++;
        }
        printf("Transformiran broj: %d. Broj na transformacii: %d\n", pom, brtran);
        pom=0;
        suma=0;
        brtran=1;
    }
    system("PAUSE");
    return 0;
}
 
T

TheThinker

Гостин
Ми треба програма која ќе ми ги испечати сите трицифрени броеви и нивните делители во формат
100:1,2....;
101:1..;
итн. Ги знам кодовите за наоѓање делители на број и печатење на сите трицифрени броеви, се обидов да ги искомбинирам, ама никако не ми излегува. Фала за помошта однапред :)
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
@Boomerang - Не треба да го ограничуваш бројот на внесувања , според задачата треба бесконечно да можеш да внесуваш бореви
Така да scanf(%d,&n) while условот вака while(scanf(%d,&n)) , и така бесконечно можеш да внесуваш броеви и да ги проверуваш.
Но доколку сакаш да ја решиш на тој начин како што имаш почнато , неможам да најдам грешка во кодот, вака набрзина видено.
--- надополнето: 30 октомври 2012 во 12:57 ---
Ми треба програма која ќе ми ги испечати сите трицифрени броеви и нивните делители во формат
100:1,2....;
101:1..;
итн. Ги знам кодовите за наоѓање делители на број и печатење на сите трицифрени броеви, се обидов да ги искомбинирам, ама никако не ми излегува. Фала за помошта однапред :)
Ова треба да е поедноставна задача, потруди се да ги решаваш сам. Иначе од каде е оваа задача , која збирка ?

еве море решение за задачата:

Код:
#include<stdio.h>

int main () {

int i=100;


while (i<1000)
{
    printf("%d:",i);
    if (i%1==0) printf("1");
    if (i%2==0) printf("2");
    if (i%3==0) printf("3");
    if (i%4==0) printf("4");
    if (i%5==0) printf("5");
    if (i%6==0) printf("6");
    if (i%7==0) printf("7");
    if (i%8==0) printf("8");
    if (i%9==0) printf("9");
    printf ("\t,");  // vnesi \n na mestoto od \t ako sakas vo nov red da e sekoj broj , no taka ne gi pokazuva site broevi zosto se mnogu.
    i++;
}

return 0;
}
 
Член од
1 јуни 2011
Мислења
25.923
Поени од реакции
41.896
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
...чекам некои 5 секунди, и ми принта некој огромен број, 230948230948, нешто такво...


Код:
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int N, i, n, pom, pom1, suma = 0, brtran=1, cifra;
    printf("Kolku broevi kje vnesuvash? :\n");
    scanf("%d", &N);
    for(i=1;i<=N;i++)
    {
        scanf("%d", &n);
        pom=n;
        while(pom>9)
        {
            pom1=pom;
            while(pom1)
            {
                cifra=pom1%10;
                suma+=cifra;
                pom1/=10;
            }
            pom = suma;
            brtran++;
        }
        printf("Transformiran broj: %d. Broj na transformacii: %d\n", pom, brtran);
        pom=0;
        suma=0;
        brtran=1;
    }
    system("PAUSE");
    return 0;
}
Секогаш кога ти излегуваат некој вакви огромни цифри имаш некое натрупување некаде. Кодот може да се направи по едноставен, но ајде за овој... Целиот проблем ти е во излегувањето от надворешниот while. За да излезеш треба (pom<= 9) a pom правиш да е еднаков на suma, suma-та ти се трупа.
На пример за внесен 789, за сума добиваш 7 + 8 + 9 = 24 во првото вртење, после на сумата ја трупаш suma += 2 + 4 и добиваш 30, место 6 и да излезеш.
Се што треба да направиш да ја исчистиш сумата кога ќе излезеш од внатрешниот циклус.

Код:
while(pom>9)
{
        pom1=pom;
        while(pom1)
        {
                cifra=pom1%10;
                suma+=cifra;
                printf("%d:\n",pom1);
                pom1/=10;
        }
        pom = suma;
        brtran++;
        suma = 0; //Tука
}
 
T

TheThinker

Гостин
Еве ви некои збирки разгледајте ги, а не да барате цела задача да ви се реши. Смешно е да барате решение на вакви едностави задачи. Лозинката за отпакување е tutoriali.org
http://tutoriali.org/C.html
Го почитувам твоево мислење, ама јас сум почетник и некои работи не ги согледувам веднаш. Дополнително ми отежнува тоа што градот од каде доаѓам нема никакви можности за едуцирање(не постои курс за програмирање или некој кому можам да му платам за да ми објаснува). Затоа барам помош овде. Имам збирка од Ѓ.Јованчески за Ц++ и донекаде ми користи бидејќи се претставени и алгоритмите и кодот, но за дел од задачите се случува да изгубам куп време и пак да не ги решам. Затоа постирам задачи тука. Ако се најде некој љубезен да одвои време и да објасни, супер, ако не, пак ок, ќе пишам на друг форум и готово.
 
Член од
1 јуни 2011
Мислења
25.923
Поени од реакции
41.896
Го почитувам твоево мислење, ама јас сум почетник и некои работи не ги согледувам веднаш. Дополнително ми отежнува тоа што градот од каде доаѓам нема никакви можности за едуцирање(не постои курс за програмирање или некој кому можам да му платам за да ми објаснува). Затоа барам помош овде. Имам збирка од Ѓ.Јованчески за Ц++ и донекаде ми користи бидејќи се претставени и алгоритмите и кодот, но за дел од задачите се случува да изгубам куп време и пак да не ги решам. Затоа постирам задачи тука. Ако се најде некој љубезен да одвои време и да објасни, супер, ако не, пак ок, ќе пишам на друг форум и готово.
Глупа е таа збирка остави ја симни ги српските збирки готови решени задачи има ептен се едностави за решавање и учење. По 2-3 пати пишувај една задача ќе си научиш а малку треба и да размислуваш.
Никој не може да ти објасни овде исто и тука ќе ти ја стават решена и наредна пак нема да ја знаеш. Ако ги знаеш фукциите и циклусите ќе ги разбереш сите задачи, слични се сите.
И на 100 форуми да пишеш пак исто е ќе ти ја кажат целата и потоа пак нема да знаеш. Разгледај ги сите ќе видеш колку се лесни задачите. За тебе е тоа на мене не ми е тешко да го копирам кодот од интренет и да ти го ставам тука.
https://rapidshare.com/#!download|285p2|331620696|fisher_zbirka.doc|949|0|0
 

POS-51

Infinity Driver
Член од
11 ноември 2008
Мислења
1.411
Поени од реакции
445
Од каде се овие задачи ? пример за колоквиум или што , и на кој факс и смер ако воопшто се пример за задаци од колоквиум . Ме интересира зошто и мене ми претстојат колоквиумите.
By the way еве мои ршенија на задачите :
Првата вејќе си ја знаел па продолжуваме

Втората :

Код:
#include<stdio.h>
 
int main () {
 
int a;
 
while (scanf("%d",&a))
{
    if ((a>99&&a<1000)&&(a%2==0)) printf ("%d",a);
}
return 0;
}
Третата :

Код:
#include<stdio.h>
 
int main () {
 
int n,m,tmp,tmp2,cif,nb=0,nb2,cif2,br=0;
 
printf("Cifra za isfrluvanje m\n");
 
scanf("%d",&m);
 
printf("Vnesuvajte broevi ... \n");
 
if (m>0&&m<10)
{
while (scanf("%d",&n))
{
    tmp=n;
 
    while (tmp>0)
    {
        cif=tmp%10;
 
        tmp2=tmp;
            if ( tmp2>99999 && tmp2 <1000000 ) nb=nb+cif*100000;
            else if ( tmp2>9999 && tmp2 <100000  ) nb=nb+cif*10000;
            else if ( tmp2>999 && tmp2 <10000 )  nb=nb+cif*1000;
            else if ( tmp2>99 && tmp2 <1000 ) nb=nb+cif*100;
            else if ( tmp2>9 && tmp2 <100 ) nb=nb+cif*10;
            else if (  tmp2 <10  ) nb=nb+cif;
 
        tmp=tmp/10;
 
    }
 
    nb2=nb;
 
    while (nb2>0)
    {
        cif2=nb2%10;
 
        if (cif2!=m) printf("%d",cif2);
 
        else br++;
 
        nb2=nb2/10;
 
    }
 
    printf ("\nCifrata %d e isfrlena %d pati\n",m,br);
}
 
 
}
 
else printf("Pogresno, za m treba da vnesite cifra od 0 do 9");
 
return 0;
}
Лабараториски на Финки КРС :D ти кај си ?
 
M

Mr.InF3ction

Гостин
еве море решение за задачата:

Код:
#include<stdio.h>
 
int main () {
 
int i=100;
 
 
while (i<1000)
{
    printf("%d:",i);
    if (i%1==0) printf("1");
    if (i%2==0) printf("2");
    if (i%3==0) printf("3");
    if (i%4==0) printf("4");
    if (i%5==0) printf("5");
    if (i%6==0) printf("6");
    if (i%7==0) printf("7");
    if (i%8==0) printf("8");
    if (i%9==0) printf("9");
    printf ("\t,");  // vnesi \n na mestoto od \t ako sakas vo nov red da e sekoj broj , no taka ne gi pokazuva site broevi zosto se mnogu.
    i++;
}
 
return 0;
}
100 се дели и со 10, 20, 25,50..така да треба 2 циклуси
 

Boomerang

Немој CTRL+W.
Член од
18 јуни 2006
Мислења
3.709
Поени од реакции
809
@Boomerang - Не треба да го ограничуваш бројот на внесувања , според задачата треба бесконечно да можеш да внесуваш бореви
Така да scanf(%d,&n) while условот вака while(scanf(%d,&n)) , и така бесконечно можеш да внесуваш броеви и да ги проверуваш.
Но доколку сакаш да ја решиш на тој начин како што имаш почнато , неможам да најдам грешка во кодот, вака набрзина видено.
--- надополнето: 30 октомври 2012 во 12:57 ---


Ова треба да е поедноставна задача, потруди се да ги решаваш сам. Иначе од каде е оваа задача , која збирка ?

еве море решение за задачата:

Код:
#include<stdio.h>
 
int main () {
 
int i=100;
 
 
while (i<1000)
{
    printf("%d:",i);
    if (i%1==0) printf("1");
    if (i%2==0) printf("2");
    if (i%3==0) printf("3");
    if (i%4==0) printf("4");
    if (i%5==0) printf("5");
    if (i%6==0) printf("6");
    if (i%7==0) printf("7");
    if (i%8==0) printf("8");
    if (i%9==0) printf("9");
    printf ("\t,");  // vnesi \n na mestoto od \t ako sakas vo nov red da e sekoj broj , no taka ne gi pokazuva site broevi zosto se mnogu.
    i++;
}
 
return 0;
}
Мислам дека треба да го ограничам бројот на броеви кои ќе се внесуваат, бидејќи вика дека се вчитуваат N броеви, а не непознат број на броеви, ваљда во тој случај би го употребиле тоа што го посочи горе, со while-от. Не знам, може сум грешка, фала во секој случај :)
 

Kajgana Shop

На врв Bottom