C programs

Wednesday, December 14, 2005

 

Najekonomicnija kupovina frizidera

Ova verzija ispisuje najekonomicniji grad za kupovinu frizidera u svakom gradu, medjutim postoji i kod (koji je iskomentarisan) za razultat sam u odredjenom gradu. Ako Vam to treba, odkomentarisite taj kod i sklonite pelju koja vrti promenljivu grad kroz sve vrednosti od 0 do n-1! Detaljan text zadatka je u samom kodu u vidu komentara!
  1. /***********************************************************
  2. *
  3. *  Duz kruznog puta nalazi se N gradova. U svakom od njih postoji
  4. *  prodavnica bele tehnike. Poznata je cena zamrzivaca u svakom
  5. *  gradu i cena voznje do svakog grada sa povratkom. Za mestane
  6. *  svakog grada odrediti grad u kome ce najekonomicnije proci
  7. *  prilikom kupovine zamrzivaca i u kom smeru da putuju.
  8. *
  9. ************************************************************/
  10.  
  11.  
  12. #include <stdio.h>
  13. #define MAX_NIZ 50
  14.  
  15. main () {
  16.  
  17.     /******************************************
  18.     *
  19.     *  Definisanje enumeracije
  20.     *
  21.     ******************************************/
  22.     enum pozneg {NEG, POZ};
  23.  
  24.     /***********************************************************************
  25.     *
  26.     *      Deklaracija promenljivih
  27.     *  n je broj gradova
  28.     *  fridz je niz sa cenama frizidera u svakom gradu
  29.     *  put je niz sa cenom puta do svakog grada
  30.     *  i, j je brojac za petlju
  31.     *  grad je broj grada gde se kupac nalazi
  32.     *  eko1 i eko2 su nizovi sa ukupnim cenama frizidera sa putovanjem
  33.     *               u oba smera (eko1 je pozitivan smer, a eko2 negativan)
  34.     *  sumput je ukupna cena svih putovanja (putovanje u krug)
  35.     *  min1 i min2 su najmanji clanovi nizova eko1 i eko2
  36.     *  min je najmanja cena iz oba pravca
  37.     *  pozneg pamti najekonomicniji smer kretanja kupca
  38.     *  eko1grad i eko2grad pamte broj najekonomicnijeg grada
  39.     *  ekograd je broj najekonomicnijeg grada uopste
  40.     *  again je pomocna promenljiva za ponavljanje programa ako to korinsik zeli
  41.     *
  42.     **********************************************************************/
  43.     float fridz[MAX_NIZ], put[MAX_NIZ], eko1[MAX_NIZ], eko2[MAX_NIZ], sumput, min1, min2, min;
  44.     int n, i, j, grad, pozneg, eko1grad, eko2grad, ekograd;
  45.     char again = 'y';
  46.  
  47.     /*****************************************
  48.     *
  49.     *  Uvodna konverzacija
  50.     *
  51.     *****************************************/
  52.     printf("Program za odredjivanje najekonomicnije kupovine frizidera!");
  53.  
  54.     while (again=='y')
  55.     {
  56.             /*****************************************
  57.             *
  58.             *  Inicijalizacija niza
  59.             *
  60.             ******************************************/
  61.             for (i=0; i<MAX_NIZ; i++) fridz[i] = put[i] = eko1[i] = eko2[i] = 0;
  62.  
  63.             /****************************************
  64.             *
  65.             *  Unos broja gradova
  66.             *
  67.             ****************************************/
  68.             printf("\nUnesite broj gradova: ");
  69.             scanf("%d", &n);
  70.             while (n<=0 || n>MAX_NIZ) {
  71.                 printf("Unos je van opsega! Unesite ponovo broj gradova: ");
  72.                 scanf("%d", &n);
  73.             }
  74.  
  75.             /**************************************
  76.             *
  77.             *  Unos cena frizidera u svakom gradu
  78.             *
  79.             **************************************/
  80.             printf("\n\tUnos cena frizidera u svakom gradu\n");
  81.             for (i=0; i<n; i++) {
  82.                 printf("Unesite cenu frizidera u gradu %d: ", i+1);
  83.                 scanf("%f", &fridz[i]);
  84.                 while (fridz[i]<0) {
  85.                     printf("\n\tCena ne moze biti negativna! Unesite cenu frizidera u gradu %d: ", i+1);
  86.                     scanf("%f", &fridz[i]);
  87.                     }
  88.                 }
  89.  
  90.             /***************************************
  91.             *
  92.             *  Unos cena puta izmedju svakog grada i racunanje
  93.             *  ukupne cene ako bi se obisao krug kroz sve gradove
  94.             *
  95.             ***************************************/
  96.             sumput = 0;   /*postavljanje sume cena svih puteva na nulu*/
  97.             printf("\n\tUnos cena puta izmedju svaka dva grada!\n");
  98.             for (i=0; i<n; i++) {
  99.                 if (i==(n-1)) {
  100.                     printf("Unesite cenu puta izmedju gradova %d i 1 : ", i+1);
  101.                     scanf("%f", &put[i]);
  102.                     while (put[i]<0) {
  103.                         printf("\n\tCena ne moze biti negativna. Unesite cenu puta izmedju gradova %d i 1 : ", i+1);
  104.                         scanf("%f", &put[i]);
  105.                     }
  106.  
  107.                 }
  108.                 else {
  109.                     printf("Unesite cenu puta izmedju gradova %d i %d : ", i+1, i+2);
  110.                     scanf("%f", &put[i]);
  111.                     while (put[i]<0) {
  112.                         printf("\n\tCena ne moze biti negativna. Unesite cenu puta izmedju gradova %d i %d : ", i+1, i+2);
  113.                         scanf("%f", &put[i]);
  114.                     }
  115.                 }
  116.                 sumput += put[i];
  117.             }
  118.  
  119.             /*****************************************
  120.             *
  121.             *  Unos grada gde se kupac nalazi
  122.             *
  123.             *****************************************/
  124.             /*printf("\n\tU kom gradu se kupac nalazi? ");
  125.             scanf("%d", &grad);
  126.             while (grad<=0 || grad>n) {
  127.                 printf("Unesti grad je izvan opsega! U kom gradu se kupac nalazi? ");
  128.                 scanf("%d", &grad);
  129.                 }
  130.                 grad--;
  131.             */
  132.            
  133.            
  134.             /**********************************************************************
  135.             *
  136.             *  Petlja koja prolazi kroz sve gradove i ispisuje rezultate za njih
  137.             *
  138.             **********************************************************************/
  139.             for (grad=0; grad<n; grad ++) {
  140.                
  141.                 /*****************************************
  142.                 *
  143.                 *  Inicijalizacija nizova i promenljivih
  144.                 *
  145.                 ******************************************/
  146.                 for (i=0; i<n; i++) eko1[i] = eko2[i] = 0;
  147.                
  148.                
  149.                 /*****************************************
  150.                 *
  151.                 *  Kreiranje niza cena u svim gradovima zajedno sa
  152.                 *  putovanjem do tih gradova u pozitivnom smeru
  153.                 *  (suprotan kretanju kazaljke na satu)
  154.                 *
  155.                 *****************************************/
  156.                 for (i=0; i<n; i++) {
  157.                     /*************************************
  158.                     *
  159.                     *  U gradu gde se kupac nalazi troskovi su jednaki
  160.                     *  ceni frizidera u tom gradu
  161.                     *
  162.                     **************************************/
  163.                     if (i==grad) {
  164.                         eko1[i] = fridz[i];
  165.                     }
  166.                     else {
  167.                    
  168.                         /**********************************************************************
  169.                         *
  170.                         *  Ako do nekog grada moramo stici prolazeci kroz kraj kruga (put od poslednjeg do
  171.                         *  prvog grada) onda od ukupne cene putovanja kroz ceo krug oduzimamo cenu puta
  172.                         *  koji kupac ne mora da predje da bi stigao do odredjenog grada i dodajemo cenu
  173.                         *  frizidera u tom gradu
  174.                         *
  175.                         ***********************************************************************/
  176.                         if (i<grad) {
  177.                                 eko1[i] = sumput;
  178.                                 for (j=i; j<grad; j++) eko1[i] -= put[j];
  179.                                 eko1[i] += fridz[i];
  180.                                 }
  181.                         /***********************************************************************
  182.                         *
  183.                         *  Ako se do grada moze stici u pozitivnom smeru bez prolaska kroz kraj kruga (put
  184.                         *  od poslednjeg do prvog grada) onda saberemo cenu svakog puta koji kupac treba
  185.                         *  da prodje da bi stigao do odredjenog grada i dodamo cenu frizidera u tom gradu
  186.                         *
  187.                         ************************************************************************/
  188.                         if (i>grad) {
  189.                             for (j=grad; j<i; j++) eko1[i] += put[j];  ;
  190.                             eko1[i] += fridz[i];
  191.                        
  192.                             }
  193.                         }
  194.                 }
  195.                
  196.                 /*****************************************
  197.                 *
  198.                 *  Kreiranje niza cena u svim gradovima zajedno sa
  199.                 *  putovanjem do tih gradova u negativnom smeru
  200.                 *  (smer kretanja kazaljke na satu)
  201.                 *
  202.                 *****************************************/
  203.                 for (i=0; i<n; i++) {
  204.                     /*************************************
  205.                     *
  206.                     *  U gradu gde se kupac nalazi troskovi su jednaki
  207.                     *  ceni frizidera u tom gradu
  208.                     *
  209.                     **************************************/
  210.                     if (i==grad) {
  211.                         eko2[i] = fridz[i];   
  212.                         }
  213.                         else {
  214.                             /**********************************************************************
  215.                             *
  216.                             *  Ako do nekog grada moramo stici prolazeci kroz kraj kruga (put od poslednjeg do
  217.                             *  prvog grada) onda od ukupne cene putovanja kroz ceo krug oduzimamo cenu puta
  218.                             *  koji kupac ne mora da predje da bi stigao do odredjenog grada i dodajemo cenu
  219.                             *  frizidera u tom gradu
  220.                             *
  221.                             ***********************************************************************/
  222.                             if (i>grad) {
  223.                                 eko2[i] = sumput;
  224.                                 for (j=grad; j<i; j++) eko2[i] -= put[j];
  225.                                 eko2[i] += fridz[i];           
  226.                         }
  227.                         else
  228.                             /***********************************************************************
  229.                             *
  230.                             *  Ako se do grada moze stici u pozitivnom smeru bez prolaska kroz kraj kruga (put
  231.                             *  od poslednjeg do prvog grada) onda saberemo cenu svakog puta koji kupac treba
  232.                             *  da prodje da bi stigao do odredjenog grada i dodamo cenu frizidera u tom gradu
  233.                             *
  234.                             ************************************************************************/
  235.                             if (i<grad) {
  236.                                 for (j=i; j<grad; j++) eko2[i] += put[j];
  237.                                 eko2[i] += fridz[i];               
  238.                             }
  239.                     }
  240.                 }      
  241.                
  242.                
  243.                 /*******************************************
  244.                 *
  245.                 *  Trazenje najmanjeg clana nizova eko1 i eko2
  246.                 *  i broja najekonomicnijeg grada
  247.                 *
  248.                 ******************************************/
  249.                 for (eko1grad = 0, eko2grad = 0, min1 = eko1[0], min2 = eko2[0], i=1; i<n; i++) {
  250.                     if (eko1[i]<min1) {
  251.                         min1 = eko1[i];
  252.                         eko1grad = i;
  253.                         }
  254.                     if (eko2[i]<min2) {
  255.                         min2 = eko2[i];
  256.                         eko2grad = i;
  257.                         }
  258.                 }   
  259.                
  260.                 /*******************************************
  261.                 *
  262.                 *  Odredjivanje najmanje cene kod oba smera i broja
  263.                 *  grada koji je najekonomicniji i odredjivanje pravca
  264.                 *  u kom kupac treba da se krece
  265.                 *
  266.                 *******************************************/
  267.                 if (min1<min2) {
  268.                     min = min1;
  269.                     ekograd = eko1grad;
  270.                     pozneg = POZ;      
  271.                     }
  272.                     else {
  273.                         min = min2;
  274.                         ekograd = eko2grad;
  275.                         pozneg = NEG;      
  276.                     }
  277.    
  278.                
  279.                 /*****************************************
  280.                 *
  281.                 *  Ispis rezultata na ekranu
  282.                 *
  283.                 *****************************************/
  284.                 printf("\n\nIspis za grad %d!\n", grad+1);
  285.                 if (grad==ekograd) printf("\n\n\tNajekonomicnije je da kupac kupi frizider u svom gradu!\n");
  286.                 else {
  287.                     printf("\n\tNajekonomicnije grad za kupovinu frizidera je %d, i treba da idete u smeru ", ekograd+1);
  288.                     if (pozneg==NEG) printf("suprotnom od ");   
  289.                     printf("kretanja kazaljke na satu! Cena je %.2f", min);
  290.                 }
  291.            
  292.                
  293.             }
  294.             /************************************************
  295.             *
  296.             *  Provera da li korinik zeli da ponovi program
  297.             *
  298.             ************************************************/
  299.             printf("\nDa li zelite da ponovite program? (y/n) ");
  300.             scanf("%c", &again);
  301.             scanf("%c", &again);
  302.             while (again!='y' && again !='n') {
  303.                 printf("Pogresan unos! Da li zelite da ponovite program? (y/n) ");
  304.                 scanf("%c", &again);
  305.                 scanf("%c", &again);
  306.                 }
  307.                
  308.     }
  309.        
  310.    
  311.     /********************************
  312.     *
  313.     *  KRAJ PROGRAMA
  314.     *
  315.     ********************************/
  316.     printf("\n\n\t***KRAJ PROGRAMA***\n\n");
  317.     return 0;
  318.  
  319. }
  320.  

Comments: Post a Comment



<< Home

Archives

November 2005   December 2005   January 2006  

This page is powered by Blogger. Isn't yours?