#1 j.schneider
tomu na co se ptáš sice nerozumím, ale jediné co ti můžu poradit aby se ti někdo snažil pomoct je: pro vkládání kódu je tu tlačítko se symbolem <?.
Příspěvky odeslané z IP adresy 185.69.69.–
#1 Dumbo
KIIV už sice odpověděl, ale když už jsem to napsal.. (vypadl mi net)
Například budeš mít nějakou podmínku:
//pokud se podmínka splní, provede se VykonejA(), VykonejB(), ale vždy VykonejD()
if(i == j)
{
VykonejA();
VykonejB();
}
else
VykonejC();
VykonejD();
//pokud ne, provede se VykonejC(), ale vždy VykonejD()
pokud to uděláš takto:
if(i == j)
{
VykonejA();
VykonejB();
}
else
{
VykonejC();
}
VykonejD();
//provede se vše jako v předchozím případě, jen to může někomu připadat přehlednější
a poslední příklad:
//pouze pokud se podmínka splní, provede se VykonejA(), ale vždy VykonejB()
if(i == j)
VykonejA();
VykonejB();
{} závorky jsou moc dobrá věc, a mnohem přehlednější než v jiných jazycích např. begin / end
#3 normy101
No pokud by šlo o nahrazení slova se shodnou velikostí bloku, tak stačí jen přepis dat v souboru. To je jednoduché, ale nejspíš málo pravděpodobné.
Ale není ani moc složité to, co píše kolega. V obou případech je potřeba nastudovat práci se soubory.
Taky se můžeš zaseknout na komplikacích s kódováním textu (tedy pokud může být různé).
Když píšeš takovýto dotaz je dobré uvést v čem to píšeš.
#7 Josef
Jedna možnost je, že budeš kreslit na PictureBox linky, křížky a kolečka pomocí Graphics.DrawLine a DrawCircle apd. nebo si vytvoříš obrázky: prázdného políčka, s křížkem, kolečkem.. , uložíš je do resources (v cz verzi "prostředků" ve vlastnostech projektu) a ty budeš kreslit na PictureBox pomocí DrawImage (volání: Properties.Resources.nazev)
Nechce se mi rozebírat (ne)výhody Linuxu o proti Windows.
Ale co se mi chce říct je, že ikdyž mám W10 na všech počítačích funkční tak, XP byly z uživatelského hlediska bezkonkurenčně nejlepší (s použitím Zune theme i nejhezčí a nejpřehlednější) systém.
Trochu doufám, že si můj povzdech přečetlo vedení MS a teď už mi budou dělat jen radost. ;)
#4 Josef
Nepužíváš žádné prográmky co by si se mohl pokusit napsat vlastním způsobem?
Např. kalkulačka, notepad, převody jednotek, výpočty nebo evidence něčeho, kopírování souborů...
nebo nějakou jednoduchou hru (jako asi nejlehčí mě napadá pexeso, nebo nějaká jiná stolní hra kde nejsou potřeba animace).
Mezi mé první programy patřily: prográmek na výpočet obvodů a obsahů těles, a program pro synchronizaci složek, aplikace pro generování textů.
To zkrátka záleží na tom co tě zajímá. Psát něco co bude k ničemu tě nebude bavit.
Předpokládám, že ses rozhodl učit programovat s toho důvodu, že chceš vytvářet vlastní software, ne proto, že chceš programovat.
Nikdo neříká, že tvé první programy musí být dokonalé. Chybami se člověk učí.
#1 Michal
1. protože je tam 64bit W7, bude tam procesor 64bit architekturou, takže tam dej 64bit Win. (dodatečně se to dá změnit přeinstalací win)
2. to záleží co na tom pc budeš dělat, na nějaké účetnictví nebo surfování po netu budou 4 GB stačit. Pokud bys dělal grafiku, tak bych přidal.
#3 TomyB
Podle toho kódu to vypadá tak, že chceš upravit "hodnoty" RGB podle hodnoty A a přitom nastavení A zachovat?
Čeho chceš vlastně přesně dosáhnout?
btw: takto vypadá tvůj obrázek po odebrání G a B
(takže se jen špatně pohybuješ v paměti, nejde o 256 barev)
#1 Martin
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex < 0)
{
label1.Text = string.Empty;
label2.Text = string.Empty;
label3.Text = string.Empty;
}
else
{
DataTable dt = (DataTable)comboBox1.DataSource;
label1.Text = (string)dt.Rows[comboBox1.SelectedIndex][0];
label2.Text = (string)dt.Rows[comboBox1.SelectedIndex][1];
label3.Text = (string)dt.Rows[comboBox1.SelectedIndex][2];
}
}
Po vkládání kódu používej tlačítko <?
#3 JirkaX
Musím říct, že (a podle množství odpovědí na dvou fórech, nejsem jediný) pořád nevím s čím si nevíš vlastně rady. Podle toho, že tu zmiňuješ buffer a minule TextBox, tak si myslím, že pouze nevíš jak zobrazit hodnoty, které vrací port.
Pokud je to tak, jak chápu já, tak by mělo stačit vytvořit metodu s argumentem ushort value, tuto hodnotu zobrazit v textboxu a mít Queue<ushort> history a tam ji přidat:
history.Enqueue(value);
if (history.Count > 50) history.Dequeue();
a následně history zobrazit v ListBoxu. Celé toto si upravit pro použití v WPF (já WPF ani s porty nedělám, tak ti tu nechci psát ukázku, protože by to šlo jistě napsat elegantněji, než bych to dokázal já).
#1 JirkaX
Nevím jestli chápu na co se ptáš.
chytl jsem se tohoto:
Hlavní problém mám v tom, že data nechodí celá a když to chci dát do textBoxu tak to vynechává skáče mimo prostě nečitelné :( co s tím?
Takto přidáš (i více řádkový) text do textboxu:
string str = "540\r\n540\r\n540\r\n540\r\n540\r\n";
textBox.AppendText(str);
Obsah TextBoxu bude vypadat takto:
540
540
540
540
540
Případně pokud může ten řetězec obsahovat chyby, tak to můžeš ošetřit třeba takto:
string text = "540\r\n540\r\n \r\n\r\n540\r\n540\r\n540\r\n";
string[] lines = text.Split(new char[] { '\n', '\r', ' ' }, StringSplitOptions.RemoveEmptyEntries); //tímto se odfiltrují nedostatky
foreach (string line in lines)
{
textBox.AppendText(line);
textBox.AppendText(Environment.NewLine);
}
#5 ORION206
Tady jsem ti z nudy udělal ještě jednu ukázku:
using System;
using System.Globalization;
using System.IO;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
ConvertFile("vstup.txt", "vystup.txt", -220.0f, 16.0f);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
/// <summary>
/// konverze souboru
/// </summary>
/// <param name="src">vstupní textový soubor</param>
/// <param name="des">výstupní textový soubor</param>
/// <param name="min_X">minimální povolená hodnota X</param>
/// <param name="max_X">maximální povolená hodnota X</param>
static void ConvertFile(string src, string des, float min_X, float max_X)
{
NumberFormatInfo nfi = new NumberFormatInfo()//nahrazuje změnu CurrentCulture
{
NumberDecimalSeparator = "."
};
using (StreamReader sr = new StreamReader(src))
{
using (StreamWriter sw = new StreamWriter(des, false))
{
char[] del = new char[] { ' ' };
int row_number = 1; // 0
Radek soucasnyRadek;
string line;
while ((line = sr.ReadLine()) != null)
{
try
{
string[] ss = line.Split(del, StringSplitOptions.RemoveEmptyEntries);
soucasnyRadek.x = float.Parse(ss[0], nfi);
soucasnyRadek.y = float.Parse(ss[2], nfi);
soucasnyRadek.z = float.Parse(ss[4], nfi);
soucasnyRadek.r = float.Parse(ss[6], nfi);
soucasnyRadek.g = float.Parse(ss[9], nfi);
soucasnyRadek.b = float.Parse(ss[11], nfi);
if (soucasnyRadek.x >= min_X && soucasnyRadek.x <= max_X) //tady si udělěj porovnání jaké chceš
{
sw.WriteLine(soucasnyRadek.ToString(nfi));
}
}
catch (Exception)
{
Console.WriteLine("Chybný řádek: {0}", row_number);
throw; //pokud chceš konverzi při chybě ukončit
}
row_number++;
}
}
}
}
}
public struct Radek
{
public float x;
public float y;
public float z;
public float r;
public float g;
public float b;
public string ToString(NumberFormatInfo nfi)
{
return string.Format(nfi, "{0} {1} {2} {3} {4} {5}", x, y, z, r, g, b);
}
//public override string ToString()//výchozí formát
//{
// return string.Format("{0} {1} {2} {3} {4} {5}", x, y, z, r, g, b);
//}
}
}
až teď jsem si všiml, jak máš řešeno WriteLine..
vkládat tam mezery zvlášť je zbytečné, stačí to udělat takto:
WriteLine("{0} {1} {2} {3} {4} {5}", soucasnyRadek.x, soucasnyRadek.y, soucasnyRadek.z,
soucasnyRadek.r, soucasnyRadek.g, soucasnyRadek.b);
pokud tam nechceš vkládat jeden prázdný řádek, můžeš "\n" vynechat
Tady je jednoduchá ukázka:
using System;
using System.Globalization;
using System.Threading;
using System.IO;
namespace ConsoleApp1
{
class Program
{
const int X_VALUE = 0;
const int Y_VALUE = 1;
const int Z_VALUE = 2;
const int REFLECT_VALUE = 3;
const int R_VALUE = 4;
const int G_VALUE = 5;
const int B_VALUE = 6;
static void Main(string[] args)
{
// aby to bralo tečku jako oddělovač
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
try
{
using (StreamReader sr = new StreamReader("vstup.txt"))
{
using (StreamWriter sw = new StreamWriter("vystup.txt", false))
{
ConvertFile(sr, sw);
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
static void ConvertFile(StreamReader src, StreamWriter des)
{
src.BaseStream.Seek(0, SeekOrigin.Begin);
while (true)
{
string line = src.ReadLine();
if (line != null)
{
try
{
float[] data = Array.ConvertAll(line.Split(' '), Single.Parse);
if (data.Length > 6)
{
if(data[X_VALUE] < -3.0f) //tady si udělěj porovnání jaké chceš
{
des.WriteLine( string.Format("{0} {1} {2} {3} {4} {5} {6}",
data[0], data[1], data[2], data[3], data[4], data[5], data[6]));
//nebo pokud tam nechceš nic měnit: des.WriteLine(line);
}
}
}
catch (Exception) { }
}
else break;
}
}
}
}
#1 ORION206
to by celkem nebyl problém, ale hlavní chyba je v tom, že uvedený kód je špatně. (například vidím, že porovnáváš mez_X s něčím, přitom proměnné mez_X, mez_Y, mez_Z nemají přiřazenou hodnotu.) Takže by se to blbě přepisovalo.
Takže nejlépe bude když napíšeš co přesně má program dělat. Nebo to začni nějak montovat sám a pokud si nebudeš vědět rady s něčím konkrétním, tak se zeptáš.
ps, tady máš jednu z možností jak z pole udělat strukturu (pro začátečníka asi nejlépe pochopitelná)
class Program
{
static void Main(string[] args)
{
float[] data_radku = new float[7]; //tady nějak data z řádku získáš (třeba tím splitem)
Radek radek = new Radek(data_radku);
}
}
struct Radek
{
public float x;
public float y;
public float z;
public float odrazivost;
public float r;
public float g;
public float b;
public Radek(float[] data)
{
x = data[0];
y = data[1];
z = data[2];
odrazivost = data[3];
r = data[4];
g = data[5];
b = data[6];
}
};
Samozřejmě je nutné ošetřit chyby!
I když Nevím jestli je nutné tam vůbec tu strukturu dělat, s těmi daty by se mohlo pracovat rovnou v poli.
#5 John
1. video návod
2. video návod
#8 Sani
Tak pokud ti to nejde udělat ve PS, tak máš možnosti:
1. uložit to jako BMP (tam není žádná komprese) a do JPG to konvertovat jiným programem (pokud to ten program bude umět konvertovat z výchozího PSD formátu, tak to samozřejmě nemusíš ukládat i do BMP).
2. zmenšit obrázek tak, aby to šlo uložit
3. zkusit uložit jako PNG (ten by měl vyžadovat taky trochu míň paměti), ten u takto velkých obrázků může být ve výsledku menší než JPEG. (PNG nebude mít problém nikdo otevřít.)
4. Novější 64 bit PS, nebo použít jiný software.
#6 Sani
pokud máš problém s pamětí, musíš zkusit zvolit jiný formát. (Pokud je v tvé verzi možnost ukládat jako PDF ten vyžaduje méně RAM, ale o hodně víc času pro výpočet.)
Pro uložení obrázku o takovéto velikosti do formátu JPEG se navýší potřebná paměť o zhruba 1GB (přesto že má výsledný obrázek pár MB).
Já než bych obrázek sprznil formátem JPEG, a chtěl šetřit místem, tak bych jej raději zmenšil ve photoshopu (pokud by bylo nutné jej zmenšovat) a pak uložil bezeztrátově například jako TIFF s kompresí LZW.
ps, U PS je nedostatek paměti celkem běžným jevem.
#1 Janulka123
Nechci dělat reklamu, ale pokud chceš řešit editaci obrázků ne jejich evidenci. A pokud nepotřebuješ 100% kompatibilitu s Adobe formáty a nechceš každý rok kupovat předplatné tak za sebe doporučuji Affinity Photo Mají k to mu i tutoriály. Jen malé upozornění: pokud děláš 2d grafiku je dobré koupit i Designer (na fotografie by ti mělo Photo stačit).
Dole na jejich stránkách je i trial.
#1 Troy585
jde o to že kód probíhá tak jak je napsaný. To znamená že se potom se vykonají ty podmínky, za nimi v kódu následuje kód Chyba: (to se nepřeskakuje).. takže se vykoná vždy pokud neskočíš na Platba:. Takže tu část kódu Chyba: musíš přeskočit jiným goto.
#3 hlucheucho
Nevím jestli po tomto druhém vysvětlení to někdo pochopil lépe...
Na základě čeho tu cestu vytváříš, když to děláš ručně?
kdyby náhodou:
using Microsoft.Win32;
static void Main(string[] args)
{
//ukázka přístupu ke klíči: HKEY_CURRENT_USER\Control Panel
try
{
using (RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser , RegistryView.Default))
{
using (RegistryKey sub_key = key.OpenSubKey("Control Panel", false))
{
Console.WriteLine(sub_key.Name);
Console.WriteLine("-----------------------------------\n");
var names = sub_key.GetSubKeyNames(); //výpis podklíčů
foreach(string s in names)
{
Console.WriteLine(s);
}
Console.WriteLine("-----------------------------------\n");
//výpis hodnod podklíče: HKEY_CURRENT_USER\Control Panel\Colors
using(RegistryKey colors_key = sub_key.OpenSubKey("Colors"))
{
var values = colors_key.GetValueNames(); //výpis hodnot
foreach (string s in values)
{
Console.WriteLine(s);
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
#2 Paldo
V Corelu nevím, u konkurence to není problém, je tam na to nástroj "šipka":
#24 oxidián
//tahle smyčka nemá žádný smysl:
for(i = 0; i<TABLE_TYPES_NUM; i++) // count of tables
{
TABLE_ * table_item = &(table_arrays[i]);
currentTableElementsNum = (table_item[0]).num;
}
// a char * prepareBuffer nic nevrací
//------------------------------------
//tady zbytečně pracuješ s neinicializovanou proměnnou tables:
table_arrays[0] = tables.radiation_insolation;
table_arrays[1] = tables.radiation_radiation;
table_arrays[2] = tables.winds;
table_arrays[3] = tables.pressure;
table_arrays[4] = tables.humidity;
table_arrays[5] = tables.temperature;
//není lépe provádět ten kód podle logiky aplikace?
//------------------------------------
// a co plánuješ s tímto, taky nevím:
TABLE_ *table_arrays[6];
//lépe řečeno k čemu je to dobré
a taky nechápu smysl zakládat pole o velikosti 1.
#1 OndraT
1. Jsi ve špatné diskuzi. Diskuze k C# je tady.
2. Tady je takový pro začátečníka jednoduchý způsob:
static void Main(string[] args)
{
string text = "Ahoj, jak se máš?";
string[] words = text.Split(new char[] { ' ', ';', ',', '.', ':', '\t', '?', '!', '+', '-', '*', '/', '\r', '\n', '\', '\v' });
foreach(string word in words)
{
if (word.Length > 0) Console.WriteLine("{0} = {1}", word, word.Length);
}
Console.ReadKey();
}
nebo:
static void Main(string[] args)
{
JinyZpusob("Ahoj, jak se máš?");
Console.ReadKey();
}
//nahrazení nepísmenných znaků oddělovačem
static string Prepare(string text)
{
StringBuilder bu = new StringBuilder(text);
for(int i=0; i<bu.Length; i++)
{
if (!Char.IsLetterOrDigit(bu[i])) bu[i] = ';';
}
return bu.ToString();
}
static void JinyZpusob(string s)
{
string text = Prepare(s);
string[] words = text.Split(new char[] { ';' });
foreach (string word in words)
{
if (word.Length > 0) Console.WriteLine("{0} = {1}", word, word.Length);
}
}
#1 Polda18
Přidání ikony do konzole:
1. Resource Files->Add->NewItem source.rc (na názvu nezáleží, ale přípona musí být .rc)
2. Otevřít soubor source.rc a do něj napsat: MAINICON Icon "Ikona.ico" (Ikona.ico musí existovat ve složce se souborem source.rc)
3. provést kompilaci
(
Pokud se ti, změna ikony v exploreru ihned neprojeví musíš zavolat příkaz:
u Win 10: ie4uinit.exe –show
starší verze: ie4uinit.exe -ClearIconCache
)
Pro použití gcnew apd. bys musel dělat CLR projekt. (proto, ti to podtrhává)
#1 Veronika
Pokud tabulkou myslíš StringGrid:
#5 Kit
https://en.wikipedia.org/wiki/Hungarian_notation pokud ji máš zažitou, muže ti pomoct v orientaci v kódu.
#8 global
Jak píšeš slouží to jako ukazatel na místo v paměti, v tomto případě na pole charů. Ale lze tím odkazovat i na jiné objekty třeba na třídy.
char meno[8]; - je pole o pevně daném rozměru 8, již při psaní programu.
ale pokud předem neznáš rozměr pole můžeš vytvořit nové, za běhu programu pomocí:
char *meno = new char[velikost]; (dynamická alokace paměti)
ale u tohoto způsobu je potřeba se postarat o uvolnění z paměti. To se provádí, buď hned jak víš, že už jej nebudeš potřebovat, nebo v destruktoru třídy, nebo před ukončením programu, pomocí:
delete []meno;
#1 LeArnie
- Toto je sekce C++, takže jsi měl založit vlákno v sekci .NET!
- Pro vložení kódu slouží tlačítko <?
- pro separování hodnoty s textu používej TryParse nebo Parse v try-catch
- ve vnitřní smyčce musíš přece počet hvězd navyšovat o aktuální řádek
- místo text boxu, bych použil NumericUpDown
private void button3_Click(object sender, EventArgs e)
{
try
{
int pocet = int.Parse(textBox1.Text);
listBox1.Items.Clear();
for(int radku=1; radku <= pocet; radku++)
{
listBox1.Items.Add(new string('*', radku));
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
ještě přidám i tvou variantu:
for (int radku = 0; radku < pocet; radku++)
{
string s = null;
for (int j = -1; j < radku; j++) s += "*";
listBox1.Items.Add(s);
}
#1 Kaja
doporučuji si psát programy hotové programy, které mají nějaký smysl. Budeš narážet na nové věci a řešit různé problémy.
Napadá mě například: zjišťovat informace o souborech (jednoduché je například číst ID3 tag u mp3 souborů, nebo zobrazit vlastnosti BMP souborů). Vytvořit program pro synchronizaci složek. Výpočet obsahů, obvodů, úhlů různých objektů. Výpočet hmotnosti tělesa na základě jeho hustoty. Převod z římských čísel na arabské a naopak. Porovnání souborů. Generovat obrázky a aplikovat na ně různé filtry. Zálohování souborů. Vyhledávání a správa souborů. Konverze souborových formátů. Statistiky...
Je toho spousta co se dá napsat, záleží na tom co koho zajímá.
#7 visk
Pokud začínáš, doporučuji začít se základy.
Mimochodem, to MCI jsi taky nerozchodil?
ps, nevím jestli to "virus" obsahuje nebo ne, ale případně to zkus stáhnout třeba přes EDGE. A připojíš to nejspíš podobně jako Winmm.dll, použití se dočteš v dokumentaci. Pokud neumíš anglicky, tak si zprovozni v prohlížeči doplněk pro překlad stránek (nebo to dělej ručně pomocí google translate). Ale pokud se chceš programování věnovat, tak se nevyhneš učení se anglicky, pokud se angličtinu učit nechceš, tak se na programování vykašli (protože automatický překlad zatím moc "nepřemýšlí").
#3 visk
to bude tím, že se tou radou neřídíš:
tohle není "Microsoft.VisualBasic", ale "Microsoft VisualBasic for App.."
Microsoft.VisualBasic najdeš pod Assemblies->Framework
(poprvé jsem to nenapsal úplně podrobně, neměl jsem po ruce VS a věřil jsem, že to najdeš)
#1 Tux
Nerad dělám za študáky úlohy, protože vidím jak to vypadá, když světu vládnou pitomci s diplomem. Ale tentokrát udělám z nudy výjimku.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> WordsExtract(const char delim, const string str);
int main()
{
string input = "2012,2013,2015-2020, 2001 , 2002 , 2003 ,2005,2006 - 2009";
vector<string> inp = WordsExtract(',', input);
for (unsigned u = 0; u < inp.size(); u++)
{
unsigned a = 0, b = 0;
if (0 < sscanf(inp[u].c_str(), "%u-%u", &a, &b)) // base c
{
if (b == 0) b = a;
for (; a <= b; a++)
{
cout << a << endl;//tady budeš počítat velikonoce
}
}
}
system("pause");
return 0;
}
vector<string> WordsExtract(const char delim, const string str)
{
vector<string> result;
string word;
for (string::const_iterator it = str.begin(); it != str.end(); it++)
{
if (*it == delim)
{
if (!word.empty())
{
result.push_back(word);
word.clear();
}
}
else
{
if (isdigit(*it) || (*it == '-' && !word.empty())) word += *it;
}
}
if (!word.empty()) result.push_back(word);
return result;
}
ber to jako inspiraci, ne jako řešení!
#1 lokomotiva852
zkus ten projekt dát do jiné složky, třeba ti chybí práva k zápisu do stávající složky.
ps, pokud máš win10, tak se rovnou uč ve Visual Studiu a ne na předpotopním software
úplně ti postačí i express verze: stažení
#1 Momok
pokud ti jde o vysvětlení:
int main(void)
{
int cit, jmen, j, i = 0, zac = 0;
int zb[MAX] = { 0 };
char vysl[MAX];
FILE *fin, *fout;
fin = fopen("zlomky.in", "r"); //načte soubor pro čtení
fscanf(fin, "%d %d\n", &cit, &jmen); //ze souboru fin získá hodnoty do cit a jmen
fout = fopen("vysledek.out", "w"); //otevře soubor pro zápis a zkrátí na nulovou délku
if (cit >= jmen) {//pokud je cit větší nebo rovno jmem
zac = cit / jmen;//vydělí cit jmen
cit %= jmen; //do cit vloží zbytek po celočíselném dělení cit:jmen
}
fprintf(fout, "%d.", zac); //zapíše do souboru hodnotu zac
if (!cit)//když cit je nula
fprintf(fout, "0");//zapíše do souboru 0
while (cit)//smyčka (to mezi závorkami) se bude opakovat dokud cit nebude 0
{
zb[cit] = i + 1; //zapíše do pole zb na pozici cit hodnotu o jednu větší než i
cit *= 10; //vynásobí cit deseti
vysl[i] = cit / jmen + '0'; //do výsledku na pozici i vloží cit:jmen + 48 (48 je hodnota znaku 0)
i++; //navýší i o jedna
cit %= jmen; //do cit vloží zbytek po celočíselném dělení cit:jmen
if (zb[cit]) break; //když zb[cit] není nula ukončí smyčku
}
if (cit)//když cit není nula
{
//do j vloží hodnotu z pole vysl a to z pozice uložené v poli zb na pozici cit (ale o jednu nižší)
//(tohle se krkolomně popisuje)
j = vysl[zb[cit] - 1];
// a na tu pozici hodí nulu
vysl[zb[cit] - 1] = 0;
}
vysl[i] = 0; //do vysl na pozici i vloží nulu
fprintf(fout, "%s", vysl); //zapíše do souboru znaky z pole vysl, bude zapisovat dokud nenarazí na nulu
if (cit)//když cit není nula
{
fprintf(fout, "("); //zapíše do souboru závorku
vysl[zb[cit] - 1] = j; //na toto umístění vloží j
vysl[i++] = ')'; //do vysl na pozici i vloží závorku a pak i navýší o jedna
vysl[i] = 0; //do vysl na pozici i vloží nulu
fprintf(fout, "%s", vysl + zb[cit] - 1); //zapíše do souboru znaky z pole vysl od pozice dle výpočtu
}
return 0;//vrátí 0
}
zkoumat smysl programu se mě nechce, ale každopádně chybí tam ošetření chyb
#5 peter
Pinacle Studio je spíš pro "děti" a této sekci raději po zkušenostech (před lety) Cyberlink PowerDirector. Pokud nějakou alternativu k Vegas tak snad jen: Final Cut Pro, nebo předražený Adobe Premiere Pro, ale s těmi prakticky žádnou zkušenost nemám.
#3 Petra123
Podle mě je hodně intuitivní a přehledný. Myslím, že za pár hodin se v něm naučí základy "každý". Jistě pokud jsi ještě nikdy nepracovala s audiem/videem budeš to mít trochu těžší, ale snadnější software na podobné úrovni budeš hledat těžko.
2. verze s vectorem:
#include <stdio.h>
#include <vector>
#include <time.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
const int MAX_VALUE = 10;
//---------------------------------------------------------------------------
int main()
{
std::vector<int>tmp; //zásobník
for(int i=1; i<=MAX_VALUE; i++)tmp.push_back(i); //naplnění zásobníku čísly 1- MAX_VALUE
std::vector<int>out; //výstup
srand (time(NULL)); //inicializace pseudonáhodných čísel
int r;
while(!tmp.empty()) //smyčka bude pokračovat, dokud zásobník obsahuje nějaké prvky
{
r = random(tmp.size()); //náhodný výběr indexu
out.push_back(tmp[r]); //přihození čísla pod indexem do výstupního seznamu
tmp.erase(tmp.begin() + r); //odebrání vybrané položky
}
for(unsigned i = 0; i<out.size(); i++)printf("%i\n", out[i]); // výpis
system("PAUSE");
return 0;
}
#1 H3k70r
1.
Tedy, generovat čísla ty házet do pole, tak dlouho dokud nebude plné a zároveň procházet pole pro kontrolu duplicitních čísel. (Pro počet doplněných čísel bude třeba mít pomocnou proměnnou, která bude sloužit jako pozice na kterou se má zapisovat, a nebo použít pro výstup std::vector)
2.
Pokud velikost pole má být totožná s rozsahem hodnot, stačí vygenerovat třeba vector jako zásobník hodnot (v tomto případě s čísly 1-10) náhodně vybírat index hodnoty s tohoto vectoru a přiřazovat hodnotu pod indexem do pole a tuto pak odstranit ze zásobníku. Smyčka by trvala tak dlouho, dokud nebude zásobník prázdný (v tomto případě 10x).
Ahoj, nemáte někdo zkušenosti se získáváním informací o stopě (především mě jde o tagy a délku stopy) nejlépe s využitím nainstalovaných kodeků?
Případně i pokud máte vyzkoušenu nějakou free knihovnu...
Jde mi hlavně o soubory WMA, OGG, AVI, MP4, MPG, MKV, jediné co už mám vyřešeno je MP3 a WAV.
pro lepší vysvětlení while:
public static void Test()
{
Console.WriteLine("vypíše: 12345");
int i = 1;
while(i < 6)
{
Console.Write(i);
i++;
}
Console.WriteLine("\nvypíše: 123");
int j = 1;
while (j < 6)
{
Console.Write(j);
if (j == 3) break;
j++;
}
}
příklad:
public void RandomCisloZ(int max, int max2)//<název funkcí se formátuje spíš takto
{
int cislo1 = random_cislo.Next(1, max);
int cislo2, test;
while(true) //nekonečná smyčka
{
cislo2 = random_cislo.Next(1, max2);
test = cislo1 / cislo2; //vydělím to
if (cislo1 == (test * cislo2)) break; // násobením ověřím, že dělení proběhlo správně
}
// zbytek kódu jsem nechal tak, protože nevím jako to máš
label1.Text = cislo1.ToString();
label3.Text = cislo2.ToString();
je_to_cislo = int.TryParse(Vysledek1.Text, out vysledek_z_boxu);
if (je_to_cislo = !true)
MessageBox.Show(this, "Musíš použít číslice, né písmena!");
Vysledek1.Clear();
}
#4 vamvam
nejprve k k té smyčce:
while (test != 0 || test >= 1) //řekněme že test je 8,
{
//takže se to dostane do smyčky
cislo2 = random_cislo.Next(1, max2);
if(test == 0)
{ //toto se nikdy nesplní,
//protože se to do smyčky dostane jen pokud není 0
break;
}
//test jsi nezměnil, takže smyčka bude pokračovat
}
#2 vamvam
1. pokud chceš celočíselné hodnoty, tak tam nedávej float, ale třeba int (navíc random vrací stejně int)
2. vždy je lepší sem dát celou funkci, ne jen část (lépe se zjišťuje, kde je chyba - navíc může být zrovna v místě, které tu nedáš)
while (test != 0) - není to náhodou nekonečná smyčka?
navíc testuješ to následovně:
while (test != 0) = pokud test není nula
if(test == 0) a zároveň pokud je nula..
#8 Pikin88
Mě to přijde nějaké divné. Chceš mi říct, že ti poběží nonstop počítač připojený na internet, na kterém poběží aplikace, která v určitém čase (podle slunce) spustí čerpadlo (pokud jde o čerpadlo, které souvisí s vytápěním, je nejrozumnější řídit se teplotou - spouštět to termostatem. Pokud to má souviset s intenzitou světla, dá se použít soumrakový spínač). Nechápu, k čemu je dobré spouštět nějaké čerpadlo přesně podle slunce (on se stejně přesně západ slunce určit nedá - stačí že budeš mít v blízkosti nějaký kopec), přece to musí stačit zhruba - takže si vytvořit "tabulku" s časem spuštění pro každý den.
A když by jsi to chtěl přesně tak, jak si to definoval, tak půjde o kompletní software psaný na zakázku (nejspíš to poběží jako služba) a to doporučuji dát do sekce inzerce.
Kdybych to dělal já, tak bych aplikaci pro získávání dat napsal v C# a komunikoval s arduinem přes dll napsanou v C.
#6 Pikin88
http://api.sunrise-sunset.org/json?lat=49.837982&lng=-15.4687499&date=today
tady získáš informace o východu a západu slunce, (jen si v odkazu uprav souřadnice podle potřeby)
Ze získaného textu si musíš pouze vytáhnout požadovanou hodnotu.
http://maps.googleapis.com/maps/api/geocode/xml?address=Praha
a tady získáš souřadnice
(jak moc přesné jsou informace jsou v odkazech, nevím)
Dynamická alokace paměti (pro libovolně velká pole):
http://www.sallyx.org/sally/c/c18.php
Prostě něco zkus, ať je alespoň vidět snaha;)
#3 jordi1811
jak pracovat s polem:
http://www.sallyx.org/sally/c/c09.php
jak vypočítat aritmetický průměr:
http://www.matematika.cz/prumer
cykly:
http://www.sallyx.org/sally/c/c12.php (dole je Cyklus for)
Podívej moc nad tím přemýšlíš.
Stáhni si Visual Studio Community 2015
- je zdarma i pro komerční použití (dokud na tom nevyděláš 1 000 000 dolarů) - pokud máš málo místa na disku, tak ti bohatě bude stačit i verze Express)
Podívej se na tento tutoriál.
Za pár dnů budeš umět základy a uvidíš jestli ti C# sedne.
#15 vamvam
v podstatě dá, ale na některé věci, například náročný 3D software, ovladače, přímý přístup k hardwaru, nějaký nástroj pro komunikaci v síti (velké množství souborů a dat), antiviry, zpracování videa, nebo i audia (nemyslím přehrávání, ale editaci a efekty) je lépe zvolit C++ nebo jiný jazyk. V podstatě už to zmínil KIIV. (Ale vlastně mě nenapadá nic co by v C# napsat nešlo vůbec.) Navíc pokud je potřeba v C# můžeš importovat funkce z DLL, kterou napíšeš v C++.
Ale když se chceš jazyk učit sám, C# má jednu velkou výhodu (oproti asi všem jazykům), na internetu se dá najít moc materiálu.
A má taky (pro někoho) nevýhodu: sice se dá jaksi používat v linuxu, ale primárně je určen pro Windows.
#13 vamvam
Lehce C, dlouho VCL/C++ teď většinou C#
(C# především proto, že většinou projekty co dělám potřebuji udělat rychle a na poctivé WinApi nemám čas a předražený C++ Builder kupovat nemíním. Většinou dělám formulářové nebo konzolové aplikace pro výpočty, práce se soubory, manažery, zpracování obrázků apd.)
#18 Sejpak tam spíš řeší použití ve více projektech.
Ty máš v některém ze souborů duplicitně "void Cihla::nakreslit(SDL_Surface*screen)" - třeba v souboru grafika.h. Normálně se to řeší tak jak jsem psal v příspěvku výše (pouze jsem zapomněl v deklaraci třídy za } dát ; - to je důležité).
V první řadě bych radil si pořídit novější IDE (to co používáš vyšlo v roce 2004), u modernějších se často přesně dozvíš, kde se duplikát nalézá. (Když už nechceš Visual Studio ani Code::Blocks, tak si sežeň alespoň dev-C++ 5.11)
#10 vamvam
bez toho abych se díval ne nějaké statistiky, tak často vídám v inzerci C# .NET, MySQL, SQL, ASP.NET, PHP, Java (hlavně pro mobilní aplikace) a i dost C/C++. Ale na druhou stranu, myslím že např. C# programátorů bude přibývat jako hub po dešti, takže C++ programátoři se možná stanou více ceněnými.
#12 Sejpak
to ho nezajímá, soubor H nic o souboru CPP neví
správně by jsi to měl mít:
#ifndef _BREAKER_H
#define _BREAKER_H
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
int Lock(SDL_Surface* screen);
void palka(SDL_Surface *screen,int x,int y,int x2,int y2);
class Cihla
{
private :
int x,y,x2,y2,red,green,blue;
bool existence;
public :
Cihla();
void nakreslit(SDL_Surface*);
void souradnice_zapis(int,int,int,int);
int souradnice_kontrola(int,int,int);
void barva(Uint8,Uint8,Uint8);
void exist_zapis();
bool exist_kontrola();
};
#endif
a cpp:
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include "grafika.h"
#include "breaker.h"
int Lock(SDL_Surface* screen)
{
if(SDL_MUSTLOCK(screen))
{
SDL_LockSurface(screen);
return 1;
}
else
return 0;
}
//atd.
nene tím to určitě není
tak proč to v kódu co jsi tu dal nemáš ?
tam jakoby všechny funkce vypisujou že sou multiple definition
i konstruktor?
že se to člověk jen učí tak je jedno co použije
právě, když se člověk učí, tak potřebuje nedostatky popsat co nejlépe
#1 Sejpak
//v souboru H budeš mít něco jako:
class MyClass
{
public:
void MyFunc(bool b);
}
//tak do souboru cpp uvedeš něco jako:
void MyClass::MyFunc(bool b)
{
if(b)...
}
//a volat to pak můžeš:
MyClass *myClass = new MyClass();
myClass->MyFunc(true);
prostě všechno musíš definovat pouze jednou.
Když sem hodíš konkrétní kód, tak ti někdo přesně poradí.
#5 vamvam
ohledně posledního odstavce. Jsi toho typu lidí, kteří když si staví závodní auto, poskládají motor šroubek po šroubku, nebo objednáš hotový složený, od firmy s dobrou pověstí? Myslím, že na programování v C++ je potřeba víc trpělivosti a učení bude trvat nejspíš déle.
Mě přijde logičtější opačný postup, než co píše Kit. Tedy základy C - C++ , pak C# a přitom se zdokonalovat v C++.
Podle mě je lepší zapomenout na to, že něco nemusím řešit, než zapomenout na něco na co zapomenout nesmím, navíc například v C# můžeš například importovat WinApi funkce a bez hrubé znalosti C++ budeš asi na dokumentaci hledět jak puk. Taky se rozhoduj podle toho, co chceš programovat. Nebo jak napsal KIIV, vyzkoušej si co ti sedne.