a ja podtrzebuje na informe, zeby ktos mi szybko wylozyl robienie stron w html. szczegolnie, jakby ktos mogl mi pokazac, jak sie robi strone podzielona na 3 czesci, gdzie u gory jest menu, ktore sie nie zmienia, i laduje kolejne strony w dolnym prawym okienku, a lewe dolne pozostaje puste... narazie znam podstawy czyli:
<html>
<head></head>
<body>
<table><tr>
<td> <a href=http://wp.pl target=gl> linczek </a>
<a href=2.htm target> drugi linczek </a>
<a href=3.htm> trzeci linczek</a>
<a href=4.htm> czwarty linczek</a>
<a href=1.htm> strona menu</a>
</td>
</tr>
<tr>
<td>tu<br>ma<br>byc<br>pus<br>to<br></s></a></u></td>
<td>a tu ma sie otwierac cos innego tylko ze <br> nie wiem co i jak:|</td>
</tr>
</table>
</body>
</html>
mam do dyspozycji program ezhtml...
A na kiedy to masz?
Bo jak na "za trochę" to polecam http://republika.onet.pl/-2,1,1645,artykuly.html
Sam się z tego uczyłem.
na czwartek... wiem, wiem, jeszcze duzo czasu:P wlasnie mi koleznka ( :oops: ) zwrocila uwage, ze to powinna byc ramka... nic nie jarze...
Ramka czyli znacznik FRAME
Nie wiem po co tego uczą, skoro tak naprawdę więcej z tym kłopotu niż korzyści i mało gdzie się tego używa.
Tutaj masz. Do czwartku powinieneś zajarzyć ;-)
http://republika.onet.pl/0,1,1645,1670,artykuly.html
no dzieki... to pomoglo, juz mam to o co chodzilo:d naszczescie ostatnio facet nam powiedzial, ze nie musimy tego znac na pamiec, tylko umiec to znalezc;) czyli umiec szperac szybko w necie... w ostatecznosci, mialbys cos przeciwko, gdybym tu sobie powklejal sciagi do brudnopisu?
Ale sciagać nie należy ;-)
Linki do podręcznika Ci nie wystarczą?
No w ostateczności...
---------- 22:36 05.12.2005 ----------
bo to chodzi o predkosc, bo mozna miec notatki, ale tez dobrze jest miec wszystko na tacy, bo koles potrafi cos, co powinno sie robic 2 godziny, dac na to 15 minut... no mysle ze w ostatecznosci bedzie nieco wiecej... (drugi facet od informy robi 90 sekundowe kartkowki z pascala (choc jego zdaniem to i tak za duzo)) dlatego unikam go szerokim lukiem...
---------- 22:36 ----------
a jeszcze pytanie techniczne... ewentualna sciage, daloby sie wkleic jakos do 'dziennika' z mojego konta? bo sie na tym nie znam...
Dołączam się do biadolenia nt. frame'ów. Kto w dobie PHP tego uczy???
Do dziennika...hmmm...moze byc problem. A nie mozesz na przyklad wyslac to do siebia mailem w pliku tekstowym? Ewentualnie wrzucic na edysk?
---------- 22:55 05.12.2005 ----------
no z tym moze byc problem... ale jheszcze sie zastanowie nad drukowaniem;) cos sie wykombinuje, spr dopiero w czwartek;) narazie sprobuje sie czegos nauczyc(lol!) ;)
---------- 18:42 18.01.2006 ----------
ma ktos z was jakis sposob, aby zdjecie z tla dopasowywalo sie do okna przegldarki?
O ile wiem, nie ma takiej możliwości. Możesz conajwyżej ustalić tło, czyli sprawić, aby stało w miejscu podczas przewijania.
no do tego wlasnie doszedelm...:D i to bylo moj zamierzony efekt... do tego wyskalowalem piskelami odpowiednio zdjecie tla do mojej przegladarki...
no wlasnie, do mojej przegladarki... w innych znajduje sie bialy pasek u dolu i jest uciety tekst z prawej... chcecie, to skontrolujcie (http://bempes.story.pl)
Ja bym się zastanowił, czy tła nie rozjaśnić i pisać na czarno.
Poza tym jak ustawisz kolor tla, na podobny do kolorystyki obrazka, to nie bedzie bardzo widać, że się kończy za wcześnie ;)
No i może spróbuj przenieść style do osobnego pliku, który będziesz dołączał w tagach <meta>
--edit--
Siep omyliłem.. nie w meta, tylko poniżej w czymś takim:
<LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
no dobra, a jak to sie robi? wogole pierwszy raz sie spotkalem z czyms takim jak style css (az dziw ze sie udalo)
To sie przyzwyczajaj, bo tak się powinno robić strony.
W html zawartość, w css formatowanie.
Robisz plik style.css w którym masz np swoje:
body
{
background-repeat:no-repeat;
background-image:"http://img501.imageshack.us/img501/6465/p9130012kadr9vq.jpg";
background-attachment: fixed;
color:white;}
A potem linkujesz go w pliku html/php
<LINK REL="StyleSheet" HREF="style.css" TYPE="text/css">
I teraz jeżeli maswz ileś tam stron, w ten sposób zrobionych, to robiąc zmianę w tym jednym pliku, możesz we wszystkich na przykład zmienic obrazek tła.
aaaaaaaaaa.... a ten plik style.css powinien sie znajdowac na serwerze, czy moze byc np. u mnie na kompie?
Zajzyj na stronke:
http://www.w3schools.com/
Tam znajdziesz mnostwo rad odnosnie CSS. Jest caly dzial: Learn CSS. A z oddzielnym plikiem stylow to po prostu musisz stworzyc plik o rozszezeniu .css (i oczywiscie wrzucic go na serwer razem z plikami html). Potem zadeklarowac go w sposob jaki podal Mchl w czesci <head>. Jako maniak czystosci kodu dodam sugestie, aby pisac juz wszystkie znaczniki malymi literkami. Przegladarki lepiej to znosza - XHTML zaczyna wypierac zwyklego HTML-a.
Słusznie. Muszę poprawić skrypt.
:] to tak tylko na marginesie bylo. Bo raczej stronki napisene UPPERCASE-m beda dzialac jeszcze wiele lat. Ale milo jest wiedziec ze sie spelnia najnowsze standardy :]
Też to lubię, dlatego poprawię ;)
no dobra... sprawa wyglada tak: mielismy zrobic strone szkoly no i jakos tak wyszlo ze facet co chwile zmienia decyzje w kazdym badz razie musze to wstawic na jakis server...
kumple mi doradzili republike.pl bo nie ma wkurzajacych reklam. mam problem z obrazkami... poprostu sie nie laduja... nie chce wiedziec czemu (bo pewnie to kwestia ulozenia plikow w katalogach na serwerze) ale chce wiedziec, co zrobic zeby dzialalo?
o to link jak to wyglada http://bempes.republika.pl
Jeśli na dysku u Ciebie strona działa i skopiowałeś wszystkie pliki i katalogi tak, że są jak u Ciebie na dysku, to może być kwestia wielkości liter w nazwie plików graficznych, albo nawet samych rozszezeń (ja tak miałem kiedyś).
Republika akurat ma reklamy. :/
Nie wiem co z tymi obrazkami. Wygląda na to że są, ale się nie wyświetlają. Jak się wpisze adres któregoś z nich, to pojawia się czerwony krzyżyk, a jak się wpisze cokolwiek innego, to wyskakuje 404...
Dziwne...
Możesz ewentulanie sprawdzić, czy przy przegrywaniu na serwer klient ftp nie pozamienial Ci dużych liter na małe i vice-versa.
heh... rzeczywiscie problem lezal w wielkosciach literek... problem jednak byl w tym, ze ja dodatkowo nie wiedzialem za bardzo jak ingerowac w te pliki... :| ale jakos sie udalo..
Total Commander! Najwygodniejsze co może być!
Te znaczki ďťż , które masz w rogu, to niestety sprawka tego, że Republika dożuca na początek strony swój skrypt. A te trzy znaki oznaczają, że dokument jest w formacie UTF-8. Gdy są na początku pliku nie są wyświetlane, ale na republice nie są :(
Nowoczesny kurs XHTML:
http://kurs.browsehappy.pl/
starszy kurs HTML:
http://webmaster.helion.pl/kurshtml/
BOM:
http://osiolki.net/faq/kodowanie
Kiedy ostatnio zaglądałem na republikę dobrze działo na reklamy i BOM zapisywanie dokumentów z rozszerzeniem *.shtml
Powodzenia.
Ciekawe, zwłaszcza jeśli da się przechytrzyć reklamy.
Jęsli chodzi o UTF, to ja po prostu zapisuje bez BOM przy pomocy [google]Notepad++[/google].
zamieszcze tu malutka petelke z c bho mi chwilowo po9trzebna jest
for (z=1;z<30;z++)
{
a[z]=getch();
printf("%c",a[z]);
if (a[z]==13)
{goto A;}
}
#include <conio.h>
#include <stdio.h>
int licz=30;
char a[30];
char b[30];
char c[30];
char d[30];
char e[30];
char f[30];
int z;
int main()
{
for (z=1;z<30;z++)
{
a[z]=getch();
printf("%c",a[z]);
if (a[z]==13)
{goto A;}
}
A:
printf("\n");
for (z=1;z<30;z++)
{
b[z]=getch();
printf("%c",b[z]);
if (b[z]==13)
{goto B;}
}
B:
printf("\n");
for (z=1;z<30;z++)
{
printf("%c",c[z]);
if (c[z]==13)
{goto B;}
}
getch();
return(0);
}
A strukturyzacja kodu gdzie?
Cytat: "Mchl"A strukturyzacja kodu gdzie?
hmmmmmm :D poszła na spacer ;)
(czytaj: co to jest?)to drugie to ja wkleiłem, bo nie kumalem o co chodzi w pierwszym, ale bartek ewidentnie cos zwalił, wiec napisalem swoje, lepsze :D
eeeeee co? :D to koledzy nie wiedzieli jak zrobic i wkleili calosc jak sie odwrocilem :D mowisz o wcieciach w kodzie? wciecia ja robie dopiero wtedy, jak nie moge sie polapac co tam pisze:P
Mowie o tym, żeby petle wsadzić do funkcji :D
no w sumie, to by sie przydalo:D
Jeśli mogę coś doradzić, jako student IV roku informatyki, odnośnie programowania w C/C++, to nie zaleca się stosowania goto, bo to unieczytelnia program. Mimo, że zaczynałem programować w czystym asemblerze, gdzie praktycznie musi się stosować skoki JMP :!: , odpowiedniki goto, a dopiero później przeszedłem do C, szybko zrezygnowałem z goto, faktycznie często unieczytelnia program, zawsze da się go uniknąć... :)
Ale to tylko na marginesie, sorki za wymądrzanie się :oops:
A najfajniejsza zabawa jest, jak się szuka sposobu, żeby tego skoku uniknąć. Bo nieraz się wydaje, że "sie nie da" ;). A tak naprawdę, zawsze się da.
no ja rozumiem ze lepiej nie, czytalem juz o tym, ale jestem na tak zaawansowanym poziomie, ze nie znam zadnego innego sposobu :P mam tez nie wiele czasu wiec nie szukam za bardzo...
#include <conio.h>
#include <stdio.h>
int main()
{
int licz=30;
char a[30];
char b[30];
char c[30];
char d[30];
char e[30];
char f[30];
int z;
const int ENTER = 13;
// wczytywanie do tablicy a
for (z=0; z<licz; z++)
{
a[z]=getch();
printf("%c",a[z]);
if (a[z]==ENTER)
{ break; }
}
printf("\n");
// wczytywanie do tablicy b
for (z=0; z<licz; z++)
{
b[z]=getch();
printf("%c",b[z]);
if (b[z]==ENTER)
{ break; }
}
printf("\n");
//tablica c, brakuje wczytywania, jest zrobione tylko wyswietlanie
// wyswietlane sa smieci !
for (z=0; z<licz; z++)
{
printf("%c",c[z]);
if (c[z]==ENTER)
{ break; }
}
getch();
return(0);
}
Można by np tak to zrobić. Poniżej uwagi co do poprzedniej wersji, mam nadzieję, że program i/lub uwagi pomogą Ci :wink: Na prawdę nie chcę wyjść na jakiegos bufona, ale pomóc :roll:
1) Indeksowanie w C jest od zera, to znaczy jak chcesz się dostać do pierwszego elementu, jaki jest w tablicy, to musisz zrobic a[0], stąd z ma być na początku chyba zerem.
2) W pętlach for miała być chyba zmienna licz zamiast 30.
3) Zamiast pisać 13, lepiej zdefiniować zmienną, która mówi, co to jest.
A zamiast pętli for można użyć while z odpowiednio zdefiniowanym warunkiem wyjścia z pętli i obędzie się bez break :)
Ponadto zmienną z można definiować lokalnie dla każdej pętli ( for(int z=0,z<licz,z++) {} ). Byłoby ładniej, bo zmienna jest zdefiniowana tylko tam, gdzie jest faktycznie wykorzystywana.
jak mam z=0 to nie wiedziec czemu, ucina mi pierwsza literke:P 13 nie jest jako zmienna, bo jest to kod entera, ktory w zamysle ma przerywac wczytywanie do tablicy, taki mialem zamiar z tym licz, ale cos mi sie sypalo... a ja wole definiowac zmienne globalnie, bo wtedy mam wszystko w jednym miejscu:P
Cytat: "bartsob5"jak mam z=0 to nie wiedziec czemu, ucina mi pierwsza literke:P 13 nie jest jako zmienna, bo jest to kod entera, ktory w zamysle ma przerywac wczytywanie do tablicy, taki mialem zamiar z tym licz, ale cos mi sie sypalo... a ja wole definiowac zmienne globalnie, bo wtedy mam wszystko w jednym miejscu:P
Mi nic nie ucina 8) W programie (dużym programie zwłaszcza) lepiej napisać ENTER zamiast 13, albo LiczDniTyg zamiast 7... Pewnie, że w tym programie na pierwszy rzut oka widać, o co chodzi z tą 13 ;) Na początku wolałem zmienne globalne. Niestety dostęp do nich jest wolniejszy, niż do lokalnych, co może spowolnić szybkość większego programu. W Twoim to oczywiście tez nie ma większego znaczenia. :D
Powodzenia z programowaniem :D
PS
Z takim zapleczem programistów powinniśmy stworzyć własny projekt w BOINC :wink:
Cytat: "marcin20_21"
PS
Z takim zapleczem programistów powinniśmy stworzyć własny projekt w BOINC :wink:
taki jest nasz cel:P od soboty z qba i kshonkiem stawiamy serwer:P
Cytat: "bartsob5"Cytat: "marcin20_21"
PS
Z takim zapleczem programistów powinniśmy stworzyć własny projekt w BOINC :wink:
taki jest nasz cel:P od soboty z qba i kshonkiem stawiamy serwer:P
a z naszym zapalem to moze postawimy go w ciagu najblizszych 20 lat :D
Cytat: "kshonek"a z naszym zapalem to moze postawimy go w ciagu najblizszych 20 lat :D
cicho, juz prawie wyczyscilem dysk:P
Cytat: "bartsob5"Cytat: "kshonek"a z naszym zapalem to moze postawimy go w ciagu najblizszych 20 lat :D
cicho, juz prawie wyczyscilem dysk:P
jak mozna pol dnia kopiowac 20gb..........
btw:
#include <stdio.h>
#include <conio.h>
int z, za=255, zb=255, znak=0, linia=0;
int main()
{
char a[za][zb];
printf("\nWpisz co chcesz:\n");
for(linia=0;linia<zb;linia++)
{
for(znak=0;znak<za;znak++)
{
a[linia][znak]=getch();
if(a[linia][znak]==13)
{
break;
}
printf("%c",a[linia][znak]);
}
if(a[linia][0]==13)
{
break;
}
printf("\n");
}
char tmp[za];
for(linia=0;linia<zb;linia++)
{
if(strcmp(a[linia], a[linia+1])>0)
{
strcpy(tmp, a[linia]);
strcpy(a[linia], a[linia+1]);
strcpy(a[linia+1], tmp);
if(linia!=0){linia=linia-1;}
}
}
printf("\nPosortowane:\n");
for(linia=0;linia<zb;linia++)
{
for(znak=0;znak<za;znak++)
{
if(a[linia][znak]==13)
{
break;
}
printf("%c",a[linia][znak]);
}
if(a[linia][0]==13)
{
break;
}
printf("\n");
}
getch();
return(0);
}
jak sie podoba? Bardzo? to dlaczego nie działa :/ jak wywale to co w 33 lini to tylko wyplywa wszytko o jeden, a z tym powinno teoretycznie działac....
1) char a[za][zb];
'za' i 'zb' powinny byś stałe(const) albo zdeklarowane za pomocą #define, inaczej kompilator nie zna ich rozmiarów w czasie kompilacji i nie wie, ile miejsca na nie przeznaczyć
2)dodałem #include <string.h>, inaczej mój kompilator nie znał funkcji strcmp i strcpy
to by było tyle, jak chodzi o samą kompilację
Jak chodzi o program, to po pierwsze, znakiem końca stringa (albo jak kto woli łańcucha znakowego) w C jest zero, zaznaczam że nie chodzi o kod ASCII zera, ale zero, stąd a[linia][znak]=0; to ważne, bo tak końca stringu szukają m.in. strcmp i strcpy.
W algorytmie sortowania trzeba chyba zmienić linia o 2 mniej, bo za chwile linia jest zwiększana o 1 (linia ++ ).
Zmieniłem wczytywanie, tak aby było tam zero. W związku z tym zmieniłem też sposób wyświetlania.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
int z, znak=0, linia=0;
const int za=10, zb=10;
int main()
{
char a[za][zb];
printf("\nWpisz co chcesz:\n");
for(linia=0;linia<zb;linia++)
{
for(znak=0;znak<za;znak++)
{
a[linia][znak]=getch();
if(a[linia][znak]==13)
{
a[linia][znak]=0; //dopisane
break;
}
printf("%c",a[linia][znak]);
}
if(a[linia][0]==0) //zmiana z 13 na zero
{
break;
}
printf("\n");
}
char tmp[za];
for(linia=0;linia<zb;linia++)
{
if (a[linia+1][0]==0) break; // powoduje wykrycie dojscia do ostatniego napisu (w następnej linii jest na poczatku zero)
if(strcmp(a[linia], a[linia+1])>0)
{
strcpy(tmp, a[linia]);
strcpy(a[linia], a[linia+1]);
strcpy(a[linia+1], tmp);
if(linia!=0){linia=linia-2;} //zmiana
}
}
printf("\nPosortowane:\n");
for(linia=0;linia<zb;linia++)
{
printf("%s\n",a[linia]); //całkowicie zmieniony sposób wyswietlania
if(a[linia][0]==0) break;
}
system("pause");
return(0);
}
Cytat: "marcin20_21"1) char a[za][zb];
'za' i 'zb' powinny byś stałe(const) albo zdeklarowane za pomocą #define, inaczej kompilator nie zna ich rozmiarów w czasie kompilacji i nie wie, ile miejsca na nie przeznaczyć
2)dodałem #include <string.h>, inaczej mój kompilator nie znał funkcji strcmp i strcpy
to by było tyle, jak chodzi o samą kompilację
Jak chodzi o program, to po pierwsze, znakiem końca stringa (albo jak kto woli łańcucha znakowego) w C jest zero, zaznaczam że nie chodzi o kod ASCII zera, ale zero, stąd a[linia][znak]=0; to ważne, bo tak końca stringu szukają m.in. strcmp i strcpy.
W algorytmie sortowania trzeba chyba zmienić linia o 2 mniej, bo za chwile linia jest zwiększana o 1 (linia ++ ).
Zmieniłem wczytywanie, tak aby było tam zero. W związku z tym zmieniłem też sposób wyświetlania.
Dzieki bardzo za pomoc.
skasowalem <iostream> bo moj kompilator z kolei nie wiedział co to.
Z tym -2 zamiast -1 to było oczywiste, coś mi się przy edyscjach pokićkało bo miałem while wcześniej.
Przestudiuję jeszcze to co poprawiłeś, ale z góry dzięki za pomoc bo widzę, ze działa ;][/img]
Proszę bardzo :) wyjaśniłem to bardzo skrótowo i może mętnie, więcej info znalazłbyś w książce jakiejś.
Cytat: "kshonek"skasowalem <iostream> bo moj kompilator z kolei nie wiedział co to.
może bez ".h" (taki jest chyba teraz standard) ...
albo Twój kompilator nie ma takiej:)
Cytat: "marcin20_21"Proszę bardzo :) wyjaśniłem to bardzo skrótowo i może mętnie, więcej info znalazłbyś w książce jakiejś.
Cytat: "kshonek"skasowalem <iostream> bo moj kompilator z kolei nie wiedział co to.
może bez ".h" (taki jest chyba teraz standard) ...
albo Twój kompilator nie ma takiej:)
nigdy nie wpadłbym na to, ze te za i zb musza byc const, to samo nie pomyslalem zupelnie o zrobieniu jakiegos warunku w petli od sortowania. W koncu ona tez musi sie kiedys skonczyc.
Dobrze wiedziec ze mozna wypisac a[linia] jakos string, bo te petle do wypisyania jako char to była kompletna bzdura.
Wiedzialem o tym ze ostatni znak tablicy to powinno byc zero, ale bylem pewien ze ono jest zaraz po enterze. A jednak nie.
Proste błedy, ale bez wiadomosci ciezko je poprawic. Wreszcie działa, bo juz mnie zdenerwował ten 'program' ;)
Można też zczytywać z klawiatury nie tylko znak po znaku, ale cały string:)
Cytat: "marcin20_21"Można też zczytywać z klawiatury nie tylko znak po znaku, ale cały string:)
To ja sie meczylem ;]
Pytanko: czy w C jest jakas funkcja na srednią? Bo w oradnikach/manualach itd nie widze nic average, a jak jest juz przyklad to pbiedny, tzn inta+intb+intc)/3 ;) wiadomo ze mozna to napisac, ale może jest jakaś wbudaowana funkcja, która to zrobi?
nie słyszałem o takiej:)
Ale to przecież dwie minuty roboty jest z czasem na herbatkę np ;)
double srednia(double a, double b, double c)
{
return ((a+b+c)/3);
}
dla trzech zmiennych można to tak napisać
Cytat: "marcin20_21"nie słyszałem o takiej:)
Ale to przecież dwie minuty roboty jest z czasem na herbatkę np ;)
double srednia(double a, double b, double c)
{
return ((a+b+c)/3);
}
dla trzech zmiennych można to tak napisać
nie no jak nie ma to musze recznie ;) da sie zrobic, ale jezlei byłaby funkcja typu strcmp (bo zamiast niej mozna to zrobic w petli, ale po co jak strcmp szybciej) to mozna by zaoszczedzic troche czasu.
Jeszcze jedno pytanie: czy istnieje funkcja podobna do strcmp, ktora możnaby zastosowac w poprzednim programie, ale tk, aby porównywała wpisane liczby? Ponieważ strcmp traktuje 456 jako mniejszą od 5, co jest oczywiste, ale szukam takiej, aby porownała wartosc liczbowa... Znalazłem gdzies w manualach takie coś jak strcoll, ale działanie ma takie samo jak strcmp.
Będziesz musiał przekonwertować zmienną string na int.
Sprawdź, czy jest funkcja strtoint albo coś takiego. Potem porównujesz już jak zwykłe liczby.
Cytat: "Mchl"Będziesz musiał przekonwertować zmienną string na int.
Sprawdź, czy jest funkcja strtoint albo coś takiego. Potem porównujesz już jak zwykłe liczby.
Fuinkcja nazywa się atoi.
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
---------- 10:14 07.10.2006 ----------
a moze jeszcze takie pytanie...
jak jest tabliza
a[20][10]
to jest to 10 lini po 20 znakow czy 20 lini po 10 znakow?
---------- 12:00 ----------
wiecie co? ja wciaz tego nie jarze...
mam taki program
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define dlugosc 11
#define wersy 6
char a[dlugosc][wersy];
int z;
int y;
int x;
int dl=dlugosc-1;
int i;
int j;
char p[dlugosc];
int main()
{
printf("wpisz 6 wersow po maksymalnie 255 znakow\n");
for(x=0;x<wersy;x++)
{
for(y=0;y<dl;y++)
{
a[y][x]=getch();
printf("%c",a[y][x]);
if (a[y][x]==13)
{a[y][x+1]=0;
break;}
}
/*if(a[x][0]==0) //zmiana z 13 na zero
{
break;
}*/
printf("\n");
}
printf("\n\n\n");
for(x=0;x<wersy;x++)
{
for(y=0;y<dlugosc;y++)
{
printf("%i ",a[y][x]);
if (a[y][x]==0)
{printf("\n");
break;}
}}
char tmp[dlugosc];
for(x=0;x<wersy;x++)
{
if (a[dlugosc][x]==0) break; // powoduje wykrycie dojscia do ostatniego napisu (w następnej linii jest na poczatku zero)
if(strcmp(a[x], a[x+1])>0)
{
strcpy(tmp, a[x]);
strcpy(a[x], a[x+1]);
strcpy(a[x+1], tmp);
if(x!=0){x=x-2;} //zmiana
}
}
for(x=0;x<wersy;x++)
{
for(y=0;y<dlugosc;y++)
{
printf("%c",a[y][x]);
if (a[y][x]==0)
{printf("\n");
break;}
}}
getch();
return(0);
}
dodalem juz czesc tego sortowania co zamiescil marcin, ale nie chodzi! juz nawet dodaje sie zero (na koncu) ale czasem ucina pierwsze literki a sortowanie w ogole lezy..
Cytat: "bartsob5"
a moze jeszcze takie pytanie...
jak jest tabliza
a[20][10]
to jest to 10 lini po 20 znakow czy 20 lini po 10 znakow?
Wszystko jedno, bylebyś pamiętal co jest gdzie.
Jak sobie tworzysz taką zmienną, to myślisz "pod pierwszym indeksem będę trzymał numer linii, a pod drugim numer znaku w linii" (najlepiej zapisać to w komentarzu przy deklaracji zmiennej).
W tym listingu jest zdaje się akurat odwrotnie... trochę mniej intuicyjnie IMHO, ale też może być...
No ale z powodu tej kolejności masz problem w linii 50. Masz tam odwołanie do a
- , czyli do znaków na x-owej pozycji we wszystkich liniach, a miało być do wszystkich znaków w x-owej linii.
to mam sie do lini odwolywac jak? w stylu a[]
Proponuje takie poprawki do programu:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define dlugosc 11 //jest chyba taka konwencja w C/C++, że to, co definiujesz
#define wersy 6 // przez define, lepiej robic wielkimi literami
char a[wersy][dlugosc]; // tu zmieniłem, lepiej przyjąc zasadę,
//że w ten sposób robisz dwuwymiarowe tablice
// proponuje zmienic nazwe na nieco więcej mówiącą,
// np napisy....
int z;
int y;
int x;
int dl=dlugosc-1;
int i;
int j;
char p[dlugosc]; // ??
int main()
{
printf("wpisz %d wersow po maksymalnie %d znakow\n",wersy, dlugosc); //tu zmieniłem
for(x=0;x<wersy;x++)
{
for(y=0;y<dl;y++)
{
a[x][y]=getch();
printf("%c",a[x][y]);
if (a[x][y]==13)
{
a[x][y]=0;
break;
}
}
a[x][dlugosc-1] = 0; // to w wypadku jesli zczytywalismy znaki, a ktos nie nacisnal enter'a
// trzeba dodac na koncu liniki znak zero, jako koniec stringa
printf("\n");
}
printf("\n\n\n");
for(x=0;x<wersy;x++)
{
for(y=0;y<dlugosc;y++)
{
printf("%3i ",a[x][y]);
if (a[x][y]==0)
{
printf("\n");
break;
}
}
}
//sortowanie:
printf("\n\n");
char tmp[dlugosc];
for(x=0;x<(wersy-1);x++)
{
if(strcmp(a[x], a[x+1])>0)
{
strcpy(tmp, a[x]);
strcpy(a[x], a[x+1]);
strcpy(a[x+1], tmp);
if(x!=0){x=x-2;} //zmiana
}
}
//wyswietlanie prosciej zrobic teraz tak:
for(x=0;x<wersy;x++)
{
printf("%s\n",a[x]);
}
getch();
return(0);
}
Proponuję komentować kod, i mniej więcej napisać gdzieś, co ma program robić (w każdym programie - o ile będziesz miał z tym trochę więcej wspólnego.
Zrobiłem kilka poprawek.
Co do algorytmu sortowania - ja tylko poprawiłem jego implementację ( czyt. ktoś już to napisał). działa to mniej więcej tak, że sprawdza dwa sąsiadujące napisy, jeśli trzeba je przestawić to je przestawia, a następnie sprawdza, czy tego przestawionego w lewo nietrzeba znowu przesunąć jeszcze bardziej w lewo (trzeba zmniejszyć x - 1, żeby to sprawdzić, ale skoro for zaraz zwiększy x, to bylibyśmy w tym samym miejscu, stąd zmniejszanie o 2).
Jeśli nie łapiesz, jak to działa, możesz spróbować "wymyślić" własny algorytm sortowania, np sortować napisy w taki sposób, jak sortujesz karty do gry w pokera, makao, tysiąca czy w co tam grasz :p
Faktycznie tak jak pisze Mchl, to od Ciebie zależy, jak interpretować tablicę a[20][10]. Najczęściej jednak, jeśli jest to tablica charów, interpretuje się ją jako 20 wierszy po 10 znaków(w tym powinien być tam znak końca stringu zero, o ile używa się funkcji, szukających w ten sposób końca stringu)
Jak pisał już Mchl, z powodu tej odwrotnej indeksacji tablicy był problem w 50 linii, bo funkcja strcmp porównywała dwie kolumny znaków (które mogły nie być zakończone zerem).
Jeśli jeszcze nie bardzo wiesz, dlaczego tak to interpretować, proponuję następujące spojrzenie na sprawę:
1) Kiedy chcesz stworzyć tablicę na napis, to piszesz np
char napis [10];
2)Gdy chcesz stworzyć tablicę np 5 takich napisów, modyfikujesz odrobinę powyższy zapis, mówiąc, że chcesz mieć 5 wierszy z takimi napisami
char napisy [5] [10] ;
a to dodanie na koncu tego zera recznie, nie powoduje ze ucieka jakis znak? bo przy testowaniu mojego programu czasem sie tak zdarzalo (wypisywalem wtedy tekst w wartosciach charow, i rzeczywiscie niektore ostatnie znaki stawaly sie 0, a niektore pierwsze znaki znikaly...)
Cytat: "bartsob5"a to dodanie na koncu tego zera recznie, nie powoduje ze ucieka jakis znak? bo przy testowaniu mojego programu czasem sie tak zdarzalo (wypisywalem wtedy tekst w wartosciach charow, i rzeczywiscie niektore ostatnie znaki stawaly sie 0, a niektore pierwsze znaki znikaly...)
Nie powinno się tak dziać. Z tego co testowałem, nie było tego problemu. Zauważ, że ostatni znak wpisany do tablicy z klawitury może być wpisany do a
- [dl-1], a zero wpisuję do a
- [dlugosc-1] czyli a
- [dl]. Jakby się jednak tak działo, daj znać.