Anonymní profil Blinder – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Blinder – Programujte.comAnonymní profil Blinder – Programujte.com

 

Příspěvky odeslané z IP adresy 92.62.224.–

Legendary
.NET › Filtrování procesů přes Powe…
2. 7. 2013   #178644

Ahoj,

potřeboval bych v PowerShellu napsat skript, který by uměl ukončit dané procesy. Ukončení stejných procesů není problém přes příkaz

Stop-Process -processname PROCESS_NAME*

Ale problém je, že potřebuji ukončit jen procesy od uživatele A a ne B (existuje více stejně pojmenovaných procesů, ale od různých uživatelů). Nevěděli byste, jak udělat filtrování i těchto uživatelů?

Legendary
.NET › Filtrování procesů přes Powe…
2. 7. 2013   #178643

Ahoj,

potřeboval bych v PowerShellu napsat skript, který by uměl ukončit dané procesy. Ukončení stejných procesů není problém přes příkaz

Stop-Process -processname PROCESS_NAME*

Ale problém je, že potřebuji ukončit jen procesy od uživatele A a ne B (existuje více stejně pojmenovaných procesů, ale od různých uživatelů). Nevěděli byste, jak udělat filtrování i těchto uživatelů?

Redwolf
C / C++ › Grafické prostředí v ANSI C
14. 4. 2013   #174953

Jo a bavím se o programu QT Creator 2.7.0 (v něm mi to při sestavování píše tu hlášku) :-)

Redwolf
C / C++ › Grafické prostředí v ANSI C
14. 4. 2013   #174952

Děkuju moc za rady. Nevěděl jsem, že QT Creator podporuje i ANSI C. Každopádně jsem se nakonec rozhodl, že bude jednoduší, když využiji C++.

Pokouším se ale už dvě hodiny přeložit klasický "Hello Word" a zobrazuje se mi tato chybová hláška:

Cannot find file: C:\...\pokus.pro

Přitom výše uvedený soubor se v daném adresáři nachází. Nevíte, kde by mohl být problém?

Redwolf
C / C++ › Grafické prostředí v ANSI C
13. 4. 2013   #174942

Ahoj,

nevíte jestli existuje nějaká obdoba QT Creatoru i pro čisté ANSI C?

Blinder
C / C++ › Divné chování for cyklů
5. 4. 2013   #174492

   

void create_matrix ()
{
	
	first_matrix [2][2];
	first_matrix [0][0] = '\0';
	
	int k = 0;
	int i;
	char help [MAX_ELEMENT];
	for (i = 0; i < 2; i++)
	{
		int j;
		for (j = 0; j < 2; j++)
		{
			k++;
			printf("!!%i!!\t",matrix[i][j]);
			printf("Zadejte hodnotu pozice [%i][%i]: ", i, j);
			matrix [i][j] = k;
			printf("%i\t\n",matrix[i][j]);
		}
	}
	
	printf("=%i=\n", matrix[0][0]);
	printf("=%i=\n", matrix[0][1]);
	printf("=%i=\n", matrix[1][0]);
	printf("=%i=\n", matrix[1][1]);
}

A dvourozměrné pole mám definovaný na začátku programu, jako globální proměnnou.

int matrix [DEF][DEF];

A to DEF pak takto.

 

#define DEF 0

Blinder
C / C++ › Divné chování for cyklů
5. 4. 2013   #174487

Kontrolním výpisem jsem myslel to printf("%i\t\n",matrix[i][j]). Přičemž v tomto výpisu se mi vše zobrazuje v pořádku.

Když chci ale vypsat celou matici 2x2, třeba tímto kódem:

printf("=%i=\n", matrix[0][0]);
printf("=%i=\n", matrix[0][1]);
printf("=%i=\n", matrix[1][0]);
printf("=%i=\n", matrix[1][1]);

tak už se mi vypíše špatně, tedy 3, 4, 3, 4. Stejně tak, kdybych to nechal vypsat přes dva for cykl.. Zkoušel jsem to přeložit na jiném překladači a furt stejné..

Blinder
C / C++ › Divné chování for cyklů
5. 4. 2013   #174469

Ahoj,

snažím se vytvořit jednoduchou matici 2x2 a naplnit jí hodnotami 1, 2, 3, 4. Používám k tomu kód níže. Problém ale je, že při zpětném vypsání se mi do matice uloží pouze hodnoty 3, 4, 3, 4. Přitom kontrolní výpis mi v každém kroku zobrazí, že se do matice uložila správná hodnota....

int k = 0;
int i;
for (i = 0; i < f_height; i++)
{
	int j;
	for (j = 0; j < f_width; j++)
	{
		k++;
		matrix [i][j] = k;
		printf("%i\t\n",matrix[i][j]);
	}
}
kedarh
JavaScript, AJAX, jQuery › Předání hodnoty textu do PHP…
28. 2. 2013   #172173

Takže už jsem zase o kousek blíž. Pokud zadám jakýkoliv text, vypíše mi to všechny pozice.

JS kod je tenhle

function search()
{
$.ajax({
         type: "POST",
         url: "../neco.php",
         data: {term : $('#place_text').val()},
         success : search2
	   })
}

function search2()
{
   makeRequest('../neco.php', function(data) {
   var data = JSON.parse(data.responseText);
   for (var i = 0; i < data.length; i++) 
     {
        displayLocation(data[i]);
     }
    })
}


A neco.php takhle:

<?php
require_once("config/config.php");

$term = isset($_POST['term'])? $_POST['term'] : '';  
//echo $term;

try {

	
        $db = new PDO($dsn, $username, $password);
        $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		
        $places = $db->query("SELECT * FROM markers WHERE places LIKE '%".$term."%'");
        $markers = $places->fetchAll();
         
        echo json_encode( $markers );
         
    } catch (Exception $e) {
        echo $e->getMessage();
    }
