przekazywanie tresci w wskazniku

0

Na poczatku wpisujemy elementy wart/wag po czym wykonujemy dzialania elemty sa w a[i]/b[i] (nr elementu w pentli jako i) wskaznik danego elementu jest w c[i] co zrobic by na koncu zamians zmiennej (k- w tym miejscu) bylo wyswietlane ktory to element. Jezeli wpisze i to bedzie obecna tablica c[i] a chodzi o element ten z poczatku,,, ma ktos jakis pomysl.

wydaje mi sie ze trzeba tu stworzyc jakis wskaznik przypisac go do i i wyswietlic ale nie umiem obslugiwac wskaznikow...;/

printf("waga elementu %d: b[%d] \n",i ,b[i]);
c[i]=a[i]/b[i];
printf("wsk a[%d]/a[%d]:  c[%d] \n", a[i],b[i],c[i]);
puts("===================");
}


for(j=0;j<n;j++)
	{
	for(i=0;i<(n-1);i++)
		{
		if(c[i]>c[i+1]) {
               		temp = c[i];
             		c[i] = c[i+1];
        		c[i+1] = temp;
    				 }
		}
	}
for(i=0;i<n;i++){
printf("wsk c[%d]\n",c[i]);
}

for(i=0;i<n;i++)
	{
		if(c[i]<n)
		{		
		printf("Element z wsk c[%d] do plecaka  \n", c[i]);
		printf("Element %d do plecaka \n", k); // tu edytowac
				
		}
}
 
  
	return 0;
}
0

for(i=k=0;i<n;i++) ...
... printf("Element %d do plecaka \n", ++k); // tu edytowac

0

nie dziala

0

===================
wartosc elementu 0: a[4]
waga elementu 0: b[4]
wsk a[4]/a[4]: c[1]

===================
wartosc elementu 1: a[50]
waga elementu 1: b[1]
wsk a[50]/a[1]: c[50]

===================
wartosc elementu 2: a[50]
waga elementu 2: b[5]
wsk a[50]/a[5]: c[10]

wsk c[1]
wsk c[10]
wsk c[50]
Element z wsk c[1] do plecaka
Element 1 do plecaka

0

Jeżeli komputer nie włączysz do prądu to też nie działa.

0

..bardzo zabawne
przed wyswietleniem wsk jest sortowanie ktore wszytko psuje gdy je wywalam to jest ok ale ono musi byc a twoja zmiana w petli nic nie zmienia

0

A miało coś zmieniać ? Zadałeś pytanie jak wyświetlić numer kolejnego dodawanego elementu, i dostałeś na to pytanie odpowiedź. Fakt że próbowałeś użyć tej odpowiedzi do innych celów lub fakt że pytanie było niewłaściwie postawione wcale nie oznaczają że to co podałem nie działa.

0

Kod schematycznie to:

  • wpisanie elementow
    -wyliczenie wsk -> c[i]
    -posortowanie c[i]
    -wypisanie elementow

z twojej odpowiedzi wyszlo ze wyswietla nr elementow po sortowaniu , a ma wyswietlac te przed sortowaniem
np
Element nr 0 z wsk 1 do plecaka jako 1
Element nr 2 z wsk 1 do plecaka jako 2
Element nr 5 z wsk 2 do plecaka jako 3
etc

0

Teraz dopiero zauwazylem ze kod scielo , sry

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



int main (void)
{
int n;
int i;	
int wartosc;
int rozmiar;
int a[100];
int b[100];
int c[100];
int d[100];
int temp=0;
int j;
int x;
printf("Podaj rozmiar plecaka: \n");
scanf("%d",&n);
printf("rozmiar %d   \n",n);
if(n<=0){
puts("ROZMIAR NIE MOZE BYC UJEMNY!!!");
exit(1);
}
puts("===================");


for(i=0;i<n;i++)
{
puts("===================");
d[x]=i;
printf("Podaj wartosc i wage przedmiotu: %d\n",d[x]);
x++;
scanf("%d",&wartosc);
a[i]=wartosc;
scanf("%d",&rozmiar);
b[i]=rozmiar;

if(b[i]<=0)
{
puts("WAGA NIE MOZE BYC UJEMNA!!!");
exit(1);
}
if(a[i]<0)
{
puts("WARTOSC NIE MOZE BYC UJEMNA!!!");
exit(1);
}
puts("===================");
}


for(i=0;i<n;i++)
{
puts("===================");
printf("wartosc elementu %d:	a[%d] \n",i , a[i]);
printf("waga elementu %d:	b[%d] \n",i ,b[i]);


c[i]=a[i]/b[i];

printf("wsk a[%d]/a[%d]:	c[%d] \n", a[i],b[i],c[i]);
puts("===================");
}


puts("****************************************************");
printf("DO PLECAKA WEJDA ELEMENTY\n");
for(i=0;i<n;i++) {
if(c[i]<=n)
		{		
		printf("Element %d z wsk c[%d] do plecaka  \n",i, c[i]);		
		}

}
//kkk
printf("KOLEJNOSC ELEMENTOW W PLECAKU \n");
for(i=j=0;j<n;j++)
        {
        for(i=0;i<(n-1);i++)
                {
if(c[i]<=n)
{

                if(c[i]>c[i+1]) 
				{
				temp = c[i];
                             c[i] = c[i+1];
                             c[i+1] = temp;
                                 }
		
}
                }

        }

for(i=x=0;i<n;i++)
{
		if(c[i]<=n)
		{

printf("Element z wsk c[%d] do plecaka jako %d  \n", c[i],d[x] );	
x++;		

		}
}




	return 0;
}
0

d[x]=i; lub d[x]=c[i]; w zależności od tego co chcesz uzyskać.
printf("Element z wsk c[%d] do plecaka jako %d \n", c[i],++x );

0

Twoja wczesniejsza rada jakos nie ima sie do problemu. W innym miejscu radzili mi zebym przerobil kod na strukture i ze za pomoca tego bedzie mi latwiej no ok, jakos zrobilem ale stanolem w tym samym momencie. Jeszcze raz.
Tu gdzie mamy linijke

for(i=0;i<n;i++){
		if(przedmiot.nr.wsk[i]<=n){
			printf("Element o nr ... wsk %d do plecaka jako %d \n",przedmiot.nr.wsk[i],i);
		}
	}

ma ona byc odpowiedziala z wyswietlenie |NR ELEMENTU<przed posortowaniem tablicy wartsc[]/waga[] | wsk po posortowaniu , czyli tu tablica wartosc[] | i ostatnie element jako 1.2. czyli iteracja z pentli |
Nie moge poradzic sobie z nr elementu <miejsce ...>

Caly kod to
-wpsywanie danych
-dzialania -wyliczenie wsk
-posortowanie tablicy z wsk
-wyswietlenie elementow po posortowaniu ?

Chyba teraz rozjasnilem problem i o ile ktos umie to pomoze ...

Calosc:

#include<stdio.h>

int n,i,j,t;
int * p;

