ďťż

Ładny brzuch

Witam!
Otoz chce mam wypelnic wektor podanymi liczbami a nastepnie przypisac do nowego
wyraz dodatnie pomnożone przez swoj indeks (tab[i]*i)

dla mnie to cos takiego..
jednak liczby nie sa mnozone (wystepuje bład ze zamiast konkretnej cyfry pojawia się -857473)
konieczna petla while w drugiej czesci

#include<stdio.h> int main() { const int MAX=20; int tab[MAX]; int tab2[MAX]; int i,j,n; printf("Podaj rozmiar tablicy: "); scanf("%d",&n); for (i=0;i<n;i++) {  printf("Podaj x[%d] wyraz tablicy: ",i);  scanf("%d",&tab[i]);   } /* for (i=0;i<n;i++) printf("%d ",tab[i]); */ while(tab[i]>0) { for(i=0;i<n;i++) tab2[j]+=tab[i]*i; } for (j=0;j<n;j++) printf("%d ",tab2[j]); return 0; }
Użytkownik Crisu edytował ten post 18 maj 2005, 18:10


Napisz co dokladnie ma robic program.

1. Wpisuje do tab[i] ilosc elementów n
2. Wybieram liczby wpisane wieksze od zera i mnoże je przez ich indeks tab[i]*i
3. Wyswietlam liczby wymnożone

#include <iostream> #include <stdlib.h> #include <stdio.h> int main(int argc, char *argv[]) { const int MAX=20; int tab[MAX]; int tab2[MAX]; int i,j,n; printf("Podaj rozmiar tablicy: "); scanf("%d",&n); for (i=0;i<n;i++) { printf("Podaj x[%d] wyraz tablicy: ",i); scanf("%d",&tab[i]);   } for(i=0;i<n;i++)   {   tab2[i]=tab[i]*i;   // tu byl blad    tab2[j]  ???? jakie j ????? BŁĄD   } for (j=0;j<n;j++)    {    printf("%d ",tab2[j]);    }  system("PAUSE");  return 0; }



prosze
#include <iostream> #include <stdlib.h> #include <stdio.h> int main(int argc, char *argv[]) { const int MAX=20; int tab[MAX]; int tab2[MAX]; int i,j,n,nowaTablica; nowaTablica=0; printf("Podaj rozmiar tablicy: "); scanf("%d",&n); for (i=0;i<n;i++) { printf("Podaj x[%d] wyraz tablicy: ",i); scanf("%d",&tab[i]);   } for(i=0;i<n;i++)   {   if(tab[i]>0)     {     tab2[nowaTablica]=tab[i]*i;           // jak wieksze od zera to działasz :)     nowaTablica++;     }   } cout<<nowaTablica<<endl;    // tak dla sprawdzenia ile bylo dobrych for (j=0;j<nowaTablica;j++)    {    printf("%d ",tab2[j]);    }  system("PAUSE");  return 0; }

#include <iostream> using namespace std; int main (void) {    cout << "Podaj rozmiar tablicy: ";    int n;    cin >> n;    int *tab;    tab = new int[n];        for (unsigned int i = 0; i<n;i++)    {        cout << "tab[" << i << "]=";        cin >> tab[i];    }        for (unsigned int i = 0; i<n; i++)    {        tab[i]=tab[i]*i;    }        cout << "Po przemnozeniu: " << endl;        for (unsigned int i = 0; i<n; i++)    {        cout << "tab[" << i << "]=" << tab[i] << endl;    }                        delete [] tab;    return 0; }    

Sorry, nie odswiezylem strony :)
Użytkownik teS edytował ten post 18 maj 2005, 18:58
thx

Tylko teraz czy ktos moglbys zaproponowac jak za pomocą petli while wybrac z tego wektora liczby wieksze od zera i je wymnozyc przez indeks?
I czemu nie moze byc w zaznaczonym jako blad miejscu tab2[j]? Przeciez liczby przypisujemy do nowego wektora?

W kolejnej petli while() znajdowane sa liczby wieksze od zera i po pomnozeniu przez indeks wyswietlace w postaci i,x[i], x[i]*i
tak dokladnie brzmi tresc:P
Użytkownik Crisu edytował ten post 18 maj 2005, 19:09

