Jump to content
PirateClub.hu

C program írása


enisz
 Share

Recommended Posts

Hali!

 

Egy kis segítség kéne nekem. Már nagyon régen tanultam programozást (tavaly) :D akkor is meghúztak belőle, pedig érdekel... szal most elővettem megint, és szeretnék írni egy kisebb számoló programot, ami először bekéri a számokat, majd egy műveleti jelet, és kiíratja az egészet. Az eleje meg is van, csak a végén az elágazások nem mennek. Önerőből eddig jutottam: (ja és BorlandC nevezetű programot használom)

 

#include "getnum.c"
   
   main(){
       int a,b,c;
       clrscr();
       printf("Kérem az első számot: ");
       a=getnum();
       printf("Kérem a második számot: ");
       b=getnum();
       printf("\n---------------------------");
       printf("\nAdj meg egy műveleti jelet: ");
       c=getchar();
       printf("\n");
   
                if(c="+") printf("%5d\n+%4d\n-----\n%5d",a,b,a+b);
           else if(c="-") printf("%5d\n-%4d\n-----\n%5d",a,b,a-b);
           else if(c="*") printf("%5d\n*%4d\n-----\n%5d",a,b,a*b);
           else if(c="/") printf("%5d\n/%4d\n-----\n%5d",a,b,a/b);
           else printf("Nem műveleti jelet adtál meg!");
   
       getch();
       }

 

Az elején van egy hivatkozás a getnum.c-re, ezt még a programozás tanáromtól kaptam tavaly. Ha kell, ezt is be tudom majd linkelni.

 

Na most ennek a programnak valahogy így kéne kinézni:

plusz_www.kepfeltoltes.hu_.jpg

 

Eddig stimmel is a dolog, és ezt szerettem volna. De ha mondjuk kivonást szeretnék, akkor is az összeadás ág fut le:

minusz_www.kepfeltoltes.hu_.jpg

 

Vagy ha mondjuk egy érvénytelen karaktert adok be, mondjuk egy sima "a" betűt, akkor azt kéne visszaadnia, hogy "Nem műveleti jelet adtál meg!". Ehelyett lefuttatja az összeadás ágat:

a_www.kepfeltoltes.hu_.jpg

 

Tudom, hogy elég láma kérdés, de tényleg nagyon régen tanultam már, anyagom sincs hozzá. Én úgy érzem, hogy valahol az if() függvényt rontottam el, csak nem tudom, hogy hol :S

 

Ha valaki tud segíteni egy kicsit, azt nagyon megköszönném :)

Link to comment
Share on other sites

  • 2 weeks later...

Heeeelóóóóóóóóó!

Én igy csinálnám, mert ezzel nem látom mi lehet a baj :) :

switch( c )
{
case '+':
    {
    printf("%d%c%d=%d\n",a,c,b,a+b );break;
    }
case '-':
    {
    printf("%d%c%d=%d\n",a,c,b,a-b );break;
    }
case '*':
    {
    printf("%d%c%d=%d\n",a,c,b,a*b );break;
    }
case '/':
    {
    printf("%d%c%d=%d\n",a,c,b,a/b );break;
    }
default:printf("Nem megfelelő műveleti jel\n");
}

Link to comment
Share on other sites

üdv!

 

először is köszi :)

 

másodszor feltöltöttem borlandc-t rapidshare-re (~2,7 mega)

 

Törölve

rarpass nincs. a getnum.c benne van a gyökér könyvtárban

és nekünk a tanár azt mondta, hogy ez csak a c:\borlandc mappában műxik, mert hogy úgy van konfigurálva

Link to comment
Share on other sites

if(c="+") printf("%5d\n+%4d\n-----\n%5d",a,b,a+b);
           else if(c="-") printf("%5d\n-%4d\n-----\n%5d",a,b,a-b);
           else if(c="*") printf("%5d\n*%4d\n-----\n%5d",a,b,a*b);
           else if(c="/") printf("%5d\n/%4d\n-----\n%5d",a,b,a/b);
           else printf("Nem műveleti jelet adtál meg!");

 

Én is régen nyomtam már C-t, de nem ugy kell hogy

if (c=="+") ...

?

 

tehát a "=" jeleket sztem duplázd meg mert igy értéket adsz, "==" pedig vizsgálja hogy egyenlő-e (bár nem tudom hogy a Borland C hogy csinálja, de elvileg szabvány lenne sztem)..

Link to comment
Share on other sites

Lenne nekem is egy további észrevételem, a c-ben a " jel a stringet jelöli, a getchar függvénnyel pedig karaktert olvastok, a karaktereket viszont a szimpla aposztrof jellel kell írni, (legalábbis ez a szabvány). Csatlakozom az előttem szólóhoz az = jeleket illetően, az összehasonlításra a == használt, tehát helyesen:

if ( c == '+' ) ...

Link to comment
Share on other sites

  • 2 weeks later...

és mivan, ha a paraszt 12548 helyett azt írja be egy számnak, hogy "asdf"? :)

Vagy mi történik, ha osztásnál 0-val akar osztani?

+ az is kérdés, hogy te csak egész osztást akarsz végezni? A te programod szerint ugyanis 3/2 = 1

 

vmelyest ésszerűbb lenne így csinálni:

#include <stdio.h>

int main( void )
{
    int a, b;
    char muv;
    
    printf( "A kifejezes (pl: 1+2): " );
    
    if( scanf( "%d%c%d", &a, &muv, &b ) != 3 )
    {
        puts( "Hibas adat!" );
        return -1;
    }   
    
    switch( muv )
    {
        case '+' : 
            printf( "%d + %d = %d\n", a, b, a + b ); 
            break;
        case '-' : 
            printf( "%d - %d = %d\n", a, b, a - b );
            break;
        case '*' : 
            printf( "%d * %d = %d\n", a, b, a * b );
            break;
        case '/' : 
            b != 0 ? printf( "%d / %d = %.4f\n", a, b, (double)a / (double)b ) : puts( "ERROR!" );
            break;
        default : 
            puts( "Ismeretlen muvelet!" );
    }
    
    return 0;    
}

 

A következő szint: (nem teljesen zárójelezett) infix kifejezés kiértékelése :)

+ windows alatt lassan ideje lenne már elfelejteni a Borland-ot!

Link to comment
Share on other sites

őszintén szólva, nekem még ennyire nem megy a programozás... egy sima if függvényt sem tudok hiba nélkül megírni :huh: a programozás nálunk csak második féléves tantárgy, és ezt is magánszorgalomból próbálgattam... :unsure:

Link to comment
Share on other sites

Gondolom erre van neki a "getnum" függvénye!

getchar()-t olvastam... Habár az implementációt még ígysem látom :)

 

őszintén szólva, nekem még ennyire nem megy a programozás... egy sima if függvényt sem tudok hiba nélkül megírni :huh: a programozás nálunk csak második féléves tantárgy, és ezt is magánszorgalomból próbálgattam... :unsure:

ezzel csak annyi a probléma, hogy az if-else nem függvény, hanem egy kétirányú elágaztató utasítás (feltételes utasítás)

Link to comment
Share on other sites

azzal nincsen semmi gond, csak kérdéses h milyen platform alatt! DOS alatt pl. tökéletes a borland c és a turbo c! (elvégre mindkettő borland termék.)

 

A DevCpp azonban tényleg egy jól kezelhető IDE a pár száz/ezer/esetleg nagyobb programokhoz!

Link to comment
Share on other sites

  • 10 months later...

Na nekem lenne is egy kérdésem.Szóval a feladat,hogy csinálni kell egy számológépet amely tudja a 4alapműveletet és kilehessen választani "menübő"l ezt a 4alapműveletet.Meg is valósítottam ezt "if-es" módszerrel de amikor beírom a műveleti jelet a program hibát hajt végre és kilép :S

"Swith-es" módszerrel tökéletes viszont :S

 

# include <stdio.h>


int main()
{
    double  a=0, b=0, c=0;
    char jel;
    printf("Valassz: + | - | * | / : ");
    scanf("%c",jel);
    printf("Elso szam erteke: ");
    scanf("%lf",&a);
    printf("Masodik szam erteke: ");
    scanf("%lf",&b);
    
    
             if (jel == '+')
                   {
                   c=a+b;
                  
                   }
                   else
                   if 
                   
                   (jel == '-') 
                   {  
                   c=a-b; 
                   }
                   else
                   if               
                   (jel == '*')
                   { 
                   c=a*b;
                   }
                   else
                   if 
                   (jel == '/')
                   {  
                   c=a/b;
                   }
                   else 
     {
                   printf ("Rossz karaktert adtal meg.\n");
                   }
         printf("\n\nAz eredmeny %lf %c %lf = %lf" ,a,jel,b,c);      
                  
                   
                   
   getch();                                                
    return 0;
        }

 

 

Edit:Na közben rájöttem :D

Ha a scanf után %d -t írok %c helyett akkor jó :mellow:

Edit2: Így jó is lenne csak bármilyen számítást végez el képest kiírni,hogy rossz karaktert adtam meg :S

Bocsi a lámulásért nem rég kezdtük el a programozást.

Módosította Gabi89
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Hozzászólás a témához...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Jelenleg olvassa   0 members

    • No registered users viewing this page.
×
×
  • Create New...