int main()
{
  typedef struct typ1
  {
    int wartosc[100], waga[100];
		int wsk[100];
	 }typ1;

	typedef struct typ2
  {
    typ1 nr;
  } typ2;


typ2 przedmiot;

//wybieranie rozmiaru plecaka

	printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");	

  printf("Podaj rozmiar plecak: \n");
  scanf("%d",&n);

	printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
	
//dodawanie kolejnych elementow

	for(i=0;i<n;i++){
	p = & i;
	p++;
  	printf("podaj wartosc i wage przedmiotu nr %d :\n",i );
		scanf ("%d", &przedmiot.nr.wartosc[i]);
  	scanf ("%d", &przedmiot.nr.waga[i]);
	}
	
	printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

//wyswietlanie

	for(i=0;i<n;i++){
		printf("ElEMENT NR %d posiada wartosc %d i wage %d \n",i,przedmiot.nr.wartosc[i],przedmiot.nr.waga[i]);
	}

	printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

//wyliczenie wsk

	for(i=0;i<n;i++){
		przedmiot.nr.wsk[i]=przedmiot.nr.wartosc[i]/przedmiot.nr.waga[i];
		printf("ELEMENT NR %d ma wsk %d \n",i,przedmiot.nr.wsk[i]);
	}

//sortowanie wsk


	for(j=0;j<n;j++){
		for(i=0;i<(n-1);i++){
			if(przedmiot.nr.wsk[i]>przedmiot.nr.wsk[i+1]){
				t = przedmiot.nr.wsk[i];
				przedmiot.nr.wsk[i] = przedmiot.nr.wsk[i+1];
				przedmiot.nr.wsk[i+1] = t;
			}
		}
	}

//wyswietlenie wsk

printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

	for(i=0;i<n;i++){
		if(przedmiot.nr.wsk[i]<=n){
			printf("Element o nr ... wsk %d do plecaka jako %d \n",przedmiot.nr.wsk[i],i);
		}
	}

//kombinacje

printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

	for(j=0;j<n;j++){
		printf("Numer: %p\n", &i );
		printf("Numer x: %d\n", i);	
	}





  return 0;
}

0

Problem polega na tym że mówisz co zrobiłeś i jest oczywiste że zrobiłeś źle, ale nie mówisz co chciałeś zrobić, więc trzeba to zgadywać.
Więc ja zgaduje poprawnie względem algorytmu który próbujesz zbudować, z tym że to jest niepoprawnie wg ciebie ponieważ nie próbujesz zbudować poprawnego algorytmu.

0

problemu juz jasniej wytlumaczyc nie umiem, rozwiazanie ma odpowiadac programowi a nie algorytmowi <chyba>... juz sam nie wiem drugi dzien nad tym sie glowie ...

0

w dziejszym poscie juz zawarlem chyba wszystko

<po prostu chce przekazac czy zapisac, pozniej wyswietlic w jakis sposob kolejny nr elementu ktory wpisuje do tablicy czy struktury.. , tylko nie tego sprzed sortowania , tego zas po sortowaniu>

tam pisales jeszcze o bledzie z sortowaniem ze if psuje sortowanie , tak zauwazylem go wczesniej ale to nie mialo nic wspolnego z zadanym pytaniem, chodz i tak dziekuje

0

I na to pytanie dostałeś odpowiedź:

d[x]=i;  // tak zapisujesz nr elementu
//d[x]=c[i]; // tak zapisujesz wartość
printf("Element z wsk c[%d] do plecaka jako %d\n",c[i],++x); 

x - ilość włożonych elementów
d[i] gdzie: 0 <= i < x - indeksy włożonych elementów
c[d[i]] gdzie: 0 <= i < x - wartości włożonych elementów

Z tym że, ponieważ sam nie rozumiesz co chcesz zrobić to oczywiście ta odpowiedź nie może ci pasować.

0

no ok tylko
d[x]=i;
//i tu niby zapisuje sie nr
ale jak chce to potem wyswietlic to musze wyzerowac x w pentli czyli wszystko idzie od 0 czyli 1,2,3.,. w przeciwnym wypadku mam jakies liczby z kosmosu, moze to adresy komorek nie wiem na , albo przekazuje sie tylko ostatnia wartosc z iteracji pentli i przed sortowaniem np n =5 czyli pętla wykona sie 5 czyli przejdzie 5
wyswietlajac
d[5]
d[5]
d[5]
d[5]
d[5]

c[d[i]] --pierwszy raz widze taki zapis? mozna tak wgl zapisywac?

0

problem rozwiazany, dzieki za pomoc

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