?>

Jak už jsem psal, po zadání textu se mi vypíší všechny pozice. Nechápu proč, když v SQL dotazu mám

 '%".$term."%', kde je uložný text co napíšu v inputu... Nemám někde chybu?? Děkuji!

kedarh
JavaScript, AJAX, jQuery › Předání hodnoty textu do PHP…
28. 2. 2013   #172172

Myslíte takhle?

function search()
{
$.ajax({
         type: "POST",
         url: "../xml.php",
         data: {term : $('#place_text').val()},
         success : search2
	   })
}

function search2(data)
{
   makeRequest('../xml.php', function(data) {
   data = JSON.parse(data.responseText);
   for (var i = 0; i < data.length; i++) 
     {
        displayLocation(data[i]);
     }
    })
}
kedarh
JavaScript, AJAX, jQuery › Předání hodnoty textu do PHP…
26. 2. 2013   #172126

Děkuji za odpověď, už jsem to udělal takhle přes AJAX:

$.ajax({
         type: "POST",
         url: "../neco.php",
         data: {term : $('#place_text').val()},
          success : function (data) { 
                                     alert(data);
                                     window.location.href = "index.php"; }
	   })

Hodnota se přenese do

mysql_real_escape_string($_REQUEST['term'])

A výsledek se přes

 alert(data);
 window.location.href = "index.php";

vrátí na index.php.

To vše při zmáčknutí tlačítka hledat.

Tady mám celý JS kod a potřeboval šikovně umístit AJAX tak, aby tam hodnota textu byla zrovna, když volám funkci search(). Protože se mi pak makrers na mapě nezobrazí. Nějaký nápad?? Děkuji mockrát.

 <script type="text/javascript">
 
function init() {
 
    var mapOptions = {
      zoom: 7,
      center: center,
	  disableDefaultUI: true,
      mapTypeId: google.maps.MapTypeId.HYBRID
    }
     
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
    
}

 function makeRequest(url, callback) {
    test_ajax();
	var request;
	
	if (window.XMLHttpRequest) {
        request = new XMLHttpRequest(); // IE7+, Firefox, Chrome, Opera, Safari
    } else {
        request = new ActiveXObject("Microsoft.XMLHTTP"); // IE6, IE5
    }
    request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
            callback(request);
        }
    }
    request.open("GET", url, true);
    request.send();
}

var map;
// Střed - geografický střed České republiky
var center = new google.maps.LatLng(49.7417099, 15.33489899999995);
var geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow();


function displayLocation(markers) {
         
    var content =   '<div class="infoWindow"><strong>'  + markers.places + '</strong>'
                    + '<br/>'     + markers.places
					+ '<br/>'     + markers.type
                    + '<br/>'     + markers.desc + '</div>';
     
    if (parseInt(markers.lat) == 0) {
        geocoder.geocode( { 'places': markers.places }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                 
                var marker = new google.maps.Marker({
                    map: map, 
                    position: results[0].geometry.markers,
                    title: markers.places
                });
                 
                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.setContent(content);
                    infowindow.open(map,marker);
                });
            }
        });
    } else {
        var position = new google.maps.LatLng(parseFloat(markers.lat), parseFloat(markers.lng));
        var marker = new google.maps.Marker({
            map: map, 
            position: position,
            title: markers.places
        });
         
        google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(content);
            infowindow.open(map,marker);
        });
    }
}

function test_ajax(){

$.ajax({
         type: "POST",
         url: "../xml.php",
         data: {term : $('#place_text').val()},
          success : function (data) { 
                                     alert(data);
                                     window.location.href = "index.php"; }
	   })
};




function search()
{

          
makeRequest('../xml.php', function(data) {
var data = JSON.parse(data.responseText);

 for (var i = 0; i < data.length; i++) {
            displayLocation(data[i]);
             
        }
    });

}

jQuery(document).ready(function(){
$('#place_text').autocomplete({source:'../auto.php', minLength:1,});

});




</script>
kedarh
JavaScript, AJAX, jQuery › Předání hodnoty textu do PHP…
25. 2. 2013   #172076

Dobrý den,


mám kod.
HTML

<input id="place_text" type="text" class="input-xlarge" />

neco.php

<?php
require_once("config/config.php");
 
try {
if ( !isset($_REQUEST['term']) )
    exit;
    
        $db = new PDO($dsn, $username, $password);
        $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        
        $places = $db->query("SELECT * FROM markers WHERE places LIKE '%". mysql_real_escape_string($_REQUEST['term']) ."%'");
        $markers = $places->fetchAll();
         
        echo json_encode( $markers );
         
    } catch (Exception $e) {
        echo $e->getMessage();
    }
?>

Ale nevím jak přes Jquery předat hodnotu z input id="place_text" do mysql_real_escape_string($_REQUEST['term'] ...


Neví s někdo rady??


Předem moc děkuji!

Sprinter
C / C++ › Problém s funkcí strcat()
13. 1. 2013   #170157

Tak se omlouvám za zbytečné téma, nakonec jsem zjistil, že chyba byla ve for cyklu nad kódem.. projevilo se to až na druhém počítači, kde se program zacyklil a skončil chybou (díky tomu jsem přišel na to, že tam nějaká chyba opravdu je :-))

Sprinter
C / C++ › Problém s funkcí strtok()
31. 12. 2012   #169604

Tak po testování jsem zjistil, že problém je v tomto příkazu:

char elements[sizeof(token_c)];

Když jsem nastavil, že velikost pole je třeba 80, tak to fungovalo. Furt ale nechápu v čem byla chyba, vždyť přeci mohu takto nastavit pole?...

Sprinter
C / C++ › Problém s funkcí strtok()
31. 12. 2012   #169603

