Moduły w programowaniu
Marek Deutsch
wat-wdp@wp.pl
const MaxL = 8;
typedef int TLBin[MaxL];
/* bin_def.h */
#if !defined(__bin_def_H)
#define __bin_def_H
const MaxL = 8;
typedef int TLBin[MaxL];
#endif /* __bin_def_H */
/*
Definicje:
- maksymalnej ilosci cyfr liczby binarnej
- typu danych TLBin dla liczb binarnych
*/
Definicja modułu – plik nagłówkowy
wyn wyn + l_bin[i] *
2
MaxL-i-1
funkcja bin2int
l_bin [ ]
wyn 0
i 0...MaxL-1
STOP
bin2int
wyn
1)
4)
2)
3)
void bin2int(TLBin l_bin, int *l_int)
{
int i;
*l_int = 0;
for (i = 0; i < MaxL; i = i+1)
{
*l_int = *l_int +
l_bin[i] * pow(2,MaxL-i-1);
}
}
l_bin i pom
mod 2
pom pom div 2
procedura
int2bin
l_int
l_bin
pom
l_int
i MaxL-1 ...0
STO
P
1)
2)
3)
4)
void int2bin(int l_int, TLBin l_bin)
{
int pom, i ;
pom = l_int;
for (i = MaxL-1; i >= 0; i = i-1)
{
l_bin[i] = pom%2;
pom = pom/2;
}
}
void int2bin(int l_int, TLBin l_bin);
void bin2int(TLBin l_bin, int *l_int);
/* bin_int.h */
#if !defined(__bin_int_H)
#define __bin_int_H
#include "bin_def.h"
void int2bin(int l_int, TLBin l_bin);
void bin2int(TLBin l_bin, int *l_int);
#endif /* __bin_int_H */
/*
Definicje:
- operacji konwersji int -> TLBin
- operacji konwersji TLBin -> int
*/
Definicja modułu – plik nagłówkowy
void bin2int(TLBin l_bin, int *l_int)
{
int i;
*l_int = 0;
for (i = 0; i < MaxL; i = i+1) {
*l_int = *l_int + l_bin[i] * pow(2,MaxL-i-1);
}
}
void int2bin(int l_int, TLBin l_bin)
{
int pom, i ;
pom = l_int;
for (i = MaxL-1; i >= 0; i = i-1) {
l_bin[i] = pom%2;
pom = pom/2;
}
}
/* bin_int.c */
#include <math.h>
#include "bin_def.h"
#include "bin_int.h"
void int2bin(int l_int, TLBin l_bin)
{
int pom, i ;
pom = l_int;
for (i = MaxL-1; i >= 0; i = i-1) {
l_bin[i] = pom%2;
pom = pom/2;
}
}
void bin2int(TLBin l_bin, int *l_int)
{
int i;
*l_int = 0;
for (i = 0; i < MaxL; i = i+1) {
*l_int = *l_int + l_bin[i] * pow(2,MaxL-i-1);
}
}
Implementacja modułu
void printf_bin(TLBin l_bin);
int scanf_bin(TLBin l_bin);
/* bin_io.h */
#if !defined(__bin_io_H)
#define __bin_io_H
#include "bin_def.h"
void printf_bin(TLBin l_bin);
int scanf_bin(TLBin l_bin);
#endif /* __bin_io_H */
/*
Definicje:
- operacji wypisanie danej typu TLBin
- operacji wczytania danej typu TLBin
*/
Definicja modułu – plik nagłówkowy
int scanf_bin(TLBin l_bin)
{
int i;
for(i = 0 ; i < MaxL ; i = i+1) {
scanf("%1i",&l_bin[i]);
if(!((l_bin[i]==0) || (l_bin[i]==1))) {
return(0);
}
}
return(1);
}
void printf_bin(TLBin l_bin)
{
int i;
for(i = 0; i < MaxL; i = i+1) {
printf("%1i",l_bin[i]);
}
}
/* bin_io.c */
#include <stdio.h>
#include "bin_def.h"
#include "bin_io.h"
void printf_bin(TLBin l_bin)
{
int i;
for(i = 0; i < MaxL; i = i+1) {
printf("%1i",l_bin[i]);
}
}
int scanf_bin(TLBin l_bin)
{
int i;
for(i = 0 ; i < MaxL ; i = i+1) {
scanf("%1i",&l_bin[i]);
if(!((l_bin[i]==0) || (l_bin[i]==1))) {
return(0);
}
}
return(1);
}
Implementacja modułu
Moduł konwersji
/* bin_int.h */
#if !defined(__bin_int_H)
#define __bin_int_H
#include "bin_def.h"
void int2bin(int l_int, TLBin l_bin);
void bin2int(TLBin l_bin, int *l_int);
#endif /* __bin_int_H */
/*
Definicje:
- operacji konwersji int -> TLBin
- operacji konwersji TLBin -> int
*/
/* bin_int.c */
#include <math.h>
#include "bin_def.h"
#include "bin_int.h"
void int2bin(int l_int, TLBin l_bin)
{
int pom, i ;
pom = l_int;
for (i = MaxL-1; i >= 0; i = i-1) {
l_bin[i] = pom%2;
pom = pom/2;
}
}
void bin2int(TLBin l_bin, int *l_int)
{
int i;
*l_int = 0;
for (i = 0; i < MaxL; i = i+1) {
*l_int = *l_int +
l_bin[i] * pow(2,MaxL-i-1);
}
}
Moduł wej / wyj
/* bin_io.h */
#if !defined(__bin_io_H)
#define __bin_io_H
#include "bin_def.h"
void printf_bin(TLBin l_bin);
int scanf_bin(TLBin l_bin);
#endif /* __bin_io_H */
/*
Definicje:
- operacji wypisanie danej typu TLBin
- operacji wczytania danej typu TLBin
*/
/* bin_io.c */
#include <stdio.h>
#include "bin_def.h"
#include "bin_io.h"
void printf_bin(TLBin l_bin)
{
int i;
for(i = 0; i < MaxL; i = i+1) {
printf("%1i",l_bin[i]);
}
}
int scanf_bin(TLBin l_bin)
{
int i;
for(i = 0 ; i < MaxL ; i = i+1) {
scanf("%1i",&l_bin[i]);
if(!((l_bin[i]==0) || (l_bin[i]==1))) {
return(0);
}
}
return(1);
}
/* bin_test.c */
#include <stdio.h>
#include "bin_def.h"
#include "bin_int.h"
#include "bin_io.h"
void main(void)
{
int dziesietna;
TLBin binarna;
printf ("\nPodaj liczbe dziesietna");
scanf("%i",&dziesietna);
int2bin(dziesietna, binarna);
printf("\n %i binarna=", dziesietna); printf_bin(binarna);
bin2int(binarna,&dziesietna);
printf(" i dziesietnie=%i", dziesietna);
...
printf("Podaj osmiopozycyjna liczbe binarna");
if(scanf_bin(binarna)) {
bin2int(binarna,&dziesietna);
printf("\n dziesietnie=%i",dziesietna);
int2bin(dziesietna,binarna);
printf("binarnie =");
printf_bin(binarna);
}
else
printf("Blad w podanej liczbie");
}
bin_def.h
const MaxL = 8;
typedef int TLBin[MaxL];
bin_io.h
bin_io.c
void printf_bin(TLBin l_bin);
int scanf_bin(TLBin l_bin);
bin_int.h
bin_int.c
void int2bin(int l_int,
TLBin l_bin);
void bin2int(TLBin l_bin,
int *l_int);
stdio.h
printf
scanf
bin_test.c
math.h
pow