Nauka programowania w C


(Druii) #1

Witam

Dostalismy kiedys program do przeanalizowania krok po kroku. Niestety ja nie nadarzalem za 'mozgami' u nas na roku, ktorzy robili to przy tablicy, a informacje te sa niezbedne zeby zaliczyc semestr. Moje pytanie i prosba brzmi, czy dalby ktoś rade wytlumaczyc linijka po linijce znaczenie kodu?

#include 


char *zm();

void ft();


int main()

{


static char a[2][30]={"KASIA", "OLA ULA "};

static int b[2][3]={1,2,3,11,12,13};


int i=0,j; char *p;


printf("%s\n",a[0]);

printf("%s\n",p=z,(&a[1][0]));

*(a[1]+10)='&';

strcat(a[1],p);


printf("%s\n",a[1]);

ft(b[1]);


for(i=0;i<2;i++)

{

	for(j=0;j<3;j++)

	printf("%3d ",b[i][j]);

printf("\n");

}

}


void ft(int *x)

{

int i;

for(i=-1;<2;i++)

{

i=i+1;

printf("x[%d]=%d \n",i,x[i]);

x[i]=2*x[i];

}

}


char *zm(char *x)

{

static char t[2][20]=("Andrzej oraz Ola","Marek i x" };

*&t[1][0]+8)='?';

*(x+4)='+';

return t[1];

}

dla niektorych byc moze to latwe, ja chcialbym to zalapac, a samemu ciezko wykombinowac. Czytam aktualnie ksiazke Stephen Praty, juz zrobilem ogromne postepy, ale nie idzie mi az tak dobrze zeby to rozszyfrowac. Bede bardzo wdzieczny jesli znajdzie sie ktos kto bedzie chcial pomoc i wytlumaczyc.

z gory dziekuje i pozdrawiam


(Frankfurterium) #2

Na tym forum nie rozwiązuje się zadań i zwyczajowo nie pomaga się w tematach typu "Nie wiem, jak się za to wziąć, pomóżcie".

Za to myślę, że nie będzie problemu, kiedy sam wykażesz odrobinę dobrej woli i napiszesz, do czego już sam doszedłeś - opisz linijki, które rozumiesz (choćby w komentarzach) i dookreśl, z którymi/od którego miejsca masz problem. Wtedy na pewno znajdzie się ktoś pomocny.

I tak nieco z boku - najlepiej popraw wcięcia kodu. Będzie łatwiej i tobie, i pomagającym.


(Druii) #3

Podesle to w sumie moje wypociny tego czym moze byc kazda linijka kodu . Nie pomyslalem o tym. W sumie moglismy sie troche nie zrozumiec, bo ten program juz jest przestarzaly. Na poprawie takiego nie odstaniemy, ale ze taki byl na 1 terminie to wrzucilem. O sam program mi nie chodzi tylko o jego tresc :slight_smile:

-- Dodane 05.09.2012 (Śr) 15:25 --

#include 


char *zm(); //deklaracja programu-wskaznika typu char ktory nie zwraca wartosci i nie pobiera argumentow

void ft(); //deklaracja programu ktory nie zwraca wartosci i nie pobiera argumentow


int main()

{


static char a[2][30]={"KASIA", "OLA ULA "}; // statyczna tablica znakowa o 2 kol i 30 wierszach

static int b[2][3]={1,2,3,11,12,13}; //statyczna tablica liczbowa 2 na 3


int i=0,j; char *p; //deklaracja zmiennej i,j i wskaznika p


printf("%s\n",a[0]); //wyswietlanie pierwszego elementu tablicy a (czyli KASIA)

printf("%s\n",p=zm(&a[1][0])); //drukowanie za posrednictwem funkcji zm ktora bierze argument z tablicy a

*(a[1]+10)='&'; //wskaznik adresu 10-tego tablicy a ma byc rowny '&'

strcat(a[1],p); //laczy 'KASIA' ze wskaznikiem p.. ale co bedzie wynikiem nie mam pojecia


printf("%s\n",a[1]); //drukuje wynik funkcji strcat(a[1],p)

ft(b[1]); //funkcja ft bierze argument tablicy b[1] (skaczemy do funckji ft)


for(i=0;i<2;i++) //

{ //

	for(j=0;j<3;j++) //

	printf("%3d ",b[i][j]); //

printf("\n"); //drukowanie tablicy b

}

}


void ft(int *x) //naszym x bedzie b[1] czyli raczej 1


{

int i; //deklaracja zmiennej i

for(i=-1;i<2;i++) //petla wykona sie 4 razy 

{

	i=i+1; //teraz wynika ze 2 razy (nie wiem czemu tak.. moglo byc chyba w petli i=i+2 zamiast i++;

	printf("x[%d]=%d \n",i,x[i]); //drukujemy co druga wartosc tablicy x (czyli b) - nie wiem co bedzie wynikiem

	x[i]=2*x[i]; //podwojenie kazdej wartosci tablic x (wracamy do Main)

}

}


char *zm(char *x) // funkcja zwraca wartosc char i pobiera argument x (tab a)

{

static char t[2][20]=("Andrzej oraz Ola","Marek i x" }; //tworzy tablice znakowa t

*(&t[1][0]+8)='?'; //nawet nie wiem co to moze byc

*(x+4)='+'; //nawet nie wiem co to moze byc

return t[1]; //zwraca 1 wartosc tablicy t do tablicy a (wracamy do main)

}

OCZYWISCIE ten kod to moja interpretacja.. dlatego prosze sie tym nie sugerowac, tylko mnie poprawiac.