19. maj 2000 - 03:01Der er
10 kommentarer og 2 løsninger
Et tumpet arrayspørgsmål........!
Hej er der en der kan hjælpe mig med den her, jeg er vidst blevet dum over natten….!
Jeg har et antal numre lagt i et array: float fejl1[250] og fejl2[250]
Det jeg nu ønsker er at finde ud af om der er nogen af værdierne der kommer med en delta_fejl efter hinanden. Delta_fejl er en fast værdi, f.eks. 0.1643. Hvis det er tilfældet at fejl1[i] og fejl[i+1] er med delta_fejl mellemrum, skal værdien fra den først fundne fejl1 gemmes og alle fejl2[i] lægges sammen indtil fejlene ikke kommer efter hinanden med delta_fejl mellemrum.
hmmm, jeg skal lægge værdier i et array sammen, så længe de kommer lige efter hinanden i værdi. En fast parameter for bestemmelse af "komme lige efter hinanden" er sat hver gang funktionen kaldes. Hvis de ikke kommer lige efter hianden, skal de bare skrives ud hver for sig...
Kan du komme med et helt eksempel med konkrete tal. Jeg har ikke specielt lyst til at "kaste mig" over en opgave jeg ikke kan forstå (det kan jo godt være MIG der er noget galt med .... hehe)
jammen der er jo et eksempel på arrayet, jeg havde bare ikke lyst til at skrive 250 talværdier, men nøjedes 9 værdier, lad os bare går ud fra at alle andre værdier i arrayet er = 0. Dvs. at værdierene fra 7.0638 - 7.7209 skal lægges sammen (alså 28.5545+28.5026+28.4441 osv.), og værdierne 7.0638 skal angives som start på sammenlægningen og 7.7209 som slutpunkt. Det skulle så gerne give et resultat på: fra 7.0638 til 7.7209, værdi ialt 141.98 det var så den første, så skal der fortsættes med 10.8852 til 10.0494 osv.
Det er ikke fordi jeg ikke kan afprøve det, men så skal man lige have læst nogle tal ind i et array, og det er besværligt, så det er altså utestet:
last = -1.0; sum = 0.0; for (i=0;i<antal;i++) { if (abs(last-fejl1[i])<=delta) { sum += fejl2[i]; } else { if (sum!=0) { printf(".....",sum); sum=0; } } last=fejl1[i]; } if (sum!=0) { printf(".....",sum); }
Jeg har groft antaget, at alle tal i tabellerne er større end nul.
Ovenstående holder ikke, fordi last hele tiden flyttes til det sidste element der er behandlet. Hvis derfor alle tal har minde end 'delta' mellem deres værdier, får man kun een sum. (Fordi 1 & 2 har mindre end delta mellem deres værdier, 2 & 3 samme osv.)
Det er da muligt - men i så fald er initieringen af last og sum stadig gal.
Følgende skulle fungere:
lastI = o; sum = fejl1[0]; for (i=1; i < antal; i++) { if (abs(fejl2[i]-last) <= delta) sum += fejl2[i];
/* Krølle med gentagelse af IF, for at sikre at også sum for */ /* sidste element bliver udskrevet. */ if (abs(fejl2[i]-last) > delta || i == antal) { printf("Intervallet %f-%f har summen: \n", fejl1[lastI], fejl1[i], sum); lastI = i; sum = fejl2[i]; }; };
hmmm, jeg har prøvet med begge to nu, og det er rigtig nok, at det er soepro's der er den mest rigtige.... Jeg har dog haft problemer med den alligevel, og har ikke været i stand til at løse dem. Jeg fatter det bare ikke.
Jeg finder en summering af de fejl jeg har fundet i første omgang, det er fint nok, men ved nærmere eftersyn kunne de også godt lægges sammen een gang mere. Derfor smed jeg dem alle i et helt nyt array, og sendte dem gennem en fuldstændig identisk funktion. DET virkede bare ikke!! Når jeg skriver arrayet ud til skærmen ser det ud som det skal, men prøver jeg at skrive det samme array til en tekstfil, ved en for(;;) løkke, så skriver den første værdi rigtig nok, men resten, det er bare noget rigtig rod for at sige det mildt. Nå men skide være med det, jeg er tilfreds med det opnåede resultat, og har kun to dage til finjusteringer inden det skal afleveres...... :o) Takker for hjælpen
Nej det kan jeg godt forstå - jeg har lavet et par småfejl.
Det er IF'en med checket mod delta som er galt. Dette her skulle fungere:
lastI = o; sum = fejl1[0]; for (i=1; i < antal; i++) { if (abs(fejl2[i]-fejl2[lastI]) <= delta) sum += fejl2[i];
/* Krølle med gentagelse af IF, for at sikre at også sum for */ /* sidste element bliver udskrevet. */ if (abs(fejl2[i]-fejl2[lastI]) > delta || i == antal) { printf("Intervallet %f-%f har summen: \n", fejl1[lastI], fejl1[i], sum); lastI = i; sum = fejl2[i]; }; };
Hvis du skal have indholdet ud i en fil, skal du blot erstatte printf ovenfor med en fprintf til filen. (Som du selvfølgelig åbner FØR loopet, og lukker EFTER loopet.)
Hmm, soepro, så vidt jeg kan læse, bytter du lidt rundt på fejl1 og fejl2. Er det ikke fejl1, der skal checkes for delta, og fejl2 der skal summeres? Men mobi2 har nok fixet det, så han er tilfreds.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.