Menu

Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.

Pokaż wiadomości Menu

Wiadomości - marcin20_21

#81
BOINC / projekty
05 Grudzień 2006, 22:56
Jak narazie mam max godzinne jednostki proteins, ale to też może od kompa zależeć i od szczęścia:) Chess960 nie zawsze są nowe...
#82
BOINC / projekty
05 Grudzień 2006, 19:12
Proteins liczą się trochę ponad jedną godzinę  :)
#83
Archiwum / Zdobywamy mistrzostwo świata!!!!!!
30 Listopad 2006, 23:35
To może faktycznie zrobić mała ankietę, kto na jaki projekt chętny:)

Tzeba by się też zastanowić, w których projektach próbki są rozsyłane na tyle często, żeby być w stanie kogokolwiek dogonić - w szachach np trudno zapchać próbkami komputer non stop :(
#84
Archiwum / HELP!! pilne!!!
30 Listopad 2006, 16:30
Cytat: "KrzychuP"
Ciekawy jestem jak to się stało, że niektóre xml'e mi się "zresetowały".

Czasem wystarczy reset kompa, nie miałeś takiego?
#85
Archiwum / HELP!! pilne!!!
29 Listopad 2006, 16:08
można spróbować poszperać w plikach .xml od projektu... najlepiej mieć od kogoś taki plik i porówanć ze swoim, tak mi się wydaje:)
#86
Sprzęt / Mój komp
27 Listopad 2006, 20:49
Wedle mojej wiedzy można by tak robić, o ile masz też możliwość nagrania płyty na tym laptopie (nagranie wyników obliczeń), albo zabrania go czasem do domu i podłączenia do sieci.
Poszukaj na forum o Boincowaniu Bez Netu (BBN), albo poczekaj na odpowiedź kogoś, kto to robił, ja niestety nie robiłem tego nigdy, więc nie potrafię bardziej pomóc :(
#87
Ja raczej za bardzo Ci nie pomogę, szukaj informacji u źródeł, czyli tam, gdzie to ktoś zrobił:)
#88
Skopiowanie plików nagłówkowych *.h z Borlanda nie było najlepszym pomysłem -> to są tylko deklaracje (czyli zapowiedzi) różnych funkcji. Może masz za starą wersję msvc?
#89
Chess960@home / Jakośc próbek
15 Listopad 2006, 19:24
To faktycznie boli:( współczucie:(
Ja jednak będę to liczył, jakoś mam słabośćdo szachów...
#90
Chess960@home / Jakośc próbek
14 Listopad 2006, 22:33
Cytat: "pmgpmg"http://www.chess960athome.org/results.php?userid=4 573

Przestało mnie to śmieszyć. Nie będe tego liczył.

Niestety nie mam dostępu do tej strony, bo pewnie musiałbym być Tobą:)
Więc może napisz, co Cię tak "zmieszało" :)
#91
Chess960@home / Jakośc próbek
14 Listopad 2006, 15:24
Zauważyłem, że chess krzaczył się, gdy obciążyłem procka jakimś innym programem(np swoim), który cały czas "zjadał" czas procesora...
#92
Cytat: "bartsob5"yyyyyyyyyyyyyyyyyyy aha
Spróbuj sprecyzować, jakiej odpowiedzi potrzebujesz, to może Ci jakoś pomożemy  :wink:
#93
Zespół BOINC@Poland / Zabawa
12 Listopad 2006, 23:48
31 grudnia, czyli w świątecznego sylwestra :lol:
#94
Cytat: "bartsob5"jaka jest roznica miedzy C a C#??? taka sama jak miedzy C a C++ i miedzy C# a C++???

Najpierw było C, potem C++, a potem C#:)
Czyli im nowszy, tym ma więcej możliwości, bardziej rozbudowany, i takie tam:)
W C# (czyt. C szarp) jeszcze nie programowałem.
#95
Skoro czyste C, to nie widzę innego rozwiązania :)
#96
Ja używałem funkcji kbhit

#include <conio.h>

