Gå til innhold

Er det en lettere måte og skrive dette?


Anbefalte innlegg

Starta og programer for første gang i går, har vel holdt på en fem timer tid.

 

Lurte på om det er noen lettere måte og skrive dette på. Ble veldig mye iffer og setninger og slikt. Er det slik det er, eller lærer jeg mer forkortings metoder senere?

 

 

//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int post;
int vekt;

printf("Tast in nvekta paa brevet i hele gram \n");
printf(":");
scanf("%d", &vekt);

printf("\n\n");

printf("Velg type brev du skal sende\n");
printf("Tast 1 for A-post\n");
printf("Tast 2 for B-post\n");
printf(":");
scanf("%d", &post);
printf("\n\n\n");

{
   if (post==1)
   {
     if (vekt<20)
       printf("Du maa betale 4.20kr for og sende %d grams brev med A-post",vekt);
     if ((vekt>20) && (vekt<50))
       printf("Du maa betale 6.30kr for og sende %d grams brev med A-post",vekt);
     if ((vekt>50) && (vekt<100))
       printf("Du maa betale 8.00kr for og sende %d grams brev med A-post",vekt);
     if ((vekt>100) && (vekt<250))
       printf("Du maa betale 15.00kr for og sende %d grams brev med A-post",vekt);
     if ((vekt>250) && (vekt<500))
       printf("Du maa betale 26.50kr for og sende %d grams brev med A-post",vekt);
     if ((vekt>500) && (vekt<1000))
       printf("Du maa betale 42.00kr for og sende %d grams brev med A-post",vekt);
    }

   if (post==2)
   {
     if (vekt<20)
       printf("Du maa betale 3.60kr for og sende %d grams brev med B-post",vekt);
     if ((vekt>20) && (vekt<50))
       printf("Du maa betale 5.40kr for og sende %d grams brev med B-post",vekt);
     if ((vekt>50) && (vekt<100))
     printf("Du maa betale 7.00kr for og sende %d grams brev med B-post",vekt);
     if ((vekt>100) && (vekt<250))
     printf("Du maa betale 12.00kr for og sende %d grams brev med B-post",vekt);
     if ((vekt>250) && (vekt<500))
     printf("Du maa betale 22.50kr for og sende %d grams brev med B-post",vekt);
     if ((vekt>500) && (vekt<1000))
     printf("Du maa betale 35.00kr for og sende %d grams brev med B-post",vekt);
   }
}



getchar();getchar();

 return 0;
}
//---------------------------------------------------------------------------

Lenke til kommentar
Videoannonse
Annonse
Ja, isteden for alle if'ene kan du bruke switch isteden.

Tror ikke du tjener så mye på å kjøre switch/case annet enn på første if..

 

her er et litt renset forslag

{
   switch (post)
  case 1:
    if (vekt<20){
      printf("Du maa betale 4.20kr for og sende %d grams brev med A-post",vekt);
      }else if (vekt < 50){
      printf("Du maa betale 6.30kr for og sende %d grams brev med A-post",vekt);
      }else if (vekt < 100){
      printf("Du maa betale 8.00kr for og sende %d grams brev med A-post",vekt);
      }else if (vekt < 250){
      printf("Du maa betale 15.00kr for og sende %d grams brev med A-post",vekt);
      }else if (vekt < 500){
      printf("Du maa betale 26.50kr for og sende %d grams brev med A-post",vekt);
      }else{
      printf("Du maa betale 42.00kr for og sende %d grams brev med A-post",vekt);
      }
   break;

   case 2:
    if (vekt<20){
      printf("Du maa betale 3.60kr for og sende %d grams brev med B-post",vekt);
      }else if (vekt < 50){
      printf("Du maa betale 5.40kr for og sende %d grams brev med B-post",vekt);
      }else if(vekt < 100){
      printf("Du maa betale 7.00kr for og sende %d grams brev med B-post",vekt);
      }else if (vekt < 250){
      printf("Du maa betale 12.00kr for og sende %d grams brev med B-post",vekt);
      }else if (vekt < 500){
      printf("Du maa betale 22.50kr for og sende %d grams brev med B-post",vekt);
      }else{
      printf("Du maa betale 35.00kr for og sende %d grams brev med B-post",vekt);
      }
  break;
}

