C/C++

Amaterasu

123123113
Член од
17 април 2012
Мислења
1.136
Поени од реакции
1.068
Здраво луѓе, и јас како студент на финки кој прват се среќава со програмирање си имам проблеми со него :)
На пример во задачава :
1. Телекомуникациската компанија IT-Phones располага со продажни центри во кои се
нудат различни услуги за корисниците. На терминалите кои се наоѓаат на влез на
секој продажен центар, корисниците треба да изберат меѓу услугите „Плаќање
сметки“ со внесување на буквата p, или „Дополнителни услуги“ – со внесување на
буквата d. Дополнително, треба да се внесе буквата l ако станува збор за физичко
лице или буквата f ако станува збор за фирма. Да се напише програма во која прво се
внесува буква за избор на услуга (Плаќање сметки или дополнителни услуги), а
потоа се внесува буква за тоа кој ја бара услугата (физичко лице или фирма).
Програмата проверува каков вид на услуга се бара и кој ја бара услугата и во
зависност од тоа се печати следната порака:
• „Шалтер 1“ – ако се бара плаќање на сметки од страна на физичко лице
• „Шалтер 2“ – ако се бара плаќање на сметки од страна на фирма
• „Шалтер 3“ – ако се бараат дополнителни услуги од страна на физичко лице
• „Шалтер 4“ – ако се бараат дополнителни услуги од страна на фирма
Ако не се внесе валидна буква, се печати порака „Невалиден избор“.

Пробав да ја решам вака
PHP:
#include<stdio.h>
int main() {
//p-plakjanje na smetiki
//d-dopolnitelni uslugi
//l-fizicko lice
//f-firma
char bukva1, bukva2;
if((bukva2=getchar())&&(bukva1=getchar()))  {
    if((bukva2=='p')&&(bukva1=='l')) {
    printf("salter 1");    }
    else if ((bukva2=='p')&&(bukva1=='f')) {
      printf("salter 2"); }
      else if ((bukva2=='d')&&(bukva1=='l'))  {
      printf("salter 3");
      }
      else if ((bukva2=='d')&&(bukva1=='f')) {
      printf("salter 4");
      }
}
      else printf("nevaliden izbor");
      return 0; }
