lolku niezły jesteś czy cie nie ma ?????????????

IP: *.chello.pl 01.05.06, 20:25
Lolku jesteś czy co - akurat potrzebuje twojej pomocy odnosnie jednego zadania
z programowania z wejściówki - nie wiem jak je zrobiććććććććććć !!!!!!!!!!!!!
Jesteś czy nie ???????
miałem wejściówkę ostatnio i do tej pory nie rozumiem gdzie robię błąd w tym
zadaniu z wejściówki - weź mi powiedz - bo normalnie tylko czas trace i nie wiem
ps. programowanie mam od tego semestru (znaczy drugiego semestru) a nie
pierwszego takze proszę o wyrozumiałość :)
Program nie jest trudny, ale muszę mieć gdzieś drobny błąd a sam jakoś nie
mogę go zauważyć :D

//Dana jest tablica liczb naturalnych int tab[] składajaca się z size elementów.
//Proszę napisać ciało funkcji int szukaj (int tab[], int size), która dla
wczytanej
//tablicy tab[] zwraca wartość parametru "i" (z zakresu od 0 do size-2)
spełniajacego
//warunek:
//tab[0]+....+tab[i]=3*(tab[i+1]+........tab[size-1])
//Jeśli dla żadnej wartości "i" (z podanego zakresu) powyższy warunek nie
zachodzi,
// funkcja powinna zwracać wartość (-1)



#include<stdio.h>
#include<conio.h>

int szukaj (int tab[], int size);

int main ()
{
int size=6;
int tab[]={9,9,5,7,5,5};
printf ("%d to szukana wartosc", szukaj(tab, size));
getch ();
return 0;
}


int szukaj (int tab[], int size)
{
int i, a=tab[0], c, b;


for (i=1; i<size-2; i++)
{
c=i+1;

b=tab[c];

a=a+tab[i];

while (c<size-1)

{
b=b+tab[c+1];
c++;
}

if(a==3*b)

{
return tab[i+1];
}

}
return -1;

}



    • Gość: mateusz Re: lolku niezły jesteś czy cie nie ma ?????????? IP: *.ds5.agh.edu.pl / *.ds5.agh.edu.pl 01.05.06, 21:32
      tam gdzie masz return tab[i+1]; zmień na return i;
      I jeszcze jedno jak dla mnie w for powinno być tak for (i=1; i<size-1; i++) bo
      tak jak ty masz to nie znajduje np dla 2,1,4,3,5,5 a powinno zwracać 4
      • Gość: mateusz Re: lolku niezły jesteś czy cie nie ma ?????????? IP: *.ds5.agh.edu.pl / *.ds5.agh.edu.pl 01.05.06, 21:43
        I jeszcze jeden błąd zauważyłem.
        zrób tak a=0; i indeksuj w pętli od 0 for (i=0; i<size-1; i++) bo w twoim
        przypadku nie może się zdarzyć że zwraca indeks 0, a tak się może zdarzyć np dla 3,1
    • lol_niezly ;) 01.05.06, 21:32
      Nie wczytywalem sie za bardzo w Twoje rozwiązanie ponieważ chwilowo nie mam
      czasu :) ale dzisiaj w nocy postaram sie na nie spojrzec.Szybko napisalem
      schemat rozwiazania, moga byc jakies drobne bledy w stylu index w lewo czy w
      prawo ;)

      Na pewno jeden blad widze na poczatku w for:
      w zadaniu pisze ze mozna zwrocic index z przedzialu 0 do size-2, a ty petle
      puszczasz i < size-2 czyli size-2 juz nie osiagasz.

      Moj schemat wyglada tak:

      int szukaj(int *tab, int size)
      {
      int i,k, suma1, suma2;
      int znaleziono = -1; // poczatkowo nic nie mamy

      i = 0;
      while(i<size-1) {
      suma1 = suma2 = 0;
      for(k = 0; k <= i ; k++) suma1 += tab[k];
      for(k = i+1; k < size-1; k++) suma2 += tab[k];
      if(suma1 == 3*suma2) { znaleziono = i; break; }
      i++;
      } // while
      return znaleziono;
      }

      Pierwsza petla chodzi po liczbach 0..size-2.
      Nastepnie sumuje liczby 0 .. <= i oraz i+1 .. size-1
      Potem porownuje te pierwsza sume z druga pomnozana przez 3.
      Jesli taka znajdziemy to ustawiamy znaleziono na index i breakiem wypadamy z
      petli :))
      • Gość: zły Re: ;) IP: *.chello.pl 01.05.06, 21:53
        okej dzięki - teraz okej - dzięki zarównio mateusz i dzięki lolek :)
      • Gość: zły Re: ;) IP: *.chello.pl 01.05.06, 22:01
        mateusz bym szybszy - także szczególe podziękowania mateuszowi - wielkie dzieki :D
    • Gość: ... Re: lolku niezły jesteś czy cie nie ma ?????????? IP: *.kablowka.waw.pl 02.05.06, 20:57
      Kurcze to na WIT są takie banalne zadanka????? To ja myślałem iż czegoś się tam
      można nauczyć, a okazuje się iż ćwiczenia jak klubie osiedlowym.
Pełna wersja