Lenke til kommentar
#include <stdio.h>

#define TARIFFER 6

int main(int argc, char* argv[])
{
int post;
int vekt;
double pris;
int i;
double tariff[2][TARIFFER]={{4.2,6.3,8.0,15.0,26.50,42.00},{3.6,5.4,7.0,12.0,22.50,35.00}};
int vektgrense[TARIFFER]={20,50,100,250,500,1000};

printf("Tast in nvekta paa brevet i hele gram \n");
printf(":");
scanf("%d", &vekt);

printf("\n\n");

printf("Velg type brev du skal sende\n");
printf("Tast 1 for A-post\n");
printf("Tast 2 for B-post\n");
printf(":");
scanf("%d", &post);
printf("\n\n\n");
for (i=0;i<TARIFFER;i++) if (vekt>vektgrense[i]) pris=tariff[post-1][i];

printf("Du maa betale %f for og sende %d grams brev med A-post",pris,vekt);

getchar();getchar();

 return 0;
}

Lenke til kommentar

Å lage en if for hvert alternativ på den måten er ikke god programmering. Da er det bedre å bruke en datastruktur som inneholder dataene, og så jobbe mot den.

 

Det er ikke spesielt komplisert. Det er to tabeller. En for satsene (ikke tariff... huff :lol: ) og en for vektgrensene. Om man ønsker å endre noe, så endrer man bare tabellen.

Lenke til kommentar

Et til...

struct VEKTKATEGORI {

  int min_vekt;

  int max_vekt;

  float a_pris;

  float b_pris;

};

 

int ANTALL_VEKTKATEGORIER = 6;

VEKTKATEGORI vektkategorier[ANTALL_VEKTKATEGORIER] = {

  {  0,  20,  4.20,  3.60},

  {  20,  50,  6.30,  5.40},

  {  50,  100,  8.00,  7.00},

  { 100,  250, 15.00, 12.00},

  { 250,  500, 26.50, 22.50},

  { 500, 1000, 42.00, 35.00}

};

 

VEKTKATEGORI * FinnVektkategori(int vekt)

{

  // Søk etter vektkategorien som vekten hører til.

  for(int i = 0; i < ANTALL_VEKTKATEGORIER; i++) {

      if((vekt >= vektkategorier.min) && (vekt < vektkategorier.max)) {

        // Vektkategori er funnet. Returner adressen til kategorien.

        return &(vektkategorier);

      }

  }

 

  // Ingen vektkategori ble funnet. Returner en tom adresse.

  return 0;

}

 

int main(int argc, char* argv[])

{

  int vekt, type;

 

  printf("Tast inn vekta paa brevet i hele gram: \n");

  scanf("%d", &vekt);

 

  printf("\n\n");

 

  printf("Velg type brev du skal sende\n");

  printf("Tast 1 for A-post\n");

  printf("Tast 2 for B-post\n");

  printf(":");

  scanf("%d", &type);

  printf("\n\n\n");

 

  VEKTKATEGORI* vektkategori = FinnVektkategori(vekt);

  if(vektkategori == 0) {

      printf("Ugyldig vektkategori valgt.\n");

      return -1;

  }

 

  if(type == 1) {

      printf("Du maa betale %f for og sende %d grams brev med A-post", vektkategori->a_pris, vekt);

  } else if(type == 2) {

      printf("Du maa betale %f for og sende %d grams brev med B-post", vektkategori->b_pris, vekt);

  } else {

      printf("Ugyldig type valgt.\n");

      return -1;

  }

 

  return 0;

}

 

..litt mer tekst når jeg ser det :) men kanskje litt enklere å forandre.

 

ed:bugbugbug

Endret av hishadow
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...