Но повторно не ми ги чита карактерите... Пробав и со scanf го добив истиот резултат... Поназад го прочитав објаснувањето на членот за начинот на кој се запишуваат знаци во Ц ама ете уште баш не ми е најјасно :(
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
THE Ghost2 -
x=getchar(); така функционира, ако знае некој друг како поинаку може нека пиши.

Amaterasu - еве решение на задачата со scanf , додека со getchar() , не знам како би се решила задачата.

ако знае некој како да да се спречи кога ке внесам првично psda - повејке карактери истовремено да не се појавува - Vnesete f (firma) ili l (lice) .
И без тоа задачата е точна, но ако некој знае речение и за тоа нека пише.

PHP:
#include <stdio.h>
 
int main () {
 
char smetki_dopolnitelni,lice_firma,temp_s,temp_lf;
 
printf("Vnesete p (Smetki)  ili d (Drugi Uslugi) \n");
 
scanf("%c%c",&smetki_dopolnitelni);
 
if (smetki_dopolnitelni=='p' || smetki_dopolnitelni=='d')
    {
        printf("Vnesete f (firma) ili l (lice) \n");
        scanf("%c%c",&lice_firma);
 
    }
 
if (lice_firma=='l' || lice_firma=='f')
    {
 
    if (smetki_dopolnitelni=='p'&&lice_firma=='l') printf ("Salter 1");
    if (smetki_dopolnitelni=='p'&&lice_firma=='f') printf ("Salter 2");
    if (smetki_dopolnitelni=='d'&&lice_firma=='l') printf ("Salter 3");
    if (smetki_dopolnitelni=='d'&&lice_firma=='f') printf ("Salter 4");
 
    }
 
 
else if (smetki_dopolnitelni!='p' || smetki_dopolnitelni!='d' || lice_firma!='l' || lice_firma!='f')
 
printf ("Nepravilen Izbor");
 
return 0;
 
}
 

Amaterasu

123123113
Член од
17 април 2012
Мислења
1.136
Поени од реакции
1.068
maxmaster
Оф сум заборавил да ставам %c%c за внесување на знак, затоа не ми вадело точни резултати :D Иначе мислам дека вака би било точно, со scanf, ама ме интересира со getchar дали би можело да се реши?

PHP:
#include<stdio.h>
int main() {
//p-plakjanje na smetiki
//d-dopolnitelni uslugi
//l-fizicko lice
//f-firma
char bukva1, bukva2;
scanf("%c%c", &bukva2);
scanf("%c%c", &bukva1);

    if((bukva2=='p')&&(bukva1=='l')) {
    printf("salter 1");    }
    else if ((bukva2=='p')&&(bukva1=='f')) {
      printf("salter 2"); }
      else if ((bukva2=='d')&&(bukva1=='l'))  {
      printf("salter 3");
      }
      else if ((bukva2=='d')&&(bukva1=='f')) {
      printf("salter 4");
      }

      else printf("nevaliden izbor");
      return 0; }
--- надополнето: 26 октомври 2012 во 13:54 ---
Eдно прашање за задача со "среќните броеви"... Значи ако јас внесам број, да речеме 555 на пример, тогаш таа треба да ми испечати 579 така? Затоа што вика дека се внесува N број, не нагласува дека и тој треба да ги содржи цифрите 7 и 9... Или јас погрешно сум разбрал... :(
 
Член од
10 февруари 2008
Мислења
843
Поени од реакции
444
Eдно прашање за задача со "среќните броеви"... Значи ако јас внесам број, да речеме 555 на пример, тогаш таа треба да ми испечати 579 така? Затоа што вика дека се внесува N број, не нагласува дека и тој треба да ги содржи цифрите 7 и 9... Или јас погрешно сум разбрал... :(
Задачата е дека без разлика кој број да се внесе, треба да го испечатиш најмалиот број кој ги содржи само цифрите 7 и 9. Во твојот случај тоа е бројот 777.
579 не е решение затоа што содржи цифра 5.
Други примери.
1 -> 7
77 -> 77
778 -> 779
1000 -> 7777
 

Amaterasu

123123113
Член од
17 април 2012
Мислења
1.136
Поени од реакции
1.068
genius2
Фала за појаснувањето и фала за другиве решени задачи... Ме интересира во решавањето на 3та задача : Да се напише програма со која се вчитуваат N броеви од тастатура. За секој од броевите се печатат бројот на трансформации после кои оригиналниот број станува едноцифрен, како и новодобиениот трансформиран број. Со секоја трансформација на оригиналниот број, тој се заменува со збирот на неговите цифри.
E сега, дали решението не треба да биде во облик : да се внесе бројот на броеви, па после да имаме scanf кој ќе биде ставен во некој циклус, зошто според твојот начин добиваме решение само за еден број?
 
Член од
10 февруари 2008
Мислења
843
Поени од реакции
444
genius2
Фала за појаснувањето и фала за другиве решени задачи... Ме интересира во решавањето на 3та задача : Да се напише програма со која се вчитуваат N броеви од тастатура. За секој од броевите се печатат бројот на трансформации после кои оригиналниот број станува едноцифрен, како и новодобиениот трансформиран број. Со секоја трансформација на оригиналниот број, тој се заменува со збирот на неговите цифри.
E сега, дали решението не треба да биде во облик : да се внесе бројот на броеви, па после да имаме scanf кој ќе биде ставен во некој циклус, зошто според твојот начин добиваме решение само за еден број?
Да може со for циклус да се направи, со scanf се чита колку броеви ке се внесуваат и после for циклус кој ке оди до тој број ке го пресметува секој број посебно, целиот код за пресметување на еден број ке биде во for циклус.
 
Член од
5 декември 2009
Мислења
439
Поени од реакции
66
Брои линии, зборови и знаци во влез .. некој можи да ми ја подобјасни..

Код:
#include <stdio.h>
#define IN 1
#define OUT 2
main ()
{
int c,nl,nw,nc,state;
 
state=OUT;
nl=nw=nc=0;
while ((c=getchar () ) !='5')
{
++nl;
if (c=='\n')
++nl;
if ((c==' ') || (c== '\n') || (c= '\t'))
state=OUT;
else if (state == OUT) {
state=IN;
++nw;
}
}
printf("%d\t%d\t%d\n",nl,nw,nc);
}
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Брои линии, зборови и знаци во влез .. некој можи да ми ја подобјасни..

Код:
#include <stdio.h>
#define IN 1
#define OUT 2
main ()
{
    int c,nl,nw,nc,state;
 
    state=OUT;
    nl=nw=nc=0;
    while ((c=getchar () ) !='5')
    {
        ++nl;
        if (c == '\n')
            ++nl;
        if ((c==' ') || (c== '\n') || (c= '\t'))
            state = OUT;
        else if (state == OUT)
        {
            state = IN;
            ++nw;
        }
}
printf("%d\t%d\t%d\n",nl,nw,nc);
}
Како прво, чита секакви знаци дури не се внесе 5. Иначе пред main функцијата ти фали int, и втората проверка иф проверка if ((c==' ') || (c== '\n') || (c= '\t')), на крај (c= '\t') треба да е (c== '\t'), тоа прави огромни проблеми.

-На секое внесување на знак различен од 5, се влекува од ново во while-от и се накачува вредноста на nl која на почеток е 0, значи би требало nl да е бројот на знаците, ама па долу има уште еден услов, ако внесениот знак е знак за ENTER('\n'), вредноста се накачува плус уште еднаш (кога имаш внесено ЕНТЕР, инкрементираш 2 пати). Можеби тука треба да се инкрементира друга променлива за со тоа да ги броиме новите редови (nc не е пипната никаде во кодот, ваљда треба она).
-Понатака втората проверка, се гледа дали внесениот знак е знак за изместување, и ако е се влегува во фаза OUT, која би требало да значи дека сме надвор од збор и се враќаме во while-от. Понатака, на следниот циклус, ако знакот не е празно место и фазата(state) е OUT, го накачуваш nw, со што броиш број на зборови. Тие работи со IN и со OUT се користат, а ако има неколку празни места едно до друго да, не ги брои повеќе пати, туку ги брои само еднаш, и останатите празни места ги игнорира.

Иначе се што треба да направиш е да ставиш int пред main, да го средиш последниот знак во if ((c==' ') || (c== '\n') || (c= '\t')), и одма во самиот while, безусловното инкрементирање (првото), ++nl, треба да го смениш во ++nc (веројатно тоа би значело new_char) и ќе работи.;)
 

vakemk

vakemk
Член од
18 февруари 2009
Мислења
39
Поени од реакции
3
Дали знае некој каде може да се најдат задачиве на нет што ги учиме на финки (1ва година) по крс, или ги има во учебникот?? 1000% ги има некаде на нет
 
M

Mr.InF3ction

Гостин
vakemk

Готови решенија или само прашањата ?
Ако е за првото барај на друг подфорум или форум тука нема да се постираат готови решенија.
 

vakemk

vakemk
Член од
18 февруари 2009
Мислења
39
Поени од реакции
3
vakemk

Готови решенија или само прашањата ?
Ако е за првото барај на друг подфорум или форум тука нема да се постираат готови решенија.
Јас прашав само за задачите, ваљда ги вадат од некаде и за колоквиум и за испит, ваљда не ги измислуваат...
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
vakemk - добра идеја , само да се најде одговорот на твоето прашање малце потешко. ако најдеш нешто кажувај со време пред колоквиум :)
Јас ја подржувам идејата да се научи па со научено да се оди на колоквиум но некогаш немаш баш доволно време за ги решиш задашите на колоквиум иако знаеш.
Да не го споменувам фактот дека тастатурите се кинески и пола сат ќе потрошиш да ги најдеш само симболите на тастатура.
 
T

TheThinker

Гостин
Дали може некој да ми ја објасни употребата на flag- ови во програма? Пр. имам програма за собирање на четирицифрени броеви кои го задоволуваат условот првата цифра да е збир од сите останати (пр. 4022, 4=0+2+2)која треба резултатот да ми го прикаже на екран во формат 1001 + 1010... = сумата. Кога ја пишувам програмата редовно едно плусче ми е вишок.
 

Kajgana Shop

На врв Bottom