Seštevanje ulomkov
Napiši metodo, ki sprejme štiri pozitivna cela števila $x1$, $y1$, $x2$, $y2$ , ki tvorijo ulomka:
$\frac{x1}{y1}$ in $\frac{x2}{y2}$.
Metoda naj kot rezultat vrne niz, v katerem sta zapisani števili $a$ in $b$ ločeni z znakom "/",
kjer je $\frac{a}{b} = \frac{x1}{y1} + \frac{x2}{y2}$ v okrajšani obliki.
Komentar:
V primeru, da je ulomek večji od 1 (števec > imenovalec), bi lahko ulomek
še spremenili v celi del in ulomek s števcem manjšim od imenovalca.
Namig
Dva ulomka seštejemo tako, da ju razširimo na skupni imenovalec, potem števca seštejemo, imenovalca pa prepišemo.
Rešitev (Java)
import javax.swing.JOptionPane;
public class SestevanjeUlomkov {
public static void main(String[] args) {
//preberemo podatke
String vhod = JOptionPane.showInputDialog("Vnesi stevec prvega ulomka.");
int x1 = Integer.parseInt(vhod);
vhod = JOptionPane.showInputDialog("Vnesi imenovalec prvega ulomka.");
int y1 = Integer.parseInt(vhod);
vhod = JOptionPane.showInputDialog("Vnesi stevec drugega ulomka.");
int x2 = Integer.parseInt(vhod);
vhod = JOptionPane.showInputDialog("Vnesi imenovalec drugega ulomka.");
int y2 = Integer.parseInt(vhod);
//uporabimo metodo in izpisemo rezultat
String vsota = vsotaUlomkov(x1,y1,x2,y2);
System.out.println("Vsota ulomkov " + x1 + "/" + y1 + " in " + x2 + "/" + y2 + " je " + vsota + ".");
}
public static String vsotaUlomkov(int x1, int y1, int x2, int y2) {
//sestejemo ulomka
int stevec = x1*y2 + x2*y1;
int imenovalec = y1*y2;
//ulomek okrajsamo
int gcd = najvecjiSkupniDelitelj(stevec, imenovalec);
stevec /= gcd;
imenovalec /= gcd;
String rezultat = stevec + "/" + imenovalec;
return rezultat;
}
public static int najvecjiSkupniDelitelj(int x, int y) {
int m = Math.min(x, y);
//pregledamo vsa stevila, ki pridejo v upostev za delitelje
for (int i = m; i > 1; --i) {
if ((x % i == 0) && (y % i == 0)) return i;
}
return 1;
}
}
Rešitev (C#)
using System;
using System.Collections.Generic;
using System.Text;
namespace SestevanjeUlomkov {
class SestevanjeUlomkov {
static void Main(string[] args) {
//preberemo podatke
Console.Write("Vnesi stevec prvega ulomka: ");
int x1 = Int32.Parse(Console.ReadLine());
Console.Write("Vnesi imenovalec prvega ulomka: ");
int y1 = Int32.Parse(Console.ReadLine());
Console.Write("Vnesi stevec drugega ulomka: ");
int x2 = Int32.Parse(Console.ReadLine());
Console.Write("Vnesi imenovalec drugega ulomka: ");
int y2 = Int32.Parse(Console.ReadLine());
//uporabimo metodo in izpisemo rezultat
String vsota = vsotaUlomkov(x1, y1, x2, y2);
Console.WriteLine("Vsota ulomkov " + x1 + "/" + y1 + " in " + x2 + "/" + y2 + " je " + vsota + ".");
Console.ReadKey();
}
public static String vsotaUlomkov(int x1, int y1, int x2, int y2) {
//sestejemo ulomka
int stevec = x1 * y2 + x2 * y1;
int imenovalec = y1 * y2;
//ulomek okrajsamo
int gcd = najvecjiSkupniDelitelj(stevec, imenovalec);
stevec /= gcd;
imenovalec /= gcd;
String rezultat = stevec + "/" + imenovalec;
return rezultat;
}
public static int najvecjiSkupniDelitelj(int x, int y) {
int m = Math.Min(x, y);
//pregledamo vsa stevila, ki pridejo v upostev za delitelje
for (int i = m; i > 1; --i) {
if ((x % i == 0) && (y % i == 0)) return i;
}
return 1;
}
}
}
Rešitev (Python)
#!C:/Python30/python
#-*-encoding: utf-8 -*-
# -*- coding: latin-1 -*-
'''
Created on 26.6.2009
@author: fajdigap
'''
def najvecjiSkupniDelitelj(x, y):
m = min(x, y)
#pregledamo vsa stevila, ki pridejo v upostev za delitelje
for i in range(m, 1, -1):
if (x % i == 0) and (y % i == 0):
return i
return 1
def vsotaUlomkov(x1, y1, x2, y2):
#sestejemo ulomka
stevec = x1 * y2 + x2 * y1
imenovalec = y1 * y2
#ulomek okrajsamo
gcd = najvecjiSkupniDelitelj(stevec, imenovalec)
stevec = stevec // gcd
imenovalec = imenovalec // gcd
rezultat = (stevec, imenovalec) # rezultat je par
return rezultat
#preberemo podatke
x1 = int(input("Vnesi stevec prvega ulomka."))
y1 = int(input("Vnesi imenovalec prvega ulomka."))
x2 = int(input("Vnesi stevec drugega ulomka."))
y2 = int(input("Vnesi imenovalec drugega ulomka."))
#uporabimo metodo in izpisemo rezultat
vsota = vsotaUlomkov(x1, y1, x2, y2)
print ("Vsota ulomkov", x1, "/", y1, "in", x2, "/", y2, " je ", vsota[0], "/", vsota[1], ".")