Avatar billede mobi2 Nybegynder
19. maj 2000 - 03:01 Der 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.

Her er et eksempel på arrayet

7,0638    28,5545
7,2281    28,5026
7,3923    28,4441
7,5566    28,2833
7,7209    28,1914
10,8852    26,1328
10,0494    26,0837
15,2137    23,0244
15,3780    23,9702

Som den hurtige sikkert kan se, drejer det sig om sammenlægning, men jeg roder mig bare mere og mere ud i noget rod. Please hjælp





Avatar billede mobi2 Nybegynder
19. maj 2000 - 03:03 #1
Jeg glemte at sige at efter fejlene er lagt sammen og ikke lægges sammen mere, skal de skrives til skærmen, og den næste gennemgang udføres
Avatar billede erikjacobsen Ekspert
19. maj 2000 - 09:00 #2
Det er ikke ganske klart hvad du mener ;-))
Avatar billede mobi2 Nybegynder
19. maj 2000 - 10:51 #3
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...
Avatar billede erikjacobsen Ekspert
19. maj 2000 - 20:12 #4
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)
Avatar billede mobi2 Nybegynder
20. maj 2000 - 11:37 #5
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.

Mobi2
Avatar billede erikjacobsen Ekspert
20. maj 2000 - 22:31 #6
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.
Avatar billede soepro Nybegynder
22. maj 2000 - 09:01 #7
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.)

Avatar billede erikjacobsen Ekspert
22. maj 2000 - 09:56 #8
Øh, ja, men er det ikke det mobi2 vil have ??
Avatar billede soepro Nybegynder
22. maj 2000 - 10:22 #9
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];
  };
};
Avatar billede mobi2 Nybegynder
22. maj 2000 - 18:01 #10
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
Avatar billede soepro Nybegynder
23. maj 2000 - 09:15 #11
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.)
Avatar billede erikjacobsen Ekspert
23. maj 2000 - 10:19 #12
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester