background image

 

 

Moduły w programowaniu

Marek Deutsch
wat-wdp@wp.pl

background image

 

 

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

background image

 

 

wyn  wyn + l_bin[i] * 

2

MaxL-i-1

funkcja bin2int 

l_bin [ ] 

    

wyn    0

 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);
  }
}

background image

 

 

l_bin    i      pom 

mod 2
pom 
  pom  div  2

procedura 

 

int2bin
l_int  

l_bin     

pom 

 

l_int

 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;
  }
}

background image

 

 

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

background image

 

 

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

background image

 

 

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

background image

 

 

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

background image

 

 

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);
  }
}

background image

 

 

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);
}

background image

 

 

/* 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");
}

background image

 

 

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


Document Outline