int main(void)
{
   cprintf("Nacisnij jakis klawisz,aby kontynuowac");
   while (!kbhit()) /* Nic nie rob */ ;
   cprintf("\nNacisnales klawisz\n");
   return 0;
}


Możno też chyba użyć coś związanego z cin, ale jeszcze o tym nie czytałem.
#97
Cytat: "bartsob5"no dobra... a czy i jak sie takie biblioteki kompiluje?

bo jak mam tak na sucho te biblioteki, to mi sie sypie program (jeszcze gorzej niz gdybym mial normalnie w innym pliku wypisane je...)

Nie wiem, co rozumiesz, pod pojęciem "sucho".
To kompilator dba o to, że jak zmienisz plik .c, to go kompiluje, a jak go nie zmieniasz i znowu uruchamiasz kompilację, to NIE kompiluje go znowu.
#98
Inaczej:) Deklaracja funkcji to zadeklarowanie, żę jakaś nazwa to funkcja (również podanie jej parametrów i tego, co zwraca). Dla podanego przykładu byłoby to:

#ifndef __biblioteka__h__
#define __biblioteka__h__

void linia();   // pierwsza linia funkcji i średnik
#endif
#99
Może nie opisałem tego jasno, ale nie chciałem się wgłębiać. Będzie działać, jeśli się napisze funkcje w lab.c, bez używania lab.h. Nie jest to jednak ładnie zrobione. Jeśli piszecie projekt, a gość ma o tym jakiekolwiek pojęcie, to Wam to wypomni. Ja tak miałem przy pierwszym z projektów kilkuplikowych :lol:
Podejście z dwoma plikami ma taką zaletę, że jeśli napisze się raz bibliotekę (np. lab.c) i nie zmienia jej, kompilator nie kompiluje pliku lab.c za każdym razem, jak kompiluje się cały program, kompilacja trwa krócej. I jeszcze jedno - używając takiej techniki można nie udostępniać komuś ciała swoich funkcji, ale gotową bibliotekę (.lib) i plik .h z deklaracjami tych funkcji (albo np. klas). Jeśli używacie jakichś standardowych funkcji, to nie inkludujecie plików .c ale .h.
Po szczegółowe iformacje odsyłam do książek, np "Symfonia C++" str 102 i dalej.

Podkreślam: to będzie działać (choć w pewnych sytuacjach jednak nie), ale nie jest to do końca poprawnie.
#100
Z własnymi bibliotekami funkcji to jest tak, że tworzy się, oprócz głównego pliku z main, dodatkowe pliki. Załóżmy, że tworzysz bibliotekę funkcji do odczytu z klawiatury, tworzysz wtedy nie jeden :!: ale dwa pliki, np. klawiat.c i klawiat.h. (Ważne, żeby różniły się tylko rozszerzeniem.) Jeśli programujesz w C++, wtedy możesz dać rozszerzenie cpp zamiast c.
klawiat.c powinien zawierać Twoje funkcje związane z obsługą klawiatury, ewentualne zmienne globalne, których używasz w tych funkcjach.
klawiat.h powinien zaś zawierać same deklaracje funkcji :!: Nie powinien zawierać ciała żadnej funkcji. Dodatkowo plik .h powinien mieć pewną strukturę:
#ifndef __klawiat__h__
#define __klawiat__h__

//deklaracje funkcji

#endif

To z # to derektywy preprocesora, w skrócie chodzi o to,żeby nie includować dwa razy tych samych funkcji...
W każdym razie w głównym pliku programu (tym z main) include'uje się tylko klawiat.h. (klawiat.h można też includować w klawiat.c)
Wszystko to działa bez problemu, o ile kompilator widzi te trzy pliki jako należące do jednego projektu, jeśli jednak ich tak nie traktuje, wtedy pojawiają się problemy. Zazwyczaj w kompilatorze jest jakis file manager, add to project... albo coś takiego :)
#101
Ponieważ jesteś ograniczony liczbą znaków (konkretnie cyfr), to chyba lepiej użycz fgetc, powtórzyć wywołanie 255 razy.
FILE * fp;
char plik[255]={"mak.txt"};  //na nazwe mozna dac mniej znakow !!
char znak;
int a[255],i,L;

