Witam. Jestem na ostatniej prostej mojego projektu lecz potrzebuję pomocy. Muszę jedynie doprowadzić program do wpisania liczb, dodania i wyświetlenia wyniku. Ktoś mógłby naprowadzić mnie jak to zrobić?
Dla podanego zadania opracować projekt programu uwzględniający podział problemu na podproblemy oraz struktury danych. Projekt przedstawić do oceny. Zakodować program zgodnie z projektem. Uruchomić program i przeprowadzić jego testowanie. Ocenie podlega zarówno program jak i sposób i zakres testowania.
Wolno używać jedynie statycznych typów danych (tablice, struktury itd.).
Zrealizować sumowanie pary co najwyżej 80-cyfrowych liczb całkowitych ze znakiem (nie mogą być one reprezentowane wewnętrznie nawet jako żaden typ liczbowy).
Projekt:
/* 1. Wczytanie liczb
2. Dodawanie liczb
- określenie znaku liczby
- dodawnie liczby tego samego znaku
- dodawnie modułów liczb
- określenie znaku wyniku
- dodawnie liczb różnych znaków
- dodawanie modułów liczb
- porównanie modułów liczb
- określenie znaku wyniku
{
bool dodatnia;
int cyfr [80];
int liczba_cyfr;
}
*/
Program:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct Liczba
{
bool dodatnia; //bool
int cyfry[80]; // pod indeksem 0 jest najbardziej znaczaca cyfra
int liczba_cyfr;
};
int main()
{
bool wczytajLiczbe( struct Liczba *liczba)
{
char s[100];
gets( s );
int index_s = 0;
int index_cyfry = 0;
// pomin biale znaki
while( index_s < strlen(s) && s[index_s] == ' ')
{
index_s ++;
}
// zaakcepuj znak liczby
liczba->dodatnia = true;
if( s[index_s] == '-')
{
liczba->dodatnia = false;
index_s ++;
}
else
if( s[index_s] == '+')
{
index_s ++;
}
// pomoin zera nieznaczace
while( index_s < strlen(s) && s[index_s] == '0')
{
index_s ++;
}
// wczytuj cyfry
while( index_s < strlen(s) && isdigit( s[index_s] ))
{
liczba->cyfry[index_cyfry] = s[ index_s ] - '0';
index_s ++;
index_cyfry++;
}
liczba -> liczba_cyfr = ????
int main()
{
struct Liczba l1, l2, wynik;
wczytajLiczbe( & l1 );
wczytajLiczbe( & l2 );
dodalLiczby(& l1, &l2, & wynik);
wyswietlLiczbe( & wynik);
}
bool dodajModulyLiczb( struct Liczba * l1, struct Liczba * l2, struct Liczba * wynik)
{
int przeniesienie = 0;
int i = 0;
while( i < l1->liczba_cyfr && i < l2->liczba_cyfr)
{
wynik->cyfry[i] = l1->cyfry[i] + l2->cyfry[i] + przeniesienie;
if( wynik->cyfry[i] > 9)
{
przeniesienie = 1;
wynik->cyfry[i] -= 10;
}
else
przeniesienie = 0;
++i;
}
struct Liczba * l;
if( l1->liczba_cyfr > i)
l = l1;
else
l = l2;
while( i < l->liczba_cyfr)
{
wynik->cyfry[i] = l->cyfry[i] + przeniesienie;
if( wynik->cyfry[i] > 9)
{
przeniesienie = 1;
wynik->cyfry[i] -= 10;
}
else
przeniesienie = 0;
++i;
}
}
return 0;
}