1. Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.
    Сокриј

Помош околу C++

Дискусија во форумот 'C // C++' започната од bruteforce, 31 Мај 2010.

  1. bruteforce

    bruteforce
    Intern

    153
    5
    12 Април 2010
    Здраво.Имам едно прашање во врска со C++. Значи вака. Се работи за switch().
    switch() ја имам сватено вака:
    Имаме променлива на пример "a", претходно декларирана како int (нели мора да биде интегер)
    Со switch() ја испитуваме нејзината содржина:
    switch(a)
    {
    case 1:
    // ако во "а" се наоѓа бројот 1 тогаш се вршат овие наредби.
    break;
    case 2:
    // ако во "a" се наоѓа бројот 2 тогаш се вршат овие наредби.
    break;
    итн.

    Проблемот е, што ако "a" ја декларирам како char или string и сакам да испитам дали во неа се наоѓа на пример буквата m?
    Овде ми јавува грешка, нели мора променливата да биде интегер..
    Е сега или ова може да се реши со помош на switch() некако, или пак мора со if да се оди или пак јас не сум ја разбрал добро switch()..
    Help??

    Однапред благодарам на помошта.
     
  2. goodboy

    goodboy
    Intern

    849
    21
    12 Јануари 2008
    Ако ти е само за една буква, тогаш користи if циклус со споредба на таа буква.
     
  3. ChemicalAngel

    ChemicalAngel
    Gaining Experience

    788
    205
    24 ноември 2008
    За char можеш да искористиш ASCII кодот на буквата на пример, за 'A' е 45 или така нешто, е сега како од char ќе претвориш во ascii код тоа побарај преку google. А за string треба да направиш hash функција која ќе ти го мапира stringot во некој број na пример, 'oogle' во 5 или нешто слично тоа ти одлучуваш како ќе биде hash функцијата.
     
  4. bruteforce

    bruteforce
    Intern

    153
    5
    12 Април 2010
    Не ми е за една буква, на пример сакам да направам ако во "а" се наоѓа буквата m, тогаш да извршува нешто, ако пак се наоѓа буквата "c" на пример, да извршува друго итн. Значи дали може тоа со switch() да се изведе или мора да се употреби if циклус??


    btw: ChemichalAngel не ти е лоша идејата за тоа со char, но на гугл не најдов ништо што можам како почетник да го разберам, затоа ќе ти бидам благодарен ако ми покажеш ако не ти е проблем и ако знаеш како точно да се изведе тоа, а за string не те разбрав добро..??
     
  5. DekoRoker

    DekoRoker
    Gaining Experience

    625
    53
    12 Септември 2009
    Машко
    Студент ФИНКИ
    Функцијата char *strchr(char *niza, char bukva) го наоѓа првото појавување на некоја буква во низа. Ако најде тогаш враќа покажувач кон таа буква, а ако не најде тогаш враќа NULL. Во твојот случај за char би било

    Код:
    char a; //ova ako e bukva
    switch(a){
          case 'm':
              operacii;
          case 'M':
              operacii;
    }
    
    тоа беше ако се работи за буква. А ако се работи за буква од некоја низа тогаш би идело вака:

    Код:
    char *p;//ova ke bide pokazuvac kon bukvata sto ke bide barana
    char a[]="Ova e nizata za test. ke ja barame bukvata M."; //ova ti e niza za koja ke barame dali ima nekoja bukva
    p = strchr(a, 'M');//ke ja najde na kraj, pretposledno mesto
    switch(*p){
         case 'M':
            operacii;
         case NULL:
            operacii koga nema da najde nisto;
    }
    
    Горе доле ова е тоа што го бараш. Ако имаш букви не треба да ги наоѓаш ASCII кодовите затоа што switch сам си ги гледа. switch се користи за споредба на променливата a што ќе ја додадеш со костантите во него, ако е int тогаш си ги споредува, а ако е char тогаш си го зема ASCII кодот..
    а ако сакаш да го испечатиш ASCII кодот на некој знак, тогаш искористи го следното:
    Код:
    char a='m';  printf("%d", a);
    или да ја доделиш во некоја променлива:
    Код:
    int ascii; char a='m';  ascii=a;
    каде што во ascii ќе се смести ASCII кодот на знакот сместен во а.
     
  6. ChemicalAngel

    ChemicalAngel
    Gaining Experience

    788
    205
    24 ноември 2008
  7. bruteforce

    bruteforce
    Intern

    153
    5
    12 Април 2010
    DekoRoker токму она што го барав. Буквата требало да биде во единечни наводници( case 'm' ) а не како за број(case 1) без наводници.А што на пример ако сакам да биде збор а не буква? Треба променливата да ја декларирам како стринг и текстот пак да го ставам во наводници, така?

    btw: ChemichalAngel, искрено имам 13 години, но со голема желба за програмирање уште од мал(инаку самоук сум/бев, од книги од нет и така). Имам претходни знаења од VB.6 затоа не ми е никаков проблем да ги сватам работите во C++ но тешко ми оди пишувањево како што гледаш, а во VB знаеш не е толку строго како во C++...
     
  8. DekoRoker

    DekoRoker
    Gaining Experience

    625
    53
    12 Септември 2009
    Машко
    Студент ФИНКИ
    ако имаш цела низа тогаш не можеш да користиш switch мораш со if. Финкција за споредување на два стринга е функцијата int strcmp(char *, char *) каде што враќа 0 ако двете низи се исти, -1 ако првата е помала и 1 ако првата е поголема. Тоа помала поголема не ти е битно бидејќи во споредување на низи нема логика тоа, ако сакаш да видиш која е подолга во знаци со функцијата int strlen(char *) можеш да ја земеш должината на низата и после да ги споредуваш. Тебе ти е битно дали ќе врати 0 или не. Eве да кажеме вака можеш: имаме 2 низи x и y.

    Код:
    char x[] = "abc";
    char y[] = "abc";
    if(!strcmp(x,y)){  //ili mozes da pises if(strcmp(x,y)==0)
        operacii ako se isti; //ova sega ke bide izvrseno zatoa sto nizite se isti.
    }
    else{
       operacii ako ne se isti;
    }
    
    
    Примери за што ќе врати функцијата strcmp():

    Код:
    char x[]="abc", y[]="abd";
    strcmp(x,y) ke vrati -1;
    
    char x[]="abc", y[]="aba";
    strcmp(x,y) ke vrati 1;
    
    char x[]="abc", y[]="abc";
    strcmp(x,y) ke vrati 0;
    
    Нели switch работи на принцип на споредба на една или повеќе константи. Кодот што ти го запишав најгоре ќе работи само ако x и y се исти.. Ако имаш повеќе контролни низи тогаш можеш вака да запишеш:

    Код:
    char x[] //niza koja sto ti ja definiras
    
    if(strcmp(x,"kontrolna 1")==0){
        operacii ako se isti nizite x i "kontrolna 1"; raboti da kazeme ako e ispolnet prviot case od switch 
    }
    else if(strcmp(x,"kontrolna 2")==0){
         operacii ako se isti nizite x i "kontrolna 2"; raboti da kazeme ako e ispolnet vtoriot case od switch 
    }
    .....
    else if(strcmp(x, "kontrolna n")==0){
       operacii ako se isti nizite x i "kontrolna n"; raboti da kazeme ako e ispolnet n-tiot case od switch 
    }
    else{
        operacii ako nisto ne se sovpagja. Ova e isto kako default: delot vo switch. Ova i ne mora da odi tuka.
    }
    
    Switch всушност е замена за ова погоре што го пишав, ама тој работи само со знаци или цели броеви. Со низи од знаци или други броеви не работи. Се надевам дека помогнав. Со среќа во програмирањето.
     
  9. bruteforce

    bruteforce
    Intern

    153
    5
    12 Април 2010
    Благодарам многу на помошта Деко.Двајцата имате реп+ од мене:bravo:
     
  10. DekoRoker

    DekoRoker
    Gaining Experience

    625
    53
    12 Септември 2009
    Машко
    Студент ФИНКИ
    Повели и друг пат, за тоа сме тука...
     
  11. cucibuci

    cucibuci
    Intern

    1
    0
    14 Февруари 2012
    Машко
    ми треба помош да ми ја напишете програмава ако може со switch наредба се расправам =)
    програма со која ќе се определи оценка за уќеник според освоени бодови а скалата е
    1-50=1
    51-65=2
    66-75=3
    76-90=4
    91-100=5
     
Слични теми
  1. Niki
    Одговори:
    5
    Прегледи:
    1,565
  2. Dr.XaYC
    Одговори:
    3
    Прегледи:
    945
  3. UnderMyRules
    Одговори:
    15
    Прегледи:
    2,284
  4. draey
    Одговори:
    0
    Прегледи:
    775
  5. malimali
    Одговори:
    19
    Прегледи:
    1,339
Вчитување...

Сподели

Вчитување...