fp = fopen(plik,"rb");
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do odczytu",plik);
else
  {
   for (i=0;i<255;i++)
   {
    znak = fgetc(fp); /*wczytuje jedna literkę, albo cyferkę,
                      albo znaczek z pliku */
    if ((znak < '0') || (znak >'9')) break; /*jesli nie cyfra,
                                            */koniec wczytywania
    a[i] = znak - 48; /* zero ma kod 48 dziesietnie, czyli w kodzie
                   szesnastkowym, kazda nastepna cyferka kod o 1 wiekszy*/
   }
   L = i; //zapamiętanie, ile znakow wczytano
   fclose (fp);
  }
printf("Wczytalem z pliku:\n");
for(i=0;i<L;i++)
   printf("%d",a[i]);


Na uwagę zasługuje, że cyfry są kodowane w ASCII wartościami:
'0' to 48 (30 HEX), '1' to 49(31HEX) itd. Stąd jeśli wiesz, że masz znak jakiejś cyfry, a chcesz mieć gdzieś jej wartość, wystarczy od tego znaku odjąć 48.

W petli for najpierw wczytywany jest jeden znak z pliku, jesli jest on inny niz cyfra, zachodzi wyjscie z petli for. jeśli jednak jest to cyfra, wyliczam jej wartość (znak-48 ) i wpisuję do tablicy a; ponieważ for jest ograniczony wartością 255, to nie wczyta się wiecej, niż 255 cyfr. Potem jest już tylko wyświetlanie  :lol:

Musze jeszcze o jednym napisać. Zasięgnąłem języka i kolegi (lepszy programista). InitGraph to nawet nie jest funkcja samego Pascal'a, ale kompilatora Borland Pascal, często jednak właśnie jego się używa. Być może kompilator Borland Turbo C++, czy jakoś tak się on nazywa, ma tą funkcję, więc jeśli jego używacie, to może ona tam być.
#102
nie wiem, czy dobrze rozumiem... mak.txt zawiera 256 cyfr wpisanych np w notatniku i chcesz je wczytać do tablicy a?
#103
W praktyce, jeśli zapiszesz w trybie tekstowym dane, które powinny być zapisane w trybie binarnym, np liczby float, int, double, a potem próbujesz je wczytać, to możesz otrzymać coś zupełnie innego. Preferuję zapis i odczyt w trybie binarnym, chyba że to ma być typowo plik tekstowy, np plik NA PEWNO zawiera tekst zawierający cztery liczby i tylko tyle.
Nie wiem, czy widzisz różnicę: plik z zapisanymi czterema cyframi tekstem ma zawartość np "4 10 23 347" a plik, w którym te same liczby są zapisane binarnie, może po otwarciu np przez notatnik zawierać jakieś dziwne znaczki.

Jeśli otwierasz w albo wb, i nie otworzy się, to może np oznaczać, że plik taki istnieje, i ma atrybut "tylko do odczytu", inny program otworzył ten plik do zapisu,  albo np plik taki nie istnieje i mógłby zostać stworzony, ale brak miejsca na dysku.
Jeśli otwierasz r,rb i wystąpi błąd, to znaczyć może, że plik taki nie istnieje.
Jest jeszcze np taka możliwość, że system ma pewną maksymalną liczbę plików, które można otworzyć, stąd posiadanie naraz otwartych wielu plików nie jest dobrym rozwiązaniem.
Nic więcej nie przychodzi mi do głowy.
#104
Cytat: "kshonek"
takie bledy to norma u goscia.....
To "fajnie" macie....

Cytat: "kshonek"
uklad wspolrzdnych to obejmuje, ale gorzej z tym jak to zapisac w c ;]
Mniej profesjonalne podejście : cztery int'y np xa,xb,xc,xc.
Bardziej profesjonalne podejście : stworzenie struktury (albo klasy, jeśli programujesz w C++) opisującej punkt na płaszczyźnie.
#105
InitGraph to funkcja z Pascala :P  Nie wiem, jak to można połączyć z C :) Może gość coś

A z tymi punktami to proste, jest coś takiego, jak układ współrzędnych OXY (matemtatyka się kłania), wczytuje się dwa punkty A(xa,ya) B(xb,yb) z pliku, a potem rysuje linię, szczegóły np tutaj. :

http://free.of.pl/t/tpdoodek/kurs/6.html
#106
Cytat: "bartsob5"a znasz jakas funckje wczytujaca obrazek, i rysujaca wykres funkcji? (tj. kreske miedzy dwoma punktami?)

To nie takie proste. W standardzie C/C++ nie ma (o ile mi wiadomo) takich funkcji, więc wszystko zależy tu od konkretnego środowiska, w którym piszesz. Można np użyć komponentu TShape i Canvas w Borland C++ 6.0, do rysowania w okienku windowsa, można użyć OpenGL dla jakichś bardziej zaawansowanych grafik... W czym programujesz?
#107
Jesli napiszę coś, co wiesz, to nie czytaj tego, i nie miej mi za złe.

Po pierwsze musisz wiedzieć, że pliki można otwierać:
- do zapisu "w" (zostaje wtedy stworzony nowy plik, a jeśli plik o danej nazwie już istnieje, zosanie zastąpiony nowym plikiem)
- do zapisu "a" (plik nie jest mazany, dopisujesz co chcesz do istniejącego pliku)
- do odczytu "r" (do odczytywania z pliku :) )
Co ważniejsze, pliki można otworzyć w trybie tekstowym, albo binarnym wb ab rb. Tryb tekstowy służy tylko do znaków drukowalnych, używanie go ze znakami niedrukowalnymi (np Znak ENTERA) może prowadzić przy powtórnym odczycie pliku do błędu (błąd programisty). Tryb binarny stosować lepiej, gdy zapisujesz jakieś liczby (int, float, itp), oczywiście można też zapisywać wtedy zwykły tekst.

Poniższy przykładowy program pokazuje, jak można to zrobić. Nie twirdzę, że jest on najlepszy. Może jednak pokaże Ci, jak co zapisać najlepiej.


#include <stdio.h>
#include <conio.h>


int main(int argc, char* argv[])
{
FILE * fp; // fp służy do komunikacji z plikami na dysku
char nazwaPliku[20]={"plik.txt"}; //załóżmy, że chcemy dzialac na takim pliku
char napis [30];
int znak;
float pi = 3.14;
int liczba = 10;

//najpierw spróbujemy zapisac cos do pliku
fp = fopen(nazwaPliku,"w"); //otwirzamy (tworzymy plik)
//ponieważ otwarcie może się nie udac, trzeba sprawdzic, czy fp == NULL
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do zapisu\n",nazwaPliku);
else
   {
    fputc('a',fp); //zapisanie znaku 'a' do pliku
    fputs("la ma kota\n",fp); //zapisanie ciągu znaków do pliku
    fclose(fp);    // po otwarciu pliku i uzyciu koniecznie trzeba go zamknąc
   }

//to teraz zobaczmy, co zapisalismy
fp = fopen(nazwaPliku,"r");
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do odczytu",nazwaPliku);
else
   {
    fgets(napis,4,fp); //odczytanie z pliku 4 pierwszych znaków
    printf ("Odczytalem z pliku : %s \n\n",napis);
    fclose (fp);
   }
//dawno tego nie robiłem

// pokazę Ci ile wynosi teraz pi oraz liczba
printf("pi : %f, liczba : %d\n",pi,liczba);

//teraz użyjemy trybu binarnego:
//jesli po zakonczeniu dzialania pliku otworzysz plik.txt, znajdziesz tam troche "smieci"
//roznych znaczkow np i nazwe pliku :)
fp = fopen(nazwaPliku,"wb"); //otwirzamy (tworzymy plik)
//ponieważ otwarcie może się nie udac, trzeba sprawdzic, czy fp == NULL
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do zapisu\n",nazwaPliku);
else
   {
    fwrite(nazwaPliku,20,1,fp); //zapisujemy calą tablice nazwaPliku, równiez tą czesc, której nie uzywam do przechowywania nazwy
    fwrite(&pi,sizeof(pi),1,fp); //zapisujemy zmienna pi (typu float)
    fwrite(&liczba,sizeof(liczba),1,fp); //zapisujemy zmienna liczba (typu int)
    fclose(fp);
   }

//zmieniamy pi oraz
pi = 3.14159;
liczba = 24;

// pokazę Ci ile wynosi teraz pi oraz liczba
printf("Po zmieanie wartosci pi : %f, liczba : %d\n",pi,liczba);

//a teraz wczytamy, to zo zapisalismy
fp = fopen(nazwaPliku,"rb"); //otwirzamy
//ponieważ otwarcie może się nie udac, trzeba sprawdzic, czy fp == NULL
if(fp == NULL) printf("Nie udalo sie otworzyc pliku %s do odczytu\n",nazwaPliku);
else
   {
    fread(nazwaPliku,20,1,fp); //odczytujemy tablice - zapisalismy 20, to tyle odczytujemy
    fread(&pi,sizeof(pi),1,fp); //odczyt pi
    fread(&liczba,sizeof(liczba),1,fp); //odczyt liczby int
    fclose(fp);
   }

// pokazę Ci ile wynosi teraz pi oraz liczba
printf("Po odczycie z pliku pi : %f, liczba : %d",pi,liczba);

getch();
return 0;
}
//------------------------------------------------  ---------------------------


Zazwyczaj w takich przypadkach wystarcza double.Jeśli jednak potrzebowałbyś policzyć silnię dokładnie, musiałbyć poszukać w internecie gotowej struktury do takich liczb. Kiedyś robiłem coś takiego, liczyłem silnię chyba z 1000. Wynik wyglądał masakrycznie :)



[/color]
1000! = a=402387260077093773543702433923003985719374864210 7146325437999104299385
12398629020592044208486969404800479988610197196058 631666872994808558901323829669
94459099742450408707375991882362772718873251977950 595099527612087497546249704360
14182780946464962910563938874378864873371191810458 257836478499770124766328898359
55735432513185323958463075557409114262417474349347 553428646576611667797396668820
29120737914385371958824980812686783837455973174613 608537953452422158659320192809
08782973084313928444032812315586110369768013573042 161687476096758713483120254785
89320767169132448426236131412508780208000261683151 027341827977704784635868170164
36502415369139828126481021309276124489635992870511 496497541990934222156683257208
08213331861168115536158365469840467089756029009505 376164758477284218896796462449
45160765353408198901385442487984959953319101723355 556602139450399736280750137837
61530712776192684903435262520001588853514733161170 210396817592151090778801939317
81141945452572238655414610628921879602238389714760 885062768629671466746975629112
34082439208160153780889893964518263243671616762179 168909779911903754031274622289
98800519544441428201218736174599264295658174662830 295557029902432415318161721046
58320367869061172601587835207515162842255402651704 833042261439742869330616908979
68482590125458327168226458066526769958652682272807 075781391858178889652208164348
34482599326604336766017699961283186078838615027946 595513115655203609398818061213
85586003014356945272242063446317974605946825731037 900840244324384656572450144028
21885252470935190620929023136493273497565513958720 559654228749774011413346962715
42284586237738753823048386568897646192738381490014 076731044664025989949022222176
59043399018860185665264850617997023561938970178600 408118897299183110211712298459
01641921068884387121855646124960798722908519296819 372388642614839657382291123125
02418664935314397013742853192664987533721894069428 143411852015801412334482801505
13996942901534830776445690990731524332782882698646 027898643211390835062170950025
97389863554277196742822248757586765752344220207573 630569498825087968928162753848
86339690995982628095612145099487170124451646126037 902930912088908694202851064018
21543994571568059418727489980942547421735824010636 774045957417851608292301353580
81840096996372524230560855903700624271243416909004 153690105933983835777939410970
02775347200000000000000000000000000000000000000000 000000000000000000000000000000
00000000000000000000000000000000000000000000000000 000000000000000000000000000000
00000000000000000000000000000000000000000000000000 000000000000000000000000000000
000000000000000000
Liczba cyfr potrzebnych do zapisania 2568
#108
Rozmowy nieBOINCowane / html
08 Październik 2006, 10:50
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ć.
#109
Rozmowy nieBOINCowane / html
08 Październik 2006, 03:16
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] ;
#110
Rozmowy nieBOINCowane / html
06 Październik 2006, 22:05
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;
}
#111
Rozmowy nieBOINCowane / html
06 Październik 2006, 19:20
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ć
#112
Rozmowy nieBOINCowane / html
05 Październik 2006, 23:22
Można też zczytywać z klawiatury nie tylko znak po znaku, ale cały string:)
#113
Rozmowy nieBOINCowane / html
05 Październik 2006, 20:56
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:)
#114
Rozmowy nieBOINCowane / html
05 Październik 2006, 20:22
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);
}
#115
Rozmowy nieBOINCowane / html
04 Październik 2006, 09:57
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:
#116
Rozmowy nieBOINCowane / html
03 Październik 2006, 23:55

