C/C++

Член од
10 февруари 2008
Мислења
843
Поени од реакции
444
maxmaster твојот код го средив малку, мислам дека и загради ти фалеа, непотрбни иф-услови и while го ставив да врти додека не се отпечати број. Ке се снајдеш веројатно со овој код
PHP:
#include <stdio.h>
 
int main()
{
    int n, i, cifra, max = 0;
    scanf("%d", &n);
 
    while (max == 0)
    {
 
        i = n;
        while (i > 0)
        {
            cifra = i % 10;
            i /= 10;
 
            if ((cifra == 7) || (cifra == 9))
            {
                max = 1;
            }
 
            else
            {
                max = 0;
                break;
            }
 
        }
 
    if (max == 1)
    {
        printf("%d\n", n);
        break;
    }
    n++;
    }
return 0;
}
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
genius2 - фала за решението , го анализирав твојот код и вистина е по среден, исто така заклуцив дека проблемот кај мојот код покрај беспотребно if, било исто така тоа што пишував if (cifra != 7 || cifra != 9 ) а тоа така не може треба if (cifra != 7 && cifra != 9 ) , исто како што не може if (cifra== 7 && cifra== 9 ) мора да е if (cifra== 7 || cifra== 9 ) . само || го сменив со && и мојот код функционираше иако не е организиран баш најдобро.
Друго нешто ме мачи со задачава , а тоа е решението е само за 789 ако се внеси па ти дава 797 , ако внесам 589 би требело да ми вади код 595 . тогаш би била задачата правилно решена.Но ако внесам 589 ми вади 777 и нормално е тоа според кодот.
Незнам дали задачата се однесува на цифрите само 7 и 9 според примерот , или на било кој број на пример 589 да извади 5 и 9 од бројот. Мислам дека е второто.
Ако е така кое би било решението.Ќе мора да се најдат и зачуваат цифрите па да се споредува.И како сето тоа на 2,3,4 и повејќе цифрен број.
Немам многу искуство со вакви задаци па корегирајте кај грешам.
Исто така оваа е задача за прв колоквиум , до кој познавањата ми се if-else,циклуси и ако стигниме да ги учиме вектори и матрици. Па како ова да се реши со овие предзнаења? Дали воопшто може без вектори и матрици?

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

Mr.InF3ction

Гостин
maxmaster

Решението што го постираше genius2 е точен. Но изгледа ти не си ја сфатил задачата, вика АКО тој број содржи САМО 7 и 9. што и да внесеш резултатот мора да е број што ги содржи САМО цифрите 7 и 9.
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Сигурно дека не сум ја разбрал задачата , затоа и прашувам , ако ми беше јасна немаше да прашувам.
Може да се каже дека задачата сака да каже бројот што треба да се испечати ќе се содржи само од цифрите 7 и 9.
Но не е баш прецизно кажано и тоа што е во заграда (цифрите 7 и 9 )комплицира.
Според примерот 789 ми изгледаше како да 7 и 9 можат да бидат променливи како (*8*) па новиот број да се состои од 1-вата и последната цифра од внесениот број, а 7 и 9 се дадени како објаснување за примерот влез 789.
Ако ставиме нов пример 589 - среќни цифри би биле 5 и 9? или секогаш 7 и 9 ?

Но ако вие поискусните велите дека е само 7 и 9 , тогаш така е. Искуството си го прави своето.
 
M

Mr.InF3ction

Гостин
Па и јас немам некое искуство, студент сум..втора година, но кратко и јасно е кажано дека среќни цифри се 7 и 9 и толку. Инаку ако има задача не гледај преку примерот да сфатиш што бара, туку читај го текстот.
 

Емкаа

the worst thing about prison was the dementors.
Член од
14 мај 2008
Мислења
4.930
Поени од реакции
12.422
Да се напише програма која ќе ги отпечати сите прости броеви од даден опсег (почетокот и
крајот на опсегот се внесуваат од тастатура) кои се составени само од непарни цифри. На
крајот да се испечати бројот на прости броеви кои го задоволуваат условот.

Како да ги добијам цифрите, без разлика на бројот на цифри, на пример без разлика дали е троцифрен или четвороцифрен?
 
M

Mr.InF3ction

Гостин
Емкаа

Предходната задача што е решена на темава го има тоа што ти треба :

PHP:
while (broj>0)
{
  cifra = broj%10;  // дава остаток при делење со 10, т.е најНезначајната цифра од некој број.
  broj /= 10;         // се брише најНезначајната цифра од некој број.
}
 
