[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
C-ošetrenie nulového menovateľa

Registrovaný: 02.12.06
Prihlásený: 17.11.24
Príspevky: 690
Témy: 35 | 35
Bydlisko: Rimavská So...
NapísalOffline : 04.06.2010 11:03 | C-ošetrenie nulového menovateľa

Kód:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct zlomok{
   int citatel;
   int menovatel;
}fraction;
int gcd(int m, int n) {

  int t, r;
  m=abs(m);
  n=abs(n);
  if(m==0 && n==0){
     return 0;
  }else{
  if (m < n) {
    t = m;
    m = n;
    n = t;
  }
  if(n==0){
     return m;
  }

  r = m % n;

  if (r == 0) {
    return n;
  } else {
    return gcd(n, r);
  }}

}
fraction newfraction(int citatel,int menovatel){
fraction vysledok;
if(menovatel==0){
   citatel=0;
}
if(menovatel<0){
   menovatel= -menovatel;
   citatel= -citatel;
}
if(gcd(citatel,menovatel)!=0){
vysledok.citatel=citatel/gcd(citatel,menovatel);
vysledok.menovatel=menovatel/gcd(citatel,menovatel);

}
else{

}
return vysledok;
}
fraction sucet(fraction a,fraction b){
   fraction vysledok;

   vysledok=newfraction(a.citatel*b.menovatel+a.menovatel*b.citatel,a.menovatel*b.menovatel);
   return vysledok;
}
fraction sucin(fraction a,fraction b){
   fraction vysledok;
   vysledok=newfraction(a.citatel*b.citatel,a.menovatel*b.menovatel);
   return vysledok;
}
void vypis(fraction a){
   if(a.menovatel!=1){
   printf("%d/%d",a.citatel,a.menovatel);}
   else{
      printf("%d",a.citatel);
   }
}
double f(double x){
   return x*x*x*x-x+1;
}
int main(void) {
   fraction a,b;
   a=newfraction(5,2);
   b=newfraction(10,-110);
   vypis(a);
   printf("\n");
   vypis(b);
   printf("\n");
   vypis(sucet(a,b));
   printf("\n");
   vypis(sucin(a,b));
   return EXIT_SUCCESS;
}
ahojte hrám sa kus s Cčkom a neviem za svet prijsť na to ako ošetrím nulového menovateľa aby newfraction vrátilo niečo čo hneď identifikuje chybu,ale aby program nespadol alebo kompilátor nekričal chybu


_________________
Math is the best!
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2
NapísalOffline : 04.06.2010 11:40 | C-ošetrenie nulového menovateľa

odchytavaj exceptions ako v kazdom inom programovacom jazyku :)
http://www.cplusplus.com/doc/tutorial/exceptions/


Offline

Skúsený užívateľ
Skúsený užívateľ
C-ošetrenie nulového menovateľa

Registrovaný: 11.01.09
Prihlásený: 17.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 04.06.2010 12:04 | C-ošetrenie nulového menovateľa

alebo skús upraviť prototyp funkcie z pôvodnej:
Kód:
fraction newfraction(int citatel, int menovatel)

na:
Kód:
int newfraction(int citatel, int menovatel, fraction* res)

Potom v tele tejto funkcie výsledok nevrátiš cez return, ale pomocou pointera res. A v návratovej hodnote funkcie bude buď 1 (všetky operácie sa vykonali správne) alebo 0, ak vznikla chyba (teda aj nula v menovateli). Čiže volanie tejto funkcie z main by vyzeralo takto:
Kód:
fraction a, b;
if ( !newfraction(5, 2, &a) ) {

    // patricne osetrenie v pripade chyby

}


// a ak ti môžem poradiť, trocha formátuj text, je to dosť neprehľadné. Za každým blokom vo funkcii daj nový riadok, za každou funkciou dva nové riadky, za každým vnorením tabulátor. Hneď to bude krajšie vyzerať :)


Offline

Užívateľ
Užívateľ
C-ošetrenie nulového menovateľa

Registrovaný: 02.12.06
Prihlásený: 17.11.24
Príspevky: 690
Témy: 35 | 35
Bydlisko: Rimavská So...
Napísal autor témyOffline : 04.06.2010 13:17 | C-ošetrenie nulového menovateľa

Fico díky funguje to to by ma nenapadlo pri tak jednoduchom programe použiť pointre


_________________
Math is the best!
 [ Príspevkov: 4 ] 


C-ošetrenie nulového menovateľa



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Osetrenie vstupov programu v C

v Assembler, C, C++, Pascal, Java

11

1113

16.12.2007 15:11

sento

V tomto fóre nie sú ďalšie neprečítané témy.

ošetrenie vstupu

v Delphi, Visual Basic

22

670

12.12.2015 21:11

camarovk19

V tomto fóre nie sú ďalšie neprečítané témy.

Osetrenie formulara

v PHP, ASP

2

544

25.01.2010 16:36

Slappy

V tomto fóre nie sú ďalšie neprečítané témy.

Bug/osetrenie

v Správy pre vedenie fóra

5

1173

28.10.2009 19:04

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Ošetrenie/zabezpečenie Registracie?

v PHP, ASP

4

515

04.02.2010 17:00

d0.0b

V tomto fóre nie sú ďalšie neprečítané témy.

Osetrenie ulozenia JAVA

v Assembler, C, C++, Pascal, Java

2

588

25.11.2009 12:43

dEVIANT

V tomto fóre nie sú ďalšie neprečítané témy.

Chemické ošetrenie spojov

v Biosy a ladenie výkonu

4

3786

27.01.2013 12:56

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

jquery - osetrenie trvania animacie

v JavaScript, VBScript, Ajax

4

593

05.06.2009 21:06

chrono

V tomto fóre nie sú ďalšie neprečítané témy.

osetrenie vstupov a DB

v PHP, ASP

8

506

02.11.2012 18:42

DeiForm

V tomto fóre nie sú ďalšie neprečítané témy.

osetrenie vstupov v delphi

v Delphi, Visual Basic

4

935

26.01.2009 18:39

ovvo

V tomto fóre nie sú ďalšie neprečítané témy.

osetrenie korozie v radiatore vodnika

v Chladiče a všetky druhy chladenia

12

795

03.08.2011 13:44

zalgoo

V tomto fóre nie sú ďalšie neprečítané témy.

osetrenie nespravnej hodnoty pri scanf

v Assembler, C, C++, Pascal, Java

5

518

13.11.2011 16:14

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Osetrenie vyjdenie z drahy (turbo pascal)

v Assembler, C, C++, Pascal, Java

11

829

14.12.2008 11:54

Blackshadow

V tomto fóre nie sú ďalšie neprečítané témy.

Ošetrenie kroku späť a znovu vpred

v PHP, ASP

6

510

10.11.2012 10:42

xxx9955

V tomto fóre nie sú ďalšie neprečítané témy.

Osetrenie vstupu pre dve slova a viac

v PHP, ASP

3

510

13.05.2013 19:12

BX

V tomto fóre nie sú ďalšie neprečítané témy.

ošetrenie vloženeho php kodu od kohokoľvek pred zneužitím

v PHP, ASP

10

686

11.04.2013 20:19

Wicky



© 2005 - 2024 PCforum, edited by JanoF