#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.
#117
Rozmowy nieBOINCowane / html
03 Październik 2006, 22:46
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:
#118
Archiwum / Awarie
29 Wrzesień 2006, 23:54
Cytat: "Nietoperek"
Cytat: "marcin20_21"
Zastanawiam sięteż, czy nie ma z tym coś wspólnego to:
2006-09-29 18:56:40||Using earliest-deadline-first scheduling because computer is overcommitted.
2006-09-29 18:56:40||Suspending work fetch because computer is overcommitted.
dokladnie tak jest - masz w zanadrzu jednostki z innego projektu, ktore maja mniejszy czas zwrotu dlatego boinc wszedl w tryb przeliczania pozycji najblizszych do odeslania "earliest-deadline" dodatkowo masz duzo danych  do przetworzenia i malo czasu na ich obliczenie dlatego boinc wstrzymal sciaganie swiezych jednostek "Suspending work fetch..."

Aktualnie oprócz einstein liczę seti, mam max 2 próbki, od czasu, jak mam ten problem, to już kilka zdążyłem odesłać, więc to raczej nie jest z ich powodu :(

Edited
To było związane tylko z tym, że miałem próbki z chess, a one mają dobę na przeliczenie (a liczy się je kilka minut).
#119
Archiwum / Awarie
29 Wrzesień 2006, 19:18
Od kilku dni (a może więcej) nie pobiera mi próbek z Einstein@home (zawsze pobierało te większe). Tymczasem na drugim(słabszym) sprzęcie cały czas, jakby nigdy nic, pobiera te mniejsze próbki i normalnie liczy. Nie wiem, czy to problem BOINC'a, czy może po prostu aktualnie nie robią większych próbek (albo jest ich bardzo mało). Po zaktualizowaniu mam
2006-09-29 19:14:40|Einstein@Home|Sending scheduler request to http://einstein.phys.uwm.edu/EinsteinAtHome_cgi/cgi
2006-09-29 19:14:40|Einstein@Home|Reason: Requested by user
2006-09-29 19:14:40|Einstein@Home|(not requesting new work or reporting completed tasks)
2006-09-29 19:14:50|Einstein@Home|Scheduler request succeeded


Zastanawiam sięteż, czy nie ma z tym coś wspólnego to:
2006-09-29 18:56:40||Using earliest-deadline-first scheduling because computer is overcommitted.
2006-09-29 18:56:40||Suspending work fetch because computer is overcommitted.
#120
Rozpatrzone skargi i wnioski / wniosek nr 3
24 Wrzesień 2006, 17:15
To dobry pomysł.