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

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

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

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

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