Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Natukene C-ga abi vaja märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
ReinAa
HV kasutaja
ReinAa

liitunud: 21.08.2013



Autoriseeritud ID-kaardiga

sõnum 25.11.2013 19:15:21 Natukene C-ga abi vaja vasta tsitaadiga

Sai kirja mingi asi küll, kuid aga jääb arusaamatuks just kuidas programm leiaks parima keskmise hinde koos õpilase koodiga, ehk oskab keegi aidata icon_wink.gif
küsimus oleks just nagu selles kohas:
int A[N];
float B[N];
int x = 0;
fl
oat max = 0;




#include<stdio.h>

int sisesta(char s[], int min, int max){
int a;
do{
printf("Sisesta yli6pilaste arv %s :", s);
scanf("%d", &a);
}while(a < min || a > max);
return a;
}

void sisestus(int num, int A[], float B[]){

for(int i = 1; i < num+1; i++){
printf("Sisesta yli6pilase %d. kood: ", i);
scanf("%d", &A[i] );
getchar();
printf("Sisesta yli6pilase %d. keskmine hinne: ", i);
scanf("%f", &B[i] );
getchar();
}
}

void leiaMax(float B[], float max, int x){
int n = sizeof(B) / sizeof(int);
for(int i = 1; i<n+1; i++){

if(max < B[i]){
printf("%f", B[i]);
max = B[i];
x = i;
}
}
}



int main(void){
int N, hinne, kood;
N = sisesta("N", 1, 10);

int A[N];
float B[N];
int x = 0;
float max = 0;

sisestus(N, A, B);

leiaMax(B, max, x);
//keskmine(hinne, A);
//printf(A);
for(int i = 0; i < N; i++){
printf("Kood: %d ", A[i+1]);
printf("Keskmine hinne %f \n", B[i+1]);
}
printf("Max keskmine hinne on %f, 6pilasel nr %d", max, x);
}
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 25.11.2013 23:57:03 vasta tsitaadiga

1) Kood lükka syntax tagide vahele, nii on teistel seda parem lugeda: [syntax="c"]sinukood[/syntax]
2) C-s algab massiivide indekseerimine 0-st, st kui sul on massiiv A[N], siis selle esimene liige on A[0] ja viimane A[N-1]. Antud hetkel täidad sa neid alates teisest liikmest ja jooksed lõpuks üle massiivi piiri, mis võib igasugu sekeldusi kaasa tuua.
3) Hetkel arvad sa, et su leiaMax funktsioon muudab "max" ja "x" väärtuseid ja sa saad neid pärast "mainis" kasutada, aga päris nii see ei käi, sest C-s antakse funktsioonidele muutuja väärtused. Sisuliselt tehakse su funktsioonis "max" ja "x" jaoks uued muutujad, ning kopeeritakse neisse välja kutsumisel antud muutujate väärtused. Ehk siis pärast "leiaMax(B, max, x)" on nii "max" kui "x" ikkagi 0. Üheks lahenduseks on anda funktsioonile vastavate muutujate viidad (pointer), mis juhul saab nende väärtusi funktsiooni sees muuta. Kuna sul aga mitut muutujat reaalselt ei ole vaja tagastada, siis otsi lihtsalt suurima väärtusega B elemendile vastav indeks ja tagasta see funktsiooni lõpus "return"iga.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 26.11.2013 14:29:40 vasta tsitaadiga

Tegelikult saab ka funktsioonis parameetrite väärtusi muuta, kui need vastavalt deklareerida:
c:
  1.  
  2. void leiaMax(float B[], float &max, int &x){
  3.         int n = sizeof(B) / sizeof(int);
  4.         for(int i = 1; i<n+1; i++){     
  5.                 if(max < B[i]){
  6.                         printf("%f", B[i]);
  7.                         max = B[i];
  8.                         x = i;
  9.                 }
  10.         }
  11. }
  12.  


... aga olenevalt asjaoludest ei pruugi see kõige ilusam lahendus olla ja nagu öeldud, tegelikult piisab hetkel kui funktsioonis indeksi tagastad.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 26.11.2013 19:15:11 vasta tsitaadiga

napoleon kirjutas:
Tegelikult saab ka funktsioonis parameetrite väärtusi muuta, kui need vastavalt deklareerida

C-s sellist asja ei ole, C++-s küll jah.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 26.11.2013 23:05:15 vasta tsitaadiga

My bad, puhta C-ga puutusin viimati vist eelmisel sajandil kokku icon_wink.gif Puhta C-ga peaks saama muidugi parameetrid pointerina ette anda.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Natukene C-ga abi vaja
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.