praegune kellaaeg 19.06.2025 11:25:36
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
ReinAa
HV kasutaja

liitunud: 21.08.2013
|
25.11.2013 19:15:21
Natukene C-ga abi vaja |
|
|
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
küsimus oleks just nagu selles kohas:
int A[N];
float B[N];
int x = 0;
float 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 |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
25.11.2013 23:57:03
|
|
|
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 |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
26.11.2013 14:29:40
|
|
|
Tegelikult saab ka funktsioonis parameetrite väärtusi muuta, kui need vastavalt deklareerida:
c:
|
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]){ max = B[i]; x = i; } } }
|
... 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 |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
26.11.2013 19:15:11
|
|
|
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 |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
26.11.2013 23:05:15
|
|
|
My bad, puhta C-ga puutusin viimati vist eelmisel sajandil kokku Puhta C-ga peaks saama muidugi parameetrid pointerina ette anda.
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
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.
|