Tylko teraz czy ktos moglbys zaproponowac jak za pomocą petli while wybrac z tego wektora  liczby wieksze od zera i je wymnozyc przez indeks?
a tu to co ja napisałem ??? czy tylko do while się ograniczasz ?? nie można sobie ułatwić życia inna instrukcją ??
for(i=0;i<n;i++)  {  if(tab[i]>0)    {    tab2[nowaTablica]=tab[i]*i;           // jak wieksze od zera to działasz :)    nowaTablica++;    }  }

I czemu nie moze byc w zaznaczonym jako blad miejscu tab2[j]? Przeciez liczby przypisujemy do nowego wektora?
A nadałeś wartość początkową dla j ??????? chyba nie!!!! prawda ?? :)


W kolejnej petli while() znajdowane sa liczby wieksze od zera i po pomnozeniu przez indeks wyswietlace w postaci i,x[i], x[i]*i
tak dokladnie brzmi tresc:P

obudziłeś się w pore - no tak spiący książe :rolleyes:

ok, nie rozumiem tylko jednej rzeczy:)
Wiec tak czemu wprowadzamy rozmiar "nowatablica" a przy wypisywaniu odwołujemy się do "j" ?

Eh.. bo tu jest błąd ;)
tzn. powinno być chyba:
for(i=0;i<n;i++)
{
if(tab[i]>0)
{
tab2[i]=tab[i]*i; // jak wieksze od zera to działasz :)
nowaTablica++;
}
}

Tak BTW. zastanawiam się czy napisać coś n/t co to jest wektor, czym się różni od tablicy, i dlaczego zamiast powyższej pętli użyć std::accumulate ;)


Eh.. bo tu jest błąd ;)
tzn. powinno być chyba:
for(i=0;i<n;i++)
{
if(tab[i]>0)
   {
   tab2[i]=tab[i]*i;           // jak wieksze od zera to działasz :)
   nowaTablica++;
   }
}

Tak BTW. zastanawiam się czy napisać coś n/t co to jest wektor, czym się różni od tablicy, i dlaczego zamiast powyższej pętli użyć std::accumulate ;)


ok, nie rozumiem tylko jednej rzeczy:)
Wiec tak czemu wprowadzamy rozmiar "nowatablica" a przy wypisywaniu odwołujemy się do "j"  ?

Ok teraz to probuje wypisac w nastepujacej postaci
i= x[i]= x[i]*i=
Wszyskto ladnie dopoki nie wpisze wartosci ujemnych:/
Sorki, za glupie pytania ale jak widac dopiero zaczynam:)
pozdro

#include<stdio.h> int main() { const int MAX=20; int tab[MAX]; int tab2[MAX]; int i=0,j=0,n; printf("Podaj rozmiar tablicy: "); scanf("%d",&n); if(n>MAX) { printf("Za duzy wymiar"); } else { for (i=0;i<n;i++) {  printf("Podaj x[%d] wyraz tablicy: ",i); scanf("%d",&tab[i]);   } int x=0; for(i=0;i<n;i++) {  if(tab[i]>0)  {  tab2[x]=tab[i]*i;  x++;  } } for (j=0,i=0;i<n,j<x;i++,j++) { printf("i=%d  x[i]=%d  x[i]*i=%d \n",i,tab[i],tab2[j]); } } return 0; }
Użytkownik Crisu edytował ten post 18 maj 2005, 20:03
A no racja; pisałem to nie bardzo czytając resztę kodu; sry ;)
jest tam nowaTablica++;
Niech to będzie dla wszystkich nauczka - nie pisać postów bez zrozumienia tematu ;)

A z tym nawykiem do std:: to chodzi Ci o nawyk korzystania z STL, czy o samo pisanie 'std::' zamiast using namespace std;? Bo jeśli o te drugie - to cóż, po to mamy namespace'y, żeby z nich korzystać, a nie ograbiać się z ochrony przed konfliktami nazw. Poza tym lubię zapis z std::, kwestia czysto subiektywna ^^


Ok teraz to probuje wypisac w nastepujacej postaci
i= x[i]= x[i]*i=
Wszyskto ladnie dopoki nie wpisze wartosci ujemnych:/

U mnie działa wszystko dobrze! Napisz dokładniej w czym problem, to postaram się pomóc. Bo tak to nawet nie wiem o co Ci chodzi.


A z tym nawykiem do std:: (...)
Poprostu zaciekawiła mnie składnia :) Teraz już obczajam o co chodzi

W momencie gdy program trafi na wyraz ujemny, to w miejscu x[i]*i dostaje wynik nie wiadomo skąd ( i=3 x[i]=-4 i*x[i]=20???) i program przerywa działanie lub następne liczby są już mnożone nie poprawnie

jeszcze raz zapodam moje wyświetlanie:)

for (j=0,i=0;i<n,j<x;i++,j++) { printf("i=%d  x[i]=%d  x[i]*i=%d \n",i,tab[i],tab2[j]); }
Użytkownik Crisu edytował ten post 18 maj 2005, 20:42
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •