ahojte :) jsem v programovani uplna fish a tak se vas chci zeptat jak postupovat kdyz chci vyhledat v poli minimalni hodnutu a pak vypsat ze minimalni hodnota je v poli a6 :)
Příspěvky odeslané z IP adresy 89.31.8.–
Ahoj, mám vytvořenou hash tabulku která pracuje s řetězci char. Chci ji využít na výpočet entropie, tak že do ní budu vkládat slova ze souboru. Jelikože nejsem schopný do funkce Insert() dostat z toho dokumentu slovo jako char tak chci aspoň pomocí soubor.get() vkládat do insert znaky a vše co není znak by značilo konec slova. Takže bych dostal něco typu 979797 v ascii. Ale nevím si rady jak tu hash tabulku upravit aby přijímala int. Přepsat char na int nestačí :D :D napíše to: 'InsertHash' : cannot convert parameter 1 from 'const char [10]' to 'int *'
#include <stdio.h>
#include <string.h>
#include "list"
#include <stdlib.h>
class List
{
private:
struct ListItems
{
char* data;
ListItems* next;
ListItems* prev;
};
ListItems* head;
public:
List();
bool Search(char* x);
void Insert(char* x);
};
List::List()
{
head = NULL;
}
bool List::Search(char *x)
{
ListItems* p;
for (p = head; p != NULL; p = p->next)
if (p->data == x)
return true;
return false;
}
void List::Insert(char *x)
{
ListItems* p;
p = new ListItems;
p->data = x;
p->next = head;
if (head != NULL)
head->prev = p;
head = p;
p->prev = NULL;
}
/*
Ukazka, jak implementovat hashovani se separatnim retezenim
Program k clanku pro Linuxsoft
Autor: Petr Sklenicka
*/
int Hash(char* data);
void InsertHash(char* data);
bool SearchHash(char* data);
const int n = 50; // velikost tabulky
List HashTable[n]; // hashovaci tabulka
int main()
{
// ukazka ulozeni a nasledneho vyhledani zaznamu
InsertHash("some test");
bool p = SearchHash("some test");
p == true ? printf("Nalezeno\n") : printf("Nenalezeno\n");
return 0;
}
int Hash(char* data)
{
int i, hashKey;
for (int i = hashKey = 0; i < 10; i++)
hashKey = (3 * hashKey + data[i]) % n;
return hashKey;
}
void InsertHash(char* data)
{
int hashKey = Hash(data);
HashTable[hashKey].Insert(data);
}
bool SearchHash(char* data)
{
int hashKey = Hash(data);
return HashTable[hashKey].Search(data);
}
No teď jsem se dočetl, že si mám dopředu nadeklarovat pole int čísel delky 32 768 a při vlastním vypočtu si jen pamatovat do jaké hodnoty prvočísla počítáme, třeba do 100, jak by se to provedlo?
To KIIV : Jsem si vědom toho že jsem tam nasekal spoustu chyb právě proto se ptám jak to opravit. Hlavně mi šlo o to jestli jsem vůbec splnil podmínku že se mi ty výsledky ukládají jako jednotlivé bity.
Ahoj, chtěl bych se zeptat jestli by mi tady nějaký schopný programátor zkontroloval můj kod. Měli jsme za ukol vytvorit eratosthenovo síto s podmínkou zachytit čísla ze spracovávané posloupnosti jako jednotlivé bity v čísle např. typu int. Mám předpokládat že typ int má 32 hodnot takže čísla 0 až 31 budou reprezentována jako bity 0 až 31 prvniho prvku pole cisel typu int, čísla 32 až 63 budou uložena jako bity 0 až 31 druhého prvku pole čísel typu int a tak dále. Dojde tedy k osminásobnému snížení pamětových nároků
Zdrojový kod jsem vytvoril takhle, zatím je to pevne nastaveno na pocítaní do 2000. Chtěl bych se tedy zeptat jestli to pracuje tak jak by melo a jak by se to popřípade melo vylepšít?
#include <iostream>
using namespace std;
int pole[2];
void NastavPrvocislo(int prvocislo)
{
int indexVpoli = prvocislo/32; //celociselne deleni
int indexVintu = prvocislo%32; //modulo - tj zbytek po celociselnem deleni
pole[indexVpoli] = pole[indexVpoli] | (1 << indexVintu); // pomoci bitoveho posunu si jednicku posunu na spravnou pozici a pomoci bitoveho OR ho nastavim
}
bool JePrvocislo(int test)
{ //true pokud je toto prvocislo nastavene
int indexVpoli = test/32;
int indexVintu = test%32;
return (pole[indexVpoli] & (1 << indexVintu)); //pomoci bitoveho posunu si jednicku posunu na spravnou pozici a pomoci bitoveho AND otestuji zda je bit nastaven
}
int main()
{
int pole[64];
int maxCislo = 2000;
NastavPrvocislo(0);
NastavPrvocislo(1); // 0 a 1 nejsou prvocisla.
for (int i = 2; i <= maxCislo; i++)
{
if (!JePrvocislo(i)) //vezmeme bit a pokud je nenastaveny, tak se jedna o prvocislo
{
cout << i << endl; // tak ho vypiseme
for (int j = 2; i * j <= maxCislo; j++) // a vsechny jeho nasobky
{
NastavPrvocislo(i * j); // nastavime, ze nejsou prvocislo.
}
}
}
return 0;
}
Zdravím, hledám nějakou dobrou duši která by mi pomohla s tímto programem ... stačí mi třeba vyvojový diagram kod už nejak dokážu sesmolit dohromady... nebo i naopak ;)
Zádání zní:
Sestave program ktery vytiskne zadanou čtvercovou matici řádu n a dále matici, která se od původní matice liší tím, že má navzajem zaměněný i-ty sloupec za i-ty sloupec