C programozás

Kezdőlap Fórumok Programozás C programozás

10 bejegyzés megtekintése - 301-310 / 352
  • Szerző
    Bejegyzés
  • #2016396
    CyrSyS
    Felhasználó

      Szia Zoli!

      Hogy kell lezárni a vizsg végét -al? Ezt nem értem! A hosszát a getline adja! Továbbra is blamába vagyok! Álljon itt egy teljes program ami bizonyítja hogy működik az elején felvetett probléma ellentéte:

      Code:
      #include
      #include
      #include
      #include
      #include
      #include

      #define MAX 100

      int getline(char s[],int lim);
      int egesz(char s[]);

      struct adatok{
        int suly;
        int magassag;
        float BMI;
        int sulycsop;
        };

      int main(void){

        struct adatok M[MAX];
        int ok,vege,i,db;
        char vizsg[4];
        char strseged[10];

        clrscr();
        printf(„ttttBMI számoló program!n”);
        for(i=0;i<=7;i++) printf("----------");       db=vege=0;       do{ /* Testtömeg bekérése */ ok=0; do{     printf("nKérem a testtömeget(kg): ");     i=getline(vizsg,4);     if (i==0) vege=1;     else if (i>3) printf(„nTúl hosszú a megadott érték!n”);
          else if (!egesz(vizsg)) printf(„nA megadott érték nem egész szám!n”);
          else
          {
            M[db].suly=atoi(vizsg);
            if (M[db].suly<20 || M[db].suly>200) printf(„nA megadott tömeg értéknek 20 és 200 között kell lennie!n”);
            else ok=1;
          }

            } while (!ok && !vege);

            if (!vege) {

      /* Magasság bekérése  */

      ok=0;
        do{

          printf(„nKérem a magasságot(cm): „);
          i=getline(vizsg,4);
          if (i==0) printf(„nA magasságot mindenképp megkell adnod!n”);
          else if (i>3) printf(„nTúl hosszú a megadott érték!n”);
          else if (!egesz(vizsg)) printf(„nA megadott érték nem egész szám!n”);
          else
      {
      M[db].magassag=atoi(vizsg);
      if (M[db].magassag<150 || M[db].magassag>250) printf(„nA megadott magasság értéknek 150 és 250 között kell lennien”);
      else ok=1;
      }
            }while (!ok);

            /* BMI érték meghatározása */
            M[db].BMI=M[db].suly/pow(M[db].magassag/100.0,2);
            if (M[db].BMI<18.5) M[db].sulycsop=0;
            else if (M[db].BMI>=18.5 && M[db].BMI<25) M[db].sulycsop=1;
            else if (M[db].BMI>=25 && M[db].BMI<30) M[db].sulycsop=2;
            else
        M[db].sulycsop=3;

            db++;
            }

          }while(!vege);

        clrscr();
      printf("nSorszám testtömeg megasság érték");
      for (i=0;i

      #2016397
      pointux
      Felhasználó

        A szabványos szám vizsg. függvény:

        Code:
        int isdigit (int c);

        nem kell megírni, csak le kell futtatni a karaktereken.

        Pl.: egy egyszerű mutató esetén:

        Code:
        #include                                              

        int isdigitstr (char * str) {
            int i;
            for (i = 0; str [i] != ‘’; i ++)
                if (!isdigit (str [i]))
                    return 0;
            return 1;
        }

        (Csak addig fog futni a ciklus, amíg karaktert talál. Ha mind az, akkor „igaz” értékkel, egyébként „hamis” értékkel tér vissza. Ez csak egy megoldás és C-re, de lehet C++-ra is csinálni.)

        (Az ilyen clrscr-ek, meg csak Borland cuccokon fog menni… abból is talán csak az elavultakon.)

        #2016398
        zoltan22
        Felhasználó
          CyrSyS wrote:
          Hogy kell lezárni a vizsg végét -al? Ezt nem értem! A hosszát a getline adja!
          A getline tudja a hosszat, de az egesze fuggvenyben mar nincs honnan tudjad.
          Peldaul, ha az egesze parameterkent a „43^” karaktereket kapja, akkor honnan tudja, hogy a 3-as vagy a ^ utan kell megallnia?
          A lezaras alatt azt ertettem, hogy egy karakter jelzo a karaketerlanc veget, es ami az utan jon, mar nem erdekes.

          vizsla:
          akkor mar inkabb strtod, atoi 🙂

          #2016399
          pointux
          Felhasználó

            Ja, közben látom már az isdigit-et. (Meg az előjel vizsgálat is benne van.)

            Amúgy tizedes vassző, vagy pont nem kell?
            Na az még egy szép dolog! Akkor jönnek a lokalizációs problémák, hogy most melyik. :)))

            #2016400
            pointux
            Felhasználó
              zoltan22 wrote:
              vizsla:
              akkor mar inkabb strtod, atoi 🙂

              Na, most ezt hogy érted?
              Mert ugye vagy hülyeségeket ad ki, vagy hülyeséget ad ki
              Pl.: 153lk esetén 153-as számot fogja kiadni és nem azt, hogy hibás, ha meg az első a betű, akkor milyen szám lesz belőle?

              #2016401
              CyrSyS
              Felhasználó

                Szia Vizsla!

                Kipróbáltam a te függvényedet is! Nem rossz a BMI-s programomnál szépen működik! De megint röhej mert egy a MÁTRIXOS-nál meg már nem! ezt a MATRIX-os kódot mellékelem ide és jelzem hogy 2 hibát kapok! Az egyik egy warning, méghozzá „Suspicious pointer conversion” és egy Errort hogy type mismatch! Az errort a te fgv-nyednél írja, a warningot pedig a if (!egesz(vizsg))-nél! Na itt a kód itt nem mükszik :S! Kezd már nagyon elegem lenni hogy nemtudom mi a gondja baja! :  

                Code:
                #include
                #include
                #include
                #include
                #include
                #include

                #define MIN 1
                #define MAX 4

                int getline(char s[],int lim);
                int szambe(char text[], int min, int max);
                int egesz(char * []);

                int main(void){

                 char vizsg[4];
                 int i,j,vege,ok;
                 double sor,oszl, szum, atlag, min, max;
                 double matrix[10][10];

                 clrscr();

                 printf(„tttMatrix elemzo program!n”);
                 for(i=0;i<=7;i++) printf("----------");     vege=0;     do{ /*Oszlop bekerese*/  ok=0;       do{    printf("nKerem adja meg a matrix oszlopainak szamat(1-4): ");    i=getline(vizsg,4);    if (i==0) printf("nNem adtal meg semmit az oszloperteknek!n");    else if (!egesz(vizsg)) printf("nA megadott ertek nem egesz szam vagy negativ ertek!n");    else    {      oszl=(double)atoi(vizsg);      if (oszlMAX) printf(„nA megadott erteknek 1 es 4 koze kell esnie!n”);
                     else ok=1;
                   }

                      } while (!ok);

                      if (!vege) {

                        /*Sor bekerese*/

                 ok=0;

                          do{

                           printf(„nKerem adja meg a matrix sorainak szamat(1-4): „);
                   i=getline(vizsg,1);
                   if (i==0) printf(„nA sorok sz m t mindenk‚pp megkell adni!n”);
                   else if (!egesz(vizsg)) printf(„nA megadott ertek nem egesz szam vagy negativ ertek!n”);
                   else
                   {
                     sor=(double)atoi(vizsg);
                     if (sorMAX) printf(„nA megadott erteknek 1 es 4 koze kell esnie!n”);
                     else ok=1;
                   }

                                } while (!ok);

                           }

                      if (!vege) {

                       /*Matrix feltoltese */

                         ok=0;

                          do{
                     for (i=0; imax) max=matrix[i][oszl+1]=matrix[i][j];
                      szum+=matrix[i][j];
                            }
                 matrix[i][oszl+2]=szum/oszl;
                       }

                   for (j=0; jmax) max=matrix[sor+1][j]=matrix[i][j];
                      szum+=matrix[i][j];
                            }
                 matrix[sor+2][j]=szum/sor;
                       }
                       }
                      vege=1;

                     } while (!vege);

                      /*kiiratas*/

                     clrscr();

                 printf(”         |”); for(i=1;i<=oszl;i++) printf("%8d",i); printf("     Min     Max   µtlagn");  printf("---------+"); for(i=1;i<=oszl+3;i++) printf("--------");  printf("n");  for(i=0;imax){
                printf(„A bekert adatnak a [%d-%d] intervallumba kell esnie!n”,min,max);
                printf(text);
                getline(sor, 10);
                szam=atoi(sor);
                }
                return(szam);
                }

                int egesz(char * str) {
                   int i;
                   for (i = 0; str [i] != ‘’; i ++)
                       if (!isdigit (str [i]))
                           return 0;
                   return 1;
                }

                #2016402
                pointux
                Felhasználó
                  CyrSyS wrote:
                  Szia Vizsla!

                  Kipróbáltam a te függvényedet is! Nem rossz a BMI-s programomnál szépen működik! De megint röhej mert egy a MÁTRIXOS-nál meg már nem! ezt a MATRIX-os kódot mellékelem ide és jelzem hogy 2 hibát kapok! Az egyik egy warning, méghozzá „Suspicious pointer conversion” és egy Errort hogy type mismatch! Az errort a te fgv-nyednél írja, a warningot pedig a if (!egesz(vizsg))-nél! Na itt a kód itt nem mükszik :S! Kezd már nagyon elegem lenni hogy nemtudom mi a gondja baja! : 

                  Mindjárt megnézem, de első megközelítésben én a char [], helyett char * kifejezést írnék. Hát nem tudom, hogy okoz-e problémát, itt talán nem, de mondjuk egy

                  Code:
                  char *[x]

                  esetén már ütközhetsz problémába, az biztos.

                  #2016403
                  pointux
                  Felhasználó

                    Ez pl. kapásból nem stimmel:

                    Code:
                    int egesz(char * []);

                    int egesz(char * str) {

                    #2016404
                    zoltan22
                    Felhasználó
                      vizsla wrote:
                      Na, most ezt hogy érted?
                      Mert ugye vagy hülyeségeket ad ki, vagy hülyeséget ad ki
                      Pl.: 153lk esetén 153-as számot fogja kiadni és nem azt, hogy hibás, ha meg az első a betű, akkor milyen szám lesz belőle?

                      Ezt beneztem. Az atoi valoban nem jelez hibat.
                      A strtol-al mar mukodne, ellenorizni kellene, hogy a masodik parameter hova mutat es mennyi az errno, csak az se lenne szebb, mint az eredeti megoldas.

                      #2016405
                      CyrSyS
                      Felhasználó

                        Szia Vizsla!

                        Még nagyobb a gond mint gondoltam!
                        A hibát javítottam a fgv fejben! De továbbra nevetséges problémám van! Jó lenne ha mondjuk tudnád futtatni te is a programot! Előszőr bekér egy oszlop számot! Adj meg neki mondjuk 2-t! nem fogja elfogadni 😀

                      10 bejegyzés megtekintése - 301-310 / 352
                      • Be kell jelentkezni a hozzászóláshoz.