Δημοσιεύτηκε: 05 Απρ 2012, 11:30
από migf1
stamatiou έγραψε:
Οκ, κατάλαβα τον αλγόριθμο και πως λειτουργεί, αλλά δεν καταλαβαίνω γιατί δουλεύει με τα istart++ και iend--.

Το έκανες trace τον κώδικα στον gdb με 4 μόνο στοιχεία στον πίνακα, που σου είπα; Αν σε χαλάει ο gdb, κάνε το trace χειρκοκίνητα σε χαρτί: βάλε στον πίνακα 3-4 μόνο στοιχεία και ακολούθησε στο χαρτί τον κώδικα της συνάρτησης.

Όσο το άθροισμα είναι αρνητικό, μετακινεί τον istart μια θέση προς τα δεξιά για να συγκρίνει το στοιχείο του με το στοιχείο του iend, μόλις το sum γίνει θετικό αφήνει τον istart και πιάνει τον iend.

Η λογική του βασίζεται στο γεγονός αφενός πως οι αριθμοί είναι ταξινομημένοι σε αύξουσα σειρά κι αφετέρου στο ότι όταν προσθέτεις δυο αριθμούς το άθροισμά τους βγάινει αρνητικό μονάχα αν ο 1ος είναι αρνητικός με απόλυτη τιμή μικρότερη του θετικού 2ου, ή όταν είναι και οι 2 αρνητικοί αριθμοί.