c tablica jednowymiarowa

Odpowiedz Nowy wątek
2015-01-06 04:13
0

Mam napisac program, ktory znajdzie mi taka liczbe w tablicy, ktorej suma liczb po jej lewej stronie bedzie rowna sumie liczb po jej prawej stronie. jezeli po lewej lub po prawej stronie nie ma zadnej liczby to trzeba ta strone przyjac jako zero. ewentualnie jakis komunikat jezeli takowej liczby nie bedzie. moglby mi to ktos poprawic?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

int n;
printf ("podaj wielkosc tablicy :");
scanf ("%d",&n); // podaj n
int arr[n];
printf ("podaj liczby do tablicy");
 // wypełnij tablicę arr liczbami
int ps[n], ss[n]; // ps - prefix-sum, ss - sufix-sum
int i;
ps[0] = 0;
ss[n-1] = 0;
for (i=1; i<n; i++)scanf ("%d",&arr[i]);{
  ps[i] = ps[i-1] + arr[i-1];
  ss[n-1-i] = ss[n-i] + arr[n-i];
}
int index = -1;
for (i=0; i<n; i++){
  if (ps[i] == ss[i]) index = i;
}
if (index == -1) // nie ma takiej liczby 
{
printf ("nie ma takiej liczby");
}
else
{
printf ("arr[index]");    
    } // wypisz arr[index]

system("PAUSE");   
return 0;
}
edytowany 1x, ostatnio: jabluszko, 2015-01-06 04:15

Pozostało 580 znaków

2015-01-06 04:48
0

Nie rozumiem twojej idei. Algorytm naiwny sumuje wszystko w tablicy a potem leci po kolei odejmując liczby aż znajdzie punkt podziału. Twój algorytm nie wiem co robi bo nazwy twoich zmiennych są bez sensu. Nie dało się ich nazwać normalnie?


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-06 05:58
0

masz tablicę arr o wymiarze n wypełnioną liczbami
dajmy na ten przykład takie dane:
n = 5
arr = [7,4,5,0,2]
tworzymy tablicę ps i jej pierwszy element zerujemy:
ps = [0, , , , ]
oraz ss z ostatnim zerowym:
ss = [ , , , ,0]
teraz chodzi o to, że ps[i] to suma wszystkiego co jest przed arr[i]
czyli przed pierwszym elementem jest 0 (z treści zadania)
analogicznie z sumą ss za ostatnim
teraz mamy pętlę po i od 1 do n-1 włącznie
i rozpisujemy jej obroty:
i=1:
ps[1] = ps[0] + arr[0]; czyli na ps[1] przypisz poprzedni ps i dopisz wartość z tablicy, na ps[1] będzie 0+7 = 7 czyli suma wszystkiego przed arr[1]
analogicznie
ss[5-1-1] = ss[5-1] + arr[5-1] czyli na ss[3] (przedostatni) przypisz ss[4] (ostatni) + wartość ostatniego z tablicy
i = 2:
ps[2] = ps[1] + arr[1] czyli ps[2] = 7+4 = 11
ss[5-2-1] = ss[5-2] + arr[5-2] czyli ss[2] = 2 + 0 (ss[3] + arr[3])

int n;
// podaj n
int arr[n];
// wypełnij tablicę arr liczbami
int ps[n], ss[n]; // ps - prefix-sum, ss - sufix-sum
int i;
ps[0] = 0;
ss[n-1] = 0;
for (i=1; i<n; i++){
  ps[i] = ps[i-1] + arr[i-1];
  ss[n-1-i] = ss[n-i] + arr[n-i];
}
int index = -1;
for (i=0; i<n; i++){
  index = ps[i] == ss[i] ? i : index;
}
if (index == -1) nie ma takiej liczby 
else wypisz arr[index]

kod wygladal w ten sposob. mialem tylko wstawic wczytywanie danych printfy itd. ale nie moge sb z tym poradzic. w pierwszym poscie jest moja nieudolna proba wczytywania danych

edytowany 2x, ostatnio: jabluszko, 2015-01-06 06:07

Pozostało 580 znaków

2015-01-06 10:12
1
for (i=1; i<n; i++) scanf ("%d",&arr[i]); {
    ps[i] = ps[i-1] + arr[i-1];
    ss[n-1-i] = ss[n-i] + arr[n-i];
}

Dodając scanf tutaj zepsułeś całą pętlę. Powyższy kod jest równoważny:

for (i=1; i<n; i++) 
    scanf ("%d",&arr[i]); 

ps[i] = ps[i-1] + arr[i-1];
ss[n-1-i] = ss[n-i] + arr[n-i];

Dodaj osobną pętlę do wczytywania:

for (i = 0; i < n; ++i)
    scanf("%d", &arr[i]);

for (i=1; i<n; i++) {
    ps[i] = ps[i-1] + arr[i-1];
    ss[n-1-i] = ss[n-i] + arr[n-i];
}

Pozostało 580 znaków

2015-01-06 11:44
1
#include <stdio.h>
#include <stdlib.h>

int main()
  {
   unsigned n;
   printf ("podaj wielkosc tablicy :");
   scanf ("%u",&n); // podaj n
   int *arr=(int*)malloc(n*sizeof(int));
   printf ("podaj liczby do tablicy:\n");
   int i,sum=0,half=0,value;
   for(i=0;i<n;sum+=arr[i++]) scanf ("%d",&arr[i]);
   for(i=0;(i<n)&&(half<sum);half+=value,sum-=value,++i) value=arr[i];
   if(half==sum) printf("sum(0..%d)=sum(%d..%d)=%d\n",i-1,i,n-1,half);
   else printf("nie ma takiej liczby\n");
   //system("PAUSE"); // zamiast bawić się w te rzeczy zamień IDE na jakieś z tego tysiąclecia.
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-06 16:38

Pozostało 580 znaków

2015-01-06 15:41
0

_13th_Dragon czemu n bedzie unsigned?
twonek czy to juz jest caly poprawny kod, czy cos jeszcze musialbym tu dopisac?

A jak wyobrażasz sobie ujemny rozmiar tablicy? - Endrju 2015-01-06 15:50

Pozostało 580 znaków

2015-01-06 15:49
0

Zmień, odpal, sprawdź. Nie odpaliłem tego, więc nie wiem czy to wszystko.

Pozostało 580 znaków

2015-01-06 16:32
0

_13th_Dragon dalem wielkosc tablicy 4 i wpisalem liczby 1,2,3,4. powinno wyskoczyc nie ma takiej, bo 0!=10, 1!=9, 3!=4, 6!=0 oraz 10!=0. w programie wyskakuje: sum(0..2)=sum(3..3)=6. kompletnie nie rozumiem o co tu chodzi

No właśnie, ani w tym ani w swoim - kompletnie nie rozumiesz o co chodzi. Już poprawiłem warunek. - _13th_Dragon 2015-01-06 16:39

Pozostało 580 znaków

2015-01-06 16:33
0

twonek po podaniu drugiej liczby wyskakuje mi ze nie ma takiej liczby niezaleznie od tego jaka bedzie jej wielkosc

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){

    int n;
printf ("podaj wielkosc tablicy :");
scanf ("%d",&n); // podaj n
int arr[n];
printf ("podaj liczby do tablicy");
 // wypełnij tablicę arr liczbami
int ps[n], ss[n]; // ps - prefix-sum, ss - sufix-sum
int i;
ps[0] = 0;
ss[n-1] = 0;
for (i=1; i<n; i++);{
    scanf("%d",&arr[i]);
  ps[i] = ps[i-1] + arr[i-1];
  ss[n-1-i] = ss[n-i] + arr[n-i];
}
int index = -1;
for (i=0; i<n; i++);
 scanf("%d", &arr[i]);
 for (i=1; i<n; i++) {
    ps[i] = ps[i-1] + arr[i-1];
    ss[n-1-i] = ss[n-i] + arr[n-i];
}
{
  if (ps[i] == ss[i]) index = i;
}
if (index == -1) // nie ma takiej liczby 
{
printf ("nie ma takiej liczby");
}
else
{
printf ("arr[index]");    
    } // wypisz arr[index]

system("PAUSE");   
return 0;
}

Pozostało 580 znaków

2015-01-06 16:35
0

Bo Twój kod ma się do mojego kodu jak świnka do świnki morskiej.
BTW polecam kod wrzucić tutaj: http://format.krzaq.cc/ to pewne błędy od razu zauważysz.

edytowany 1x, ostatnio: twonek, 2015-01-06 16:41

Pozostało 580 znaków

2015-01-06 16:55
0

bardzo prosze o wyrozumialosc. dopiero co zaczalem sie uczyc a tu juz kolokwium. ciezko jest mi pogodzic nawet tryb zaoczny z praca, a znalezc czas na nauke jeszcze trudniej.
za glupie pytania z gory przepraszam. _13th_Dragon skopiowalem Twoj kod skompilowal sie ale np przy wielkosci tablicy 5 i liczbach 1,2,3,3,0 krzyczy ze nie ma takiej liczby a powinien podac ta srodkowa trojke bo sumy liczb po jej lewej oraz prawej stronie sa takie same. 0+1+2=3 i 3+0+0=3

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0