» »

Neznan problem #2 [C]

Neznan problem #2 [C]

RatedR ::

Torej, imam nalogo da spišem funkcijo, ki sprejme parameter tipa int -> vrsta lika, ter parameter tipa double - polmer/stranica lika. Funkcija izračuna obseg določenega lika in izpiše obseg lika na 6 mest natančno.
#include<stdio.h>
 
#define PI 3.141592;
 
double ObsegLika(int vnosLik, float vnosPolmer);
 
int main(void)
{
    printf("Izracun obsega lika\n");
    printf("Vnesite: 0 - krog, 1 - kvadrat, 2 - enakostranicni trikotnik: ");
     
    int lik;
    scanf("%d", &lik);
     
    printf("\nVnesite polmer lika: ");
     
    float polmer;
    scanf("%lf", &polmer);
     
    ObsegLika(lik, polmer);
     
    getch();
    }
     
double ObsegLika(int vnosLik, double vnosPolmer)
{
       double rezultat1, rezultat2, rezultat3;
        
       switch(vnosLik)
       {
           case 0:
                   rezultat1 = 2 * vnosPolmer * PI;
                   printf("\nObseg kroga znasa: %f", rezultat1);
                   break;  
        
          case 1:
                  rezultat2 = (2 * vnosPolmer) * 4;
                  printf("\nObseg kvadrata znasa: %f", rezultat2);
                  break;
                   
          case 2:
                  rezultat3 = 3 * vnosPolmer;
                  printf("\nObseg enakostranicnega trikotnika znasa: %f", rezultat3);
                  break;
                   
          default:
                   printf("\nNapacen vnos!");
                          
       }
}

Problem nastane ko vnašam polmer lika - ko potrdim vnos mi vrže ven default switch stavka.
Če spremenim vse spremenljivke v tip int, mi kodo normalno compila in izvede tako da nevem kaj je narobe.
  • spremenilo: RatedR ()

mallard ::

Tvoj program ima nedefirano obnašanje. Pri drugem scanf klicu si v format descriptor napisal, da bos bral float, podal si pa int spremenljivko.

RatedR ::

No to sem popravil a težava ostaja enaka

#include<stdio.h>

#define PI 3.141592;

double ObsegLika(int vnosLik, float vnosPolmer);

int main(void)
{
    printf("Izracun obsega lika\n");
    printf("Vnesite: 0 - krog, 1 - kvadrat, 2 - enakostranicni trikotnik: ");
    
    int lik;
    scanf("%d", &lik);
    
    printf("\nVnesite polmer lika: ");
    
    float polmer;
    scanf("%lf", &polmer);
    
    ObsegLika(lik, polmer);
    
    getch();
    }
    
double ObsegLika(int vnosLik, double vnosPolmer)
{
       double rezultat1, rezultat2, rezultat3;
       
       switch(vnosLik)
       {
           case 0:
                   rezultat1 = 2 * vnosPolmer * PI;
                   printf("\nObseg kroga znasa: %f", rezultat1);
                   break;  
       
          case 1:
                  rezultat2 = (2 * vnosPolmer) * 4;
                  printf("\nObseg kvadrata znasa: %f", rezultat2);
                  break;
                  
          case 2:
                  rezultat3 = 3 * vnosPolmer;
                  printf("\nObseg enakostranicnega trikotnika znasa: %f", rezultat3);
                  break;
                  
          default:
                   printf("\nNapacen vnos!");
                         
       }
}

mallard ::

Pardon. %lf pomeni double, ne float. Popravi še enkrat, compile, ..., profit!
Pa funkcija ObsegLika nič ne vrača, čeprav deklaracija pravi drugače.

Zgodovina sprememb…

  • spremenilo: mallard ()

RatedR ::

mallard je izjavil:

Pardon. %lf pomeni double, ne float. Popravi še enkrat, compile, ..., profit!
Pa funkcija ObsegLika nič ne vrača, čeprav deklaracija pravi drugače.

Zdej sem mal zmeden tle, kaj moram spremenit pa a tebi to dela?

mallard ::

Še enkrat - če je format %lf, mora bit ustrezna spremenljivka (polmer) tipa double (oziroma double*, kar pošiljaš scanf funkciji). Lahko tud delaš s float tipom, ampak potem naj bo format %f. Pa popravi deklaracijo fukcije ObsegLika - drugi parameter ima v deklaraciji tip float, v definiciji pa double.

Zgodovina sprememb…

  • spremenilo: mallard ()

RatedR ::

Okej hvala, zdel deluje, mam še kar nekaj nalog pa manjše probleme z razumevanjem osnov...kaj lahko naredim da mi bo šla stvar v glavo?

Naloge z zankami mi grejo slabo, znanje ti lahko preneseš na nekoga...logike pa ne, torej v čem je "skrivnost"?

videc ::

Vaja dela mojstra.

RatedR ::

videc je izjavil:

Vaja dela mojstra.

Se popolnoma strinjam, vendar ko pa naletiš na neko novo nalogo za katero se ti ne sanja kaj naredit ti pa vaja ne pomaga preveč.

videc ::

Se ne bi strinjal s tabo. Pri predmetu "Algoritmi in programski jeziki" se obdela malo morje takšnih zadev. Tudi logiko razmišljanja in kako delajo algoritmi oziroma postopki.
Je pa treba veliko delat tudi doma. Žal.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Izris lika - ideja

Oddelek: Programiranje
233745 (2780) RatedR
»

C in računanje kotov

Oddelek: Programiranje
376570 (5623) RatedR
»

[Python] Pomoč pri računanju Pi-ja

Oddelek: Programiranje
202453 (2085) Spura
»

[C] Branje iz datoteke

Oddelek: Programiranje
101716 (1547) BigWhale
»

[c] char zadeva

Oddelek: Programiranje
222248 (2046) TheCyborg

Več podobnih tem