Член од
10 февруари 2008
Мислења
843
Поени од реакции
444
Да се напише програма која ќе ги отпечати сите прости броеви од даден опсег (почетокот и
крајот на опсегот се внесуваат од тастатура) кои се составени само од непарни цифри. На
крајот да се испечати бројот на прости броеви кои го задоволуваат условот.

Како да ги добијам цифрите, без разлика на бројот на цифри, на пример без разлика дали е троцифрен или четвороцифрен?
http://forum.kajgana.com/threads/c-c.4993/page-113#post-5393359
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Еве се потрудив да ја решам задачата според помошта твоја но, што не е во ред со мојов код?
Кодот неможам да го разгледам сега, но ми изгледа пре-комплициран за задачава, мислам дека оваа идеа би ти била малку по лесна за програмирање.
- Треба да создадеме број од седмици и од деветки, поголем од внесениот. Со мали ограничувања, во глобала, се што е помало од седум станува седум, се што е поголемо од седум станува девет (читајќи од десно кон лево).
Единствена работа што треба да решиш е да знаеш како ќе ја изброиш должината на внесениот број(од колку цифри се состои) и да ја разгледуваш секоја последователна цифра од десно кон лево.
Кодот за овој начин го имаш утре и ќе пробам да разберам што е работата со твојот код. Поз ;)
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Еве се потрудив да ја решам задачата според помошта твоја но, што не е во ред со мојов код? кога го гледам кодов изгледа дека треба да работи , но не работи.
Не знам што е проблемот.
За внесен 789 , би требело да извади 797.
Видов што е како е, кодчето ти е супер, имаш елементарна грешка, ништо страшно. Иначе ти кажав како би можела да се реши задачата на друг начин, многу по ефикасен, ама така ќе треба да се дефинираат барем уште 3-4 функции што мислам дека само ќе те изпобуни повеќе, но ако сакаш ќе го искуцам ќе го постнам, но мислам дека не би ти требал сега за сега така да (до админите): може да се избрише мојот предходен пост за да не буни.
Иначе грешката:
-како прво надворешниот циклус

while(n < 1000)

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

-второ, внатре, проверката за да видиш дали cifra е различна од 7 или 9

if (cifra != 7 || cifra != 9 )

гледај што се случува.. Нека cifra = 7. Првата проверка ќе даде резултат false(7 != 7), втората ќе даде резултат true (7 != 9), но бидејќи користиш ИЛИ, целиот резултат ќе биде true или нешто од типот, cifra не е ни 7 ни 9, а уствари е.

Значи треба да користиш логичко И (&&) на тој ред, а со циклусот немаш никаков проблем, него можеш да го направиш вечен циклус, просто стави while(1) и мислам дека ќе ти работи за било кој внесен број.

Еве го целиот код:

Код:
#include <stdio.h>
 
 
int main()
{
    int n,i,cifra,max;
    scanf("%d",&n);
 
    while (1)
    {
        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++;
    }
}
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Фала pemperle за одговорт - многу научив од таа задача.

Зошто ова не функционира? Венсам 1 буква char променлива, па после тоа друга.
Откако ќе ја внесам првата програмата завршва иако треба да чека да внесам друга буква.
пробав со %s - во овој случај можат да се внесат 2-те букви но не ги памти кои е вредностите на променливите.

PHP:
#include <stdio.h>
 
int main () {
 
char x,y;
 
scanf("%c",&x);
scanf("%c",&y);
 
printf ("%c",x);
printf ("%c",y);
 
 
return 0;
 
 
}
 

Xibalba

Corona Australis
Член од
24 јануари 2012
Мислења
6.072
Поени од реакции
11.440
Зошто ова не функционира? Венсам 1 буква char променлива, па после тоа друга.
Откако ќе ја внесам првата програмата завршва иако треба да чека да внесам друга буква.
пробав со %s - во овој случај можат да се внесат 2-те букви но не ги памти кои е вредностите на променливите.

PHP:
#include <stdio.h>
 
int main () {
 
char x,y;
 
scanf("%c",&x);
scanf("%c",&y);
 
printf ("%c",x);
printf ("%c",y);
 
 
return 0;
 
 
}
А зошто не користиш getchar() ?

Ако мора scanf тогаш пробај со scanf("%c%*c",&x)
 
M

Mr.InF3ction

Гостин
maxmaster

За да сфатиш ова треба да знаеш прво како работи во позадина читањето знаци. Ќе се обидам да ти објаснам што може по просто, кратко и јасно :pos:

Значи кога сакаш да читаш еден знак од тастатура пишуваш :
scanf("%c", &x);

И во терминал/cmd чека да внесеш некоја буква и да притиснеш ЕНТЕР. и се супер знакот што си внесел се запишува во x.
Но тука доаѓа моментот што ако сакаш после тоа да читаш уште еден знак ?
Во твојот случај се запишува нешто без да те праша и се печати одма резултатот. Но ако гледаш повнимателно ќе сфатиш дека одкако ќе го печати првиот знак што е внесен курсорот е на нов ред. Зошто ? Затоа што и притискањето ентер е некој знак во ACSII табелата a тоа е ASCII знакот со децимална вредност 10 , new line , feed line.

Во твојот пример место така 2 пати да печати знак, стави ова:

printf ("%d %d",x,y); // Печати децимална вредноста на тоа што се наоѓа во променливите x, y

И ќе видиш дека втората променлвиа y секогаш ќе биде 10.
Ова да знаеш зошто не те прашува за уште еден знак.

Сега што се случува кога читаш знак од тастатура?
Епа кога доаѓа до scanf("%c", &x) во терминал чека ти да куцаш нешто и да притиснеш ентер дека е крај на влезот. Но тоа не значи дека ти ќе внесеш еден знак, можеш и цел ред да пишуваш и на крај да внесеш ентер...и нормално не може цел ред да стави во една променлвиа char што е само 1 byte.
И за да се справи со вакви работи постои input buffer. Тоа ти е привремена меморија што се креира кога чека влез од тебе..што и да внесеш, било колку знаци тоа се пишува прво таму и после вика чекај сеа..scanf бара од мене еден знак..добро еве ти го првиот знак што е внесен...другите уште си стојат во таа меморија и чекаат кога повторно ќе бараш влез од тастатура без да те праша ќе зема од input buffer се додека не се испразни..
Значи ти кога внесуваш пр :
a ( притискаш enter )
Во буфер се чува а,10; ( 10 e тоа за нов ред )..
И scanf функцијата зима знакот "a" става во променлива x и веќе во input buffer имаш : 10.
Следниот пат кога пак сакаш да читаш друг знак scanf прво проверува дали во input buffer има знак што чека ред.....ако има земи знак од таму..во твојот случај ќе биде 10 и ќе се стави во променливата y.

Добро и како да го решиш проблемот ?
Епа место еден знак ќе читаш 2 знаци со тоа што тоа "enter" ќе биде изваден и buffer ќе биде празен.
scanf("%c %c", &x); // болдираното бара знак од buffer (овој случај enter ) но никаде не го запишува..


и така една мала лекција :icon_lol:
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
истa грешка се јавува и со getchar()
а втората опција -да се во исти ред не сакам да ја користам зошто сакам да има код измеѓу. пример - кодот,
Знам дека може да се внесат прво двете букви па да се споредат или слично, но дали има начин воопшто да се направи како што е во кодот подолу.едно внесување код па друго внесување.

Код:
#include <stdio.h>

int main () {

char x,y;

printf("Vnesi 1-va bukva");

x=getchar();

printf("Vnesi 2-ra bukva");

y=getchar();

if (x=='t' && y=='t')

printf("Tocen odgovor");

else

printf("Netocen odgovor");



return 0;


}
--- надополнето: 25 октомври 2012 во 21:45 ---
Mr.InF3ction - you are the one :cuc:

Финтата функционира.
Исто така фала за деталното објаснување што се случува при вчитување.
 
Член од
4 септември 2010
Мислења
1.002
Поени од реакции
582
истa грешка се јавува и со getchar()
а втората опција -да се во исти ред не сакам да ја користам зошто сакам да има код измеѓу. пример - кодот,
Знам дека може да се внесат прво двете букви па да се споредат или слично, но дали има начин воопшто да се направи како што е во кодот подолу.едно внесување код па друго внесување.

Код:
#include <stdio.h>

int main () {

char x,y;

printf("Vnesi 1-va bukva");

x=getchar();

printf("Vnesi 2-ra bukva");

y=getchar();

if (x=='t' && y=='t')

printf("Tocen odgovor");

else

printf("Netocen odgovor");



return 0;


}
--- надополнето: 25 октомври 2012 во 21:45 ---
Mr.InF3ction - you are the one :cuc:

Финтата функционира.
Исто така фала за деталното објаснување што се случува при вчитување.
A toa getchar taka se kpristi? Ne stoi getchar posledna? Ili vaka e pravilno?
 

Kajgana Shop

На врв Bottom