No problém funkce strtok() je že "vytahuje" ze vstupu všechen text. Takže pokud chci tu konstrukci s while cyklem použít vícekrát na ten samý řetězec nastává chyba. Tu lze odstranit celkem jednoduše a sice:

char pomocne_pole [strlen(vstupni_retezec)];

strcpy(pomocne_pole, vstupni_retezec);

Dále pak pracuji jen s pomocným polem. Jednoduché a funguje to.

Ovšem teď jsem narazil na nepochopitelný případ, kde to takto nefunguje. Pracuji s úplně jiným polem ale i tak se mi prvky v původním poli vymažou... Netušíte, kde by mohl být problém?

printf("* Prvky mnoziny F: {%s} *\n", f_set); // OK
char working_f_set [strlen(f_set)];
strcpy(working_f_set, f_set);
char *token_c;
token_c = strtok(working_f_set, " ");
char elements[sizeof(token_c)];
while (token_c != NULL)
{
	
	strcpy(elements, token_c);
	char detect [3];
	detect[0] = elements[0];
	detect[1] = '.';
	detect[2] = '\0';
	if (strstr(f_set, detect) == NULL)
	{
		printf("Nenalezl jsem prvek: %c\n", detect[0]);
	}
	printf("Prvky z mnoziny F: %s\n", elements);
	token_c = strtok(NULL, " ");
}
printf("* Prvky mnoziny F: {%s} *\n", f_set); // Prazdna mnozina :-(
Sprinter
C / C++ › Ukládání prvků do pole
31. 12. 2012   #169602

Tak už to funguje :-) Problém byl jen v nějakých indexech, chtělo to správně ukončovat řetězec (ty ukončovací nuly mě jednou zabijou :-D)

Sprinter
C / C++ › Ukládání prvků do pole
30. 12. 2012   #169599

For cyklus byl špatně, prohodil jsem prvky:

for (m = strlen(help)-1; m >= 0; m--)

Ale furt to nefunguje tak jak by mělo :-D

Sprinter
C / C++ › Ukládání prvků do pole
30. 12. 2012   #169593

#5 vitamin
No jo, ale já furt potřebuji procházet ten vstupní text prvek po prvku a pro to se nejlépe hodí pole :-(

Prozkoumal jsem znovu ten úsek kódu, který mi nefunguje a poopravil pár chyb. V podstatě řeším jen úpravu polí. Pokud v ne_set[0] bude uložen znak "B", tak budu porovnávat všechny vstupní tokeny a hledat slovo, které má za dvojtečkou právě znak "B". Čili například dostanu:

S:AB

A:Bb

A:bB

No a teď použiji první podmínku if(n == last) - do této podmínky vstoupí pouze S:AB a A:bB (prostě všechny slova, které mají na konci "B"). Poslední slovo má znak "B" uvnitř, takže vstoupí do else a pak by mělo přejít do for cyklu. A zde je ten problém - for cyklus se vůbec nevykoná (Kontrolní výpis se vůbec nevypíše). Cyklus je zapsán správně a i při výpisu posledního prvku mi to správně háže 3ku...

char *token_b;
token_b = strtok(text_for_f_set, " ");
char help [strlen(text_for_f_set)];
while (token_b != NULL)
{
	strcpy(help, token_b);
	int n;
	for (n = 2; help[n] != '\0'; n++)
	{
		if (help[n] == ne_set[0])
		{
			char temp [strlen(help)];
			strcpy(temp, help);
			int last = strlen(temp) - 1;
							
			if (n == last)
			{
				temp[last+1] = '.';
				temp[last+2] = ' ';
				temp[last+3] = '\0';
			}
			else
			{
				int m;
				int b = strlen(help)-1;
				printf("Index posledniho prvku: %i\n", b);
				for (m = 0; m >= strlen(help)-1; m--)
				{	
					printf("*** Kontrolni vypis ***\n");
					if (m == n)
					{
						temp[n+1] = '.';
						int rest;
						for (rest = 0; rest <= n; rest++)
						{
							temp[rest] = help[rest];
						}
						break;
					}
					temp[m+1] = help[m];
				}
			}
			printf("Slovo: %s\n", temp);
			strcat(f_set, temp);
		}
	}
	token_b = strtok(NULL, " ");
}
Sprinter
C / C++ › Ukládání prvků do pole
30. 12. 2012   #169585

Koukám na to už tři hodiny a nejsem schopný v tom kódu najít chybu.. jde o to, že je rozdíl, jestli je ten znak B na konci pole, nebo někde uprostřed... a to je celý problém, kde to dělá chybu

First a follow potřebuji pro výpočet rozkladové tabulky (vstupem je LL(1) bezkontextová gramatika). Vůbec si nejsem jistý, jestli jsem na to zvolil správný postup. Napadlo mě už i použít frontu, abych nemusel furt projíždět ty tokeny... A vůbec nejlepší by bylo kdyby ten algoritmus už byl obsažen v nějaký funkci :-)

Sprinter
C / C++ › Ukládání prvků do pole
30. 12. 2012   #169577

Ahoj mám problém s úsekem kódu, kde se snažím manipulovat s prvkami a přesouvat je v poli.

Na vstupu je např: S:aSAb S:AB A:Bb A:aA A:bB B:@

Já se snažím najít slovo, které obsahuje znak @. Z tohoto slova je pro mě důležité to, co je před dvojtečkou, čili znak B. tento znak uložím do množiny Ne. Nyní podle tohoto znaku vytvořím fiktivní slovo B:B. a uložím do množiny F. No a teď koukám na vstupní řetězec a hledám znak B, který se vyskytuje na pravé straně slova (prostě za dvojtečkou). Pokud toto slovo najdu, tak přidám tečku za znak B a uložím ho do množiny F (např. najdu S:AB - čili do F uložím S:AB.).

V podstatě se snažím vytvořit Follow algoritmus (Firts and Follow algorithm). Problém je, že právě to poslední "tečkování" nefunguje - respektive vypíše se správně jen první slovo, pak už ne... jedná se o tu poslední konstrukci (přitom když sem si to zkoušel cvičně rozepsat na papír, chybu jsem nenašel)

void follow_algorithm (char *input)
{
	/* Hledani e-pravidel ve vstupnim retezci */
	char text_for_f_set [strlen(input)];
	strcpy(text_for_f_set, input);
	char text_for_e_rules [strlen(input)];
	strcpy(text_for_e_rules, input);
	char *token_a;
	token_a = strtok(text_for_e_rules, " ");
	char e_rules [strlen(text_for_e_rules)];
	while (token_a != NULL)
	{
		if (strchr(token_a, '@') != NULL)
		{
			if (e_rules[2] != '@')
			{
				strcpy(e_rules, token_a);
			}
			else
			{
				strcat(e_rules, token_a);
			}
		}
		token_a = strtok(NULL, " ");
	}
	
	/* 
	*   Ulozeni vsech prvku, ktere se daji prepsat na
	*   prazdny retezec do mnoziny Ne
	*/
	int size = ((strlen(e_rules))/3) + 1;
	char ne_set [size];
	int i = 0;
	int j = 0;
	do
	{
		ne_set[j] = e_rules[i];
		i = i + 3;
		j++;
	}
	while (e_rules[i] != '\0');
	ne_set[j] = '\0';
	
	/* Ulozeni fiktivniho pravidla do mnoziny F */ 	
	char f_set [500];
	int iter;
	for (iter = 0; iter <= strlen(f_set)-1; iter++)
	{
		f_set[iter] = '0';
	}
	f_set[0] = ne_set[0];
	f_set[1] = ':';
	f_set[2] = f_set[0];
	f_set[3] = '.';
	f_set[4] = ' ';
	f_set[5] = '\0';
	
	/* Prozatim follow pouze pro prvni prvek mnoziny Ne */
	printf("* Prvky mnoziny Ne: {%s} *\n", ne_set);
	printf("* Prvky mnoziny F: {%s} *\n", f_set);
	
	
	char *token_b;
	token_b = strtok(text_for_f_set, " ");
	char help [strlen(text_for_f_set)];
	while (token_b != NULL)
	{
		strcpy(help, token_b);
		int n;
		for (n = 2; help[n] != '\0'; n++)
		{
			if (help[n] == ne_set[0])
			{
				char temp [strlen(help)];
				strcpy(temp, help);
				int last = strlen(temp) - 1;
				int m;
				for (m = n+1; m >= last; m--)
				{
					if (m != last)
					{						
						temp[m+1] = help[m];
					}
				}
				if (m != last)
				{
					temp[last+1] = '.';
					temp[last+2] = ' ';
					temp[last+3] = '\0';
				}
				else
				{
					temp[n] = '.';
					temp[last+2] = ' ';
					temp[last+3] = '\0';
				}
				printf("Slovo: %s\n", temp);
				strcat(f_set, temp);
			}
		}
		token_b = strtok(NULL, " ");
	}	
	printf("* Prvky mnoziny F: {%s} *\n", f_set);
	
	
	
}
Sprinter
C / C++ › Problém s funkcí strtok()
30. 12. 2012   #169575
Sprinter
C / C++ › Problém s funkcí strtok()
30. 12. 2012   #169563

Tak jsem to vyřešil vytvořením stejného pole, jako input a překopírováním. Jsou tam teď tedy jakoby dvě úplně jiná pole, takže to funguje jak má...

Sprinter
C / C++ › Problém s funkcí strtok()
30. 12. 2012   #169561

Takže mohu v celém programu použít jen jeden takový cyklus? To nejde udělat jinak?

Sprinter
C / C++ › Problém s funkcí strtok()
30. 12. 2012   #169558

Ahoj,

mám problém s funkcí strtok(). Používám dvě konstrukce, které mi podle mezer rozdělují vstupní text na jednotlivá "slova". Pro speciální případ slova, ve kterém je obsažen znak @ mám nastavenou podmínku, aby toto slovo uložilo do připraveného pole. No a teď k samotnému problému - pokud je na vstupu právě znak @, tak se mi u druhé konstrukce vypíše pouze první slovo (tím funkce strtok() končí). Ovšem pokud první konstrukci zakomentuji, tak začne fungovat ta druhá.

Zdrojový kód přikládám níže:

// První konstrukce
char *token_a;
token_a = strtok(input, " ");
char e_rules [strlen(input)];
while (token_a != NULL)
{
	if (strchr(token_a, '@') != NULL)
	{
		if (e_rules[2] != '@')
		{
			strcpy(e_rules, token_a);
		}
		else
		{
			strcat(e_rules, token_a);
		}
	}
	token_a = strtok(NULL, " ");
}

// Druhá konstrukce (funguje pouze pokud odstraním tu první, jinak vypíše jen první slovo ze vstupního textu)
while (token_b != NULL)
{
	printf("TOKEN: %s\n", token_b);
	token_b = strtok(NULL, " ");
}	
Sprinter
C / C++ › Uložení čísla do matice podl…
29. 12. 2012   #169551

#17 vitamin
Ok, děkuji.

Sprinter
C / C++ › Uložení čísla do matice podl…
29. 12. 2012   #169528

Joo, já já si neuvědomil, že ten nadpisový řádek a sloupec už mam vlastně ve výpisu :-) Už funguje. Ještě dotaz - nikdy jsem se nesetkal s funkcí assert(). Jak vlastně funguje?

Sprinter
C / C++ › Uložení čísla do matice podl…
29. 12. 2012   #169523

Tak kód jsem upravil, ale teď vypisuje toto:

Nechápu, proč zrovna znak b to vypsalo takhle do tabulky...

/*
*	Funkce vytvori matici prvku ze ktere posleze vypise rozkladovou tabulku
*/
void create_table (char* orig_line, char* orig_column, char* line, char* column)
{
	int a = strlen(line);
	int b = strlen(column);
	char matrix [a+1] [b+1];
	
	/* Inicializace matice */
	int n;
	for (n = 0; n <= a; n++)
	{
		int m;
		for (m = 0; m <= b; m++)
		{
			matrix [n] [m] = ' ';
		}
	}
	matrix [0] [0] = 'M';
	
	/* Naplneni matice znaky pro nadpisovy sloupec v tabulce */
	int e;
	for (e = 0; e < a; e++)
	{
		matrix [e+1] [0] = line[e];
	}
	
	/* Naplneni matice znaky pro nadpisovy radek v tabulce */
	int f;
	for (f = 0; f < b; f++)
	{
		matrix [0] [f+1] = column[f];
	}
	
	/* Naplneni matice ciselnymi hodnotami dle danych souradnic */
	int iter;
	for (iter = 0; orig_line[iter] != '\0' && orig_column[iter] != '\0'; iter++)
	{
		matrix [get_index(line, orig_line[iter])] [get_index(column, orig_column[iter])] = '0' + (iter + 1);
	}
	
	/* Vypsani rozkladove tabulky (matice) */
	printf("Tabulka:\n");
	printf("M");
	int x;
	for (x = 0; column[x] != '\0'; x++)
	{
		printf("\t%c", column[x]);
	}
	printf("\n");
	int z;
	for (z = 0; line[z] != '\0'; z++)
	{
		printf("%c\t", line[z]);
		int y;
		for (y = 0; column[y] != '\0'; y++)
		{
			printf("%c\t", matrix [z] [y]);
		}
		printf("\n");
	}
}

/*
*	Funkce pro zjisteni indexu pole
*/
unsigned get_index (const char* str, char c)
{
	for (unsigned i = 0; str[i] != '\0'; i++)
	{
		if (str[i] == c)
		{
			return i;
		}
	}
	assert(0 && "Chyba v get_index");
}
Sprinter
C / C++ › Uložení čísla do matice podl…
29. 12. 2012   #169517

Přikládám ještě můj současný zdroják.

/*
*	Funkce vytvori matici prvku ze ktere posleze vypise rozkladovou tabulku
*/
void create_table (char* orig_line, char* orig_column, char* line, char* column)
{
	int a = strlen(line);
	int b = strlen(column);
	char matrix [a+1] [b+1];
	
	/* Inicializace matice */
	int n;
	for (n = 0; n <= a; n++)
	{
		int m;
		for (m = 0; m <= b; m++)
		{
			matrix [n] [m] = ' ';
		}
	}
	matrix [0] [0] = 'M';
	
	/* Naplneni matice znaky pro nadpisovy sloupec v tabulce */
	int e;
	for (e = 0; e < a; e++)
	{
		matrix [e+1] [0] = line[e];
	}
	
	/* Naplneni matice znaky pro nadpisovy radek v tabulce */
	int f;
	for (f = 0; f < b; f++)
	{
		matrix [0] [f+1] = column[f];
	}
	
	/* Naplneni matice ciselnymi hodnotami dle danych souradnic */
	int iter;
	for (iter = 0; orig_line[iter] != '\0' && orig_column[iter] != '\0'; iter++)
	{
		matrix [get_index(line, orig_line[iter])] [get_index(column, orig_column[iter])] = (iter + 1);
	}
	
	/* Vypsani rozkladove tabulky (matice) */
	printf("Tabulka:\n");
	printf("M");
	int x;
	for (x = 0; column[x] != '\0'; x++)
	{
		printf("\t%c", column[x]);
	}
	printf("\n");
	int z;
	for (z = 0; line[z] != '\0'; z++)
	{
		printf("%c\t", line[z]);
		int y;
		for (y = 0; column[y] != '\0'; y++)
		{
			printf("%d\t", matrix [z] [y]);
		}
		printf("\n");
	}
}


/*
*	Funkce pro zjisteni indexu pole
*/
unsigned get_index (const char* str, char c)
{
	for (unsigned i = 0; str[i] != '\0'; i++)
	{
		if (str[i] == c)
		{
			return i;
		}
	}
	assert(0 && "Chyba v get_index");
}
Sprinter
C / C++ › Uložení čísla do matice podl…
29. 12. 2012   #169516

Jasný, upravil jsem výpis a už to dělá to co má, děkuji :-) Měl bych ještě poslední dotaz. Může se stát, že na vstupu budou následující znaky:

S:dSA S:bAc A:dA A:c

pole orig_line pak bude obsahovat {S, S, A, A} a pole orig_column {d, b, d, c}

Když nechám vypsat tabulku, vypadá následovně:

Ovšem to je chybné - čísla 98 a 32 tam nemají co dělat, správně by tabulka měla vypadat takto:

Je mi jasné, že se tam bude muset přidat podmínka, ale nevim jaká (napadá mě jen projet matici a pokud narazí na dvouciferné číslo, tak ho nebude vypisovat... ale to není moc dobré, navíc nevim jistě zda ty čísla, které tam nepatří budou vždy dvouciferné)

Sprinter
C / C++ › Uložení čísla do matice podl…
28. 12. 2012   #169469

Ok, takže zadání je například takové (tedy to co já zadávám na vstupu):

S:aAS S:b A:bA A:a

No a nyní rozdělím tyto "slova" podle mezer:

S:aAS

S:b

A:bA

A:a

Potom vezmu pouze první znak a znak, který je hned za dvojtečkou, čili (a oboje uložim do pole):

orig_line = S, S, A, A

orig_column = a, b, b, a

Po odstranění duplicitních znaků dostanu nové pole:

line = S, A

column = a,b

Z pole line a column vytvořím nadpisovou řádku a sloupec tabulky:

Tak a teď se vrátím k poli orig_line a orig_column. A "imaginárně " je očísluji od jedné (píši imaginárně, protože v kódu postačí zjistit délku pole a pak jen iterovat - obě pole budou vždy stejně dlouhé):

No a nyní budu tyto čísla podle znaků ukládat do matice. Takže pro hodnotu 1 to bude takto:

Po projetí všech znaků bude celá tabulka vypadat takto:

No a problém, který řeším je právě to vkládání čísel do matice. V současné době mám napsáno toto:

/* Naplneni matice ciselnymi hodnoty podle danych souradnic */
int g_line_coordinate;
int h_line_coordinate;
int g_column_coordinate;
int h_column_coordinate;
int iter_line;
int iter_column;
	
int global;
for (global = 1; global <= strlen(orig_line); global++)
{
	int g;
	for (g = 0; g < a; g++)
	{
		int h;
		for (h = 0; h < b; h++)
		{
			if (matrix [g] [h] == orig_line[global])
			{
				g_line_coordinate = g;
				h_line_coordinate = h;
				iter_line = global;
			}
			if (matrix [g] [h] == orig_column[global])
			{
				g_column_coordinate = g;
				h_column_coordinate = h;
				iter_column = global;
			}
		}
		
	}
	if (iter_line == iter_column)
	{
		int g_result = g_line_coordinate + g_column_coordinate;
		int h_result = h_line_coordinate + h_column_coordinate;
		matrix [g_result] [h_result] = iter_line;
	}
}
Sprinter
C / C++ › Uložení čísla do matice podl…
28. 12. 2012   #169467

Tak mě napadlo tohle řešení, ale furt nefunguje... procházel jsem to znak po znaku a mělo by to takhle fungovat, tak už nevim..

	/* Naplneni matice ciselnymi hodnoty podle danych souradnic */
	int g_line_coordinate;
	int h_line_coordinate;
	int g_column_coordinate;
	int h_column_coordinate;
	int iter_line;
	int iter_column;
	
	int global;
	for (global = 1; global <= strlen(orig_line); global++)
	{
		int g;
		for (g = 0; g < a; g++)
		{
			int h;
			for (h = 0; h < b; h++)
			{
				if (matrix [g] [h] == orig_line[global])
				{
					g_line_coordinate = g;
					h_line_coordinate = h;
					iter_line = global;
				}
				if (matrix [g] [h] == orig_column[global])
				{
					g_column_coordinate = g;
					h_column_coordinate = h;
					iter_column = global;
				}
				if (iter_line == iter_column)
				{
					int g_result = g_line_coordinate + g_column_coordinate;
					int h_result = h_line_coordinate + h_column_coordinate;
					matrix [g_result] [h_result] = iter_line;
				}
			}
		}
	}
Sprinter
C / C++ › Uložení čísla do matice podl…
28. 12. 2012   #169460

No já se to snažím vyřešit tak, že projíždím vytvořenou matici a hledám v ní uložené prvky, které se rovnají prvnímu znaku v poli orig_line a orig_column. Když tyto prvky najdu, tak sečtu souřadnice prvků v matici, čímž dostanu výslednou souřadnici pro uložení čísla 1. Ovšem nedaří se mi přijít na řešení, které by bylo v C funkční.. V kódu níže se jedná o ty tři vnořený for cykly (vím že je to takhle špatně, ale už fakt nevím co s tím).. 

orig_line a orig_column je to původní pole s duplicitními prvky

line a column je pole bez duplicit (potřebné jen pro nadpisový řádek a sloupec v tabulce)

void create_table (char *orig_line, char* orig_column, char *line, char *column)
{
	int a = strlen(line);
	int b = strlen(column);
	char matrix [a] [b];
	matrix [0] [0] = 'M';
	
	/* Naplneni matice znaky pro nadpisovy sloupec v tabulce */
	int i;
	for (i = 0; i < a; i++)
	{
		matrix [i+1] [0] = line[i];
	}
	
	/* Naplneni matice znaky pro nadpisovy radek v tabulce */
	int j;
	for (j = 0; j < b; j++)
	{
		matrix [0] [j+1] = column[j];
	}
	
	/* Naplneni matice pravidly (ciselne hodnoty) */
	int k;
	int x;
	int y;
	for (k = 1; k <= strlen(orig_line); k++)
	{
		for (x = 0; x < a; x++)
		{
			for (y = 0; y < b; y++ )
			{
				if (matrix [x] [y] == orig_line[k] || matrix [x] [y] == orig_column [k]) /* Pri iteraci je to blbost, ale jak jinak? */
				{
					matrix [x+x] [y+y] = k; /* Secteni takhle je taky blbost, ale taky nevim, jak to vyresit jinak */
				}
			}
		}
	}
}
Sprinter
C / C++ › Uložení čísla do matice podl…
27. 12. 2012   #169435

Ahoj, jak byste řešili následující problém:

mám dvě pole line a column v nichž jsou například uloženy tyto znaky line = SSAA, column = dbdc. Tyto prvky po odstranění duplicity tvoří nadpisový rámec tabulky (viz níže).

No a já bych teď potřeboval podle kombinace prvků z pole line a column vytvořit čísla, která by představovali souřadnice. Pravidlo by fingovalo tak, že by se vždy vzal první znak z line a první znak z column. Například pro první znak by to bylo A a d - čili souřadnice by byla [A, d]. A do tabulky by se tedy uložila hodnota 1. U druhého znaku by to bylo zase S a b - [S, b]. Do tabulky by se uložila 2.

Je mi jasné, že musím vytvořit dvourozměrné pole, tedy matici. Ale nenapadá mě, jak zajistit to ukládání čísel...

Sprinter
C / C++ › Odstranění znaků z pole
27. 12. 2012   #169432

#12 vitamin
Aha :-) .. tak po správném překladu to už funguje jak má, děkuji.

Sprinter
C / C++ › Odstranění znaků z pole
27. 12. 2012   #169424

#10 vitamin
Vím, že už to asi bude vypadat, že si vymýšlím, ale při překladu mi to hodilo chybu, že prý ten for cyklus není kompatibilní s ANSI C, ale pouze s C99 (přiznám se, for cyklus bez intů vidím prvně :-)).. Bohužel práci kterou píšu musí být v ANSI .. je možné to nějak provést i v ANSI?

MucoVerde
C / C++ › Abecední řazení
27. 12. 2012   #169418

Nevíte, jak zařídit abecední řazení znaků? Napadá mě využít ASCII tabulku, nebo je na to nějaká fce? 

Sprinter
C / C++ › Odstranění znaků z pole
27. 12. 2012   #169417

#8 vitamin
Tak jsem při testování zjistil, že ten postup s použitím funkce filter() v určitých případech nefunguje.. Při určitých vstupech to některé znaky vyhodí.. Co se týče toho postupu s pomocným polem, tak ten už jsem zkoušel - problém ale je, že pokud použiji for cyklus, tak se mi vždy budou do pomocného pole kopírovat i znaky které nechci (leda napřed použít for cyklus na nulování, ale pak bych se opět dostal k případu {A, 0, 0, B})...

Sprinter
C / C++ › Odstranění znaků z pole
27. 12. 2012   #169405

#6 vitamin
Tak jsem použil Váš úsek kódu, k tomu přidal cyklus, který zbytek pole po seřazení uřízne a vše funguje jak má, děkuji. Akorát bych se ještě zeptal na funkci filter() - jsem v C začátečník a tak moc nechápu, proč je na konci funkce středník? A dále co znamená const void či const char (const)?

Sprinter
C / C++ › Funkce strstr()
27. 12. 2012   #169402

#2 zlz
Děkuji, máte pravdu, podmínka už funguje.

Sprinter
C / C++ › Odstranění znaků z pole
27. 12. 2012   #169401

#4 zlz
Nastavení filtru chápu - v úseku kódu níže v podstatě používám filtr, který máte uvedený v posledním příspěvku. Ale jde mi o to, že tímto postupem se mi z pole_1 vytvoří pole_2 takto: 

pole_1 = {A, A, A, B, C, C, C}

pole_2 = {A,  ,   , B, C,  ,  ,  }

Ale já bych potřeboval, ale pole_2 vypadalo takto: {A, B, C}

Omlouvám se, pokud jsem Vás jen špatně pochopil...

int j;
	int k;
	char dup_line_buffer [strlen(line_buffer)];
	for (j = 0; j < strlen(line_buffer); j++)
	{
		dup_line_buffer[j] = ' ';
	}
	for (k = 0; k < strlen(line_buffer); k++)
	{
		if (strchr(dup_line_buffer, line_buffer[k]) == NULL)
		{
			dup_line_buffer[k] = line_buffer[k];
		}
	}
	dup_line_buffer[k] = '\0';
	printf("dup_line_buffer: %s\n", dup_line_buffer);
Sprinter
C / C++ › Odstranění znaků z pole
26. 12. 2012   #169339

Ahoj,

řeším v jazyku C takový problém - potřebuji odstranit mezery z pole. Jde mi o tohle, mám pole {A, $, B, C, $, $, $}, kde znak $ představuje mezeru. Já z tohoto pole potřebuji udělat toto {A, B, C}. Existuje na to nějaká funkce? Dočetl jsem se, že pro C++ by to měla být funkce erase(), ale pro jazyk C nevím...

Sprinter
C / C++ › Chybné znaky v poli
26. 12. 2012   #169338

Tak ať se snažím, jak se snažím, stále mám problém s chybnými znaky ve výpisu. Mám pole, které předem nastavím na 100 znaků (neznám předem jeho velikost). Do tohoto pole ukládám znaky (např. 5). Po ukončení cyklu chci nastavit, že znak, který by byl jako šestý je "\0". Ovšem ve výpisu se řetězec neukončí a stále hází i znaky, které jsem do něj neukládal.

	printf("*******************\n");
	printf("Gramatika:\n");
	int i = 1;
	char *token;
	
	char line_buffer [100];
	char column_buffer [100];
	token = strtok(input, " ");
	char help [strlen(token)];
	while (token != NULL)
	{
		printf("(%i) %s\n", i, token);
		strcpy(help, token);
		line_buffer[i-1] = help[0];	
		column_buffer[i-1] = help[2];	
		token = strtok(NULL, " ");
		i++;
	}
	printf("*******************\n");
	line_buffer[i] = '\0';
	column_buffer[i] = '\0';
	printf("line_buffer: %s\n", line_buffer);
	printf("column_buffer: %s\n", column_buffer);
}
Sprinter
C / C++ › Chybné znaky v poli
24. 12. 2012   #169283

#4 KIIV
Chápu, že při vstupu "S:A|aB" se mi vlastně do pole set_of_elements uloží prvky takto:

set_of_elements[0] = S

set_of_elements[1] = A

set_of_elements[2] = ????

a dál už se nic neuloží.. ale nevim jak to vyřešit.. Napadá mě jen přepsání znaku "|" na jiný znak, třeba mezeru, ale to mi nepomůže. Lze nějak odstranit přímo ten druhý index pole? Nebo lze použít nějaké jiné řešení?

Sprinter
C / C++ › Chybné znaky v poli
24. 12. 2012   #169280

Přidal jsem ukončovací \0, a problém s výpisem znaků, které do pole nepatří jsem tím vyřešil. Mám ale ještě problém s následujícím usekem kodu:

char set_of_elements [500];
	
	if (isupper(input[0]) != '\0')
	{
		set_of_elements[0] = input[0];
		set_of_elements[1] = '\0';
		
		if (input[1] == ':')
		{
			char *token;
			token = strtok(input, " ");
			int i;
			for (i = 2; i <= strlen(token)-1; i++)
			{
				if (input[i] != '|')
				{
					set_of_elements[i-1] = input[i];
				}
			}
			printf("Mnozina prvku: %s\n", set_of_elements);
		}
		else
		{
			printf("*** Chybne zadany text na vstupu ***");
		}
	}
	else
	{
		printf("*** Chybi startovaci symbol (nebo je spatne zadany) ***");
	}

Výpis je správný, ale pokud dám na vstup např A:BC|CDE, tak se mi vypíše pouze ABC a zbytek CDE už ne.. přitom podmínkana oštření znaku "|" je ve for cyklu a výpočet by měl probíhat dál... 

Sprinter
C / C++ › Chybné znaky v poli
24. 12. 2012   #169277

Ahoj,

chtěl bych se zeptat, jestli by mi někdo nevysvětlil, proč mi například u níže uvedeného kódu:

char set_of_elements [sizeof(input)];
	
if (isupper(input[0]) != '\0')
{
	set_of_elements[0] = input[0];
	printf("Mnozina prvku: %s", set_of_elements);
		
}
else
{
	printf("*** Chybi startovaci symbol (nebo je spatne zadany) ***");
}

při zadání vstupu "AVC" mi obsah pole set_of_elements vypisuje "Ař)"? Mělo by se tam uložit pouze to první písmono, tedy "A". Napadlo mě, jestli není problém s ukončovacím znakem...

Sprinter
C / C++ › Převod struktury na char
24. 12. 2012   #169276

#2 crazy
Funguje, super, děkuji.

Sprinter
C / C++ › Převod struktury na char
24. 12. 2012   #169269

Ahoj, 

mám problém s převodem charu, uloženého ve struktuře do charu vytvořeného klasicky ve funkci. Pokaždé mi vyběhne hláška "warning: initialization from incompatible pointer type".

 Jedná se o převod níže - starting_line

void unavailable_symbols (queue *queue)
{
	char *starting_line =get(queue);
	printf("Prvni radka: %s", starting_line);
}
typedef struct foo_item
{
	char *line;
	struct foo_item *next;
}item;

typedef struct 
{
	item *head;
	item *tail;
}queue;


void init(queue *q);
void save(queue *q, item *new);
item *get(queue *q);
int is_empty(queue *q);
Sprinter
C / C++ › Automatická deklarace charů
24. 12. 2012   #169268

#6 crazy
Ok, děkuji. Problém vyřešen.

Sprinter
C / C++ › Automatická deklarace charů
24. 12. 2012   #169266

Strtok je přesně to co jsem hledal. Akorát mám ještě problém s následujícím

for(i = 0; i <= 3; i++)
	{
		token = strtok(input, " ");
		printf("TOKEN: %s\n", token);
	}

Ve výše uvedeném kódu mi bude vstup zadaný např. "abcd efgh abcd" vypisovat pouze 3x "abcd" (což je jasné). Jak udělám, aby se mi token vždy posunul na další pozici a tak ukládal následující text?

Sprinter
C / C++ › Automatická deklarace charů
24. 12. 2012   #169263

#2 crazy
Tohle chápu, nejprve všechny znaky načtu do charu, který alokuji na velikost vstupních znaků (strlen). Ale já teď potřebuju rozdělit ty "sektory" tak, aby každý spadal právě pod jeden char, např:

char sec1 = afafaf

char sec2 = agfaga

char sec3 = aggg

Problém je, že nevím kolik těchto charů budu potřebovat... 

Sprinter
C / C++ › Automatická deklarace charů
24. 12. 2012   #169261

Ahoj,

začínám programovat v C a tak prosím mějte se mnou trpělivost :-)

Problém který řeším je následující - mám nějaké znaky, které zadávám na vstupu do programu (pomocí gets()), např.

"afafaf afafaf afafaf afaf" Mezera má oddělovat jednotlivé sektory, ovšem počet těchto sektorů není předem znám.

Jde mi o to, že pro další psaní programu potřebuji, aby každý tento sektor byl uložen např. pod char sec1, char sec2 apod. Napadá mě jen ruční deklarace např. 10 takových charů a doufat, že vstup nebude delší... 

maru1maru
JavaScript, AJAX, jQuery › Javascript -jQuery- měnící s…
27. 1. 2012   #152946

Ahoj. Chtěla jsem vytvořit php stránku, do které by se načítaly jednotlivé- hlavička, patička, menu a text jednotlivých stránek. V hlavičce jsem chtěla udělat měnící se obrázky- fotky, což se pomocí xfade2.js povedlo v html stránce a i přes include do oné php stránky. Pak jsem v jiné html vytvořila vodorovné rozbalovací menu přes jiný javascript - hoverIntent . Jenže při načtení doma do Mozilly funguje jen druhý js a první ne- rozloží to obrázky pod sebe, místo aby se měnily. Pokud totéž dám na server hostingu, nefunguje ani jeden js a u druhého ani css....přitom vše je pořád ve stejných souborech, složkách.... Pokud v oné php stránce vynechám jednu z těch html stránek, druhá funguje bez problémů - na místním PC v Mozille, na serveru nefunguje ani jedna - opět zobrazeno v Mozille. Mohl by mi někdo poradit, jak to dát dohromady?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý