C/C++

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Како може да се сортираат низи во текстуален документ.Притоа во текстуалниот документ има запишано повеќе променливи. Пример
Tomic Stefan 1 2 3 4 5
Stojanovski Damjan 4 5 6 7 10
Клучот за сортирање е prezime. И дали може од текстуалниот документ да се читаат променливи кои се оделени со празно место.Како во овој случај да се прочита третата променлива од лево?
Треба да сортираш по презиме по азбучен ред или ?

Иначе за тоа да прочиташ една променлива не сум сигурен дали има сплит методи и слично, али еве прво што ми падна на памет е ова:

Код:
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

string getWordFromString(string str, int count)
{
	int i = 0;
	istringstream iss(str);
	do { string sub; iss >> sub; if(i==count) { return sub; } i++; }
	while (iss);
	return "Error...";
}

int main()
{
	cout << getWordFromString("Ova e rechenica za testiranje", 3) << endl;
        return 0;
}
Значи вчитаната линија од датотеката ја запишуваш како стринг и после го влечеш елементот кој ти треба почнувајки со индекс 0.

Значи ако:
Вчитаната линија е = Stojanovski Damjan 4 5 6 7 10
Тогаш:
getWordFromString("Stojanovski Damjan 4 5 6 7 10", 2) = 4 (третиот збор во вчитаната реченица).

Ако ти врши ова работа арно, ако не... :toe:
 
Член од
14 јануари 2008
Мислења
1.341
Поени од реакции
162
Како може да се сортираат низи во текстуален документ.Притоа во текстуалниот документ има запишано повеќе променливи. Пример
Tomic Stefan 1 2 3 4 5
Stojanovski Damjan 4 5 6 7 10
Клучот за сортирање е prezime. И дали може од текстуалниот документ да се читаат променливи кои се оделени со празно место.Како во овој случај да се прочита третата променлива од лево?
Најлесно е да направиш структура која ке има во себе едно поле од карактери за презимето, и едно за се останато. Направи поле од таа структура и вчитај ја целата датотека. И се што треба да направиш сега е да ги сортираш структурите користејки го го полето од карактери кај што ти е презимето. Ако нешто не е јасно ке напишам и код.

Едит:

Или пак како што SkyDriver напишал погоре, вчитај цел ред и извади го првиот збор.
 

ZoraNaSlobodata

Чоечко суштество
Член од
5 ноември 2008
Мислења
2.736
Поени од реакции
111
Здраво, праев семинарска за една другарка, во главно ја завршив ама имам некои проблеми,ако можи малце помош.

Прво, целта на семинарската

Програма во која преку мени ќе се одбира дали внесен стринг ќе се кодира или ќе се декодира.Кодирањето и декодирањето да се решат со 2 функции.
Клучот на кодирање : Во текстот се користат само големи букви од азбуката и цифри.Секоја буква се заменува со буква која е 4 места пред неа во АБЦдата.Првите 4 букви А,B,С,D, да се заменат респективно со последните 4 букви.И тра ла ла натаму.

Функцијата шо кодира

void kodiranje(char *string_kodiranje)
{
int str_length = strlen(string_kodiranje);
char new_string[50];

for( int i = 0; i <= str_length; i++)
{
switch(string_kodiranje)
{
case 'A':
new_string='W';
break;
case 'B':
new_string='X';
break;
case 'C':
new_string='Y';
break;
case 'D':
new_string='Z';
break;
case '0' :
new_string='a';
break;
case '1' :
new_string='b';
break;
case '2':
new_string='c';
break;
case '3':
new_string='d';
break;
case '4':
new_string='e';
break;
case '5':
new_string='_';
break;
case '6':
new_string='!';
break;
case '7':
new_string='?';
break;
case '8':
new_string='@';
break;
case '9':
new_string='&';
break;
default :

new_string=string_kodiranje- 4;


}

}

for(int b = 0; b < str_length; b++)
{

cout<<new_string<<endl;

}

}


Функцијата шо декодира

void dekodiranje(char *string_dekodiranje)
{
int str_length = strlen(string_dekodiranje);
char new_string[50];

for( int i = 0; i <= str_length; i++)
{
switch(string_dekodiranje)
{
case 'W':
new_string='A';
break;
case 'X':
new_string='B';
break;
case 'Y':
new_string='C';
break;
case 'Z':
new_string='D';
break;
case 'a' :
new_string='0';
break;
case 'b' :
new_string='1';
break;
case 'c':
new_string='2';
break;
case 'd':
new_string='3';
break;
case 'e':
new_string='4';
break;
case '_':
new_string='5';
break;
case '!':
new_string='6';
break;
case '?':
new_string='7';
break;
case '@':
new_string='8';
break;
case '&':
new_string='9';
break;
default :

new_string=string_dekodiranje+ 4;


}

}

for(int b = 0; b < str_length; b++)
{

cout<<new_string<<endl;

}

}


Главната

int main()
{
char str[50];
int i;

cout<<"Dali sakas vneseniot string da ti se : "<<endl;cout<<"1.Kodira"<<endl;cout<<"2.Dekodira "<<endl;
cin>>i;

switch(i)
{
case 1 :

cout<<"Vnesi recenica za kodiranje"<<endl;

cin>>str;

kodiranje(str);

break;

case 2 :

cout<<"Vnesi recenica za dekodiranje"<<endl;

cin>>str;

dekodiranje(str);

break;

default :

cout<<"Ti rekov da klajs 1 ili 2 "<<endl;

main();

}


system("PAUSE");
return EXIT_SUCCESS;
}
Сега работата е шо и на гла да се наместам ако внесам реченица со спејс драпа.Дури и да напрам case кај шо ако се внеси спејс пак да се клај спејс во новиот стринг, си игра мајтап со мене пак.

Ќе ве молам за помош. :salut:
 

MadA@FakA

Black&White
Член од
4 август 2006
Мислења
1.049
Поени од реакции
105
Уште еден хелп малку, па да одам да се изопијам :vozbud:

Значи имам датотека од структури, секоја структура е составена од Име, Презиме и Номер, а во задачата вели:

Датотеката да се сортира по Име, Презиме и Номер

Сега не ми е јасно по што да ги сортирам: по Име, Презиме или Номер, како е можно по сите 3 исто време ??
Што прво да сортирам, стварно не ми е јасен тексто. :toe:
 
Член од
6 јуни 2009
Мислења
3.094
Поени од реакции
445
Ivanco^^^
На местото од споредбата, наместо да споредуваш со знак, ќе повикуваш функција од типот:
int sporedi(stuct xx * a, struct xx * b);
Оваа се вика функција споредуваш. Во нејзе споредуваш цели објекти/структури. Ќе направиш вака во нејзе, прво споредуваш име. ако се исти, презима, ако и тие се исто тогаш номер. и таа функција ќе враќа број < 0 (пример -1) ако првата стриктура е помала, 0 ако се еднакви или број >0 (еве 1) ако втората е поголема.

И во алгоритмот за подредување, кој и да е, едноствно проверуруваш што вратила функцијата.

ZoraNaSlobodata
Забележав некои грешки. Пример при кодирање '0' ти се пресликува во 'a', но и 'd' се пресликува во 'a'.
При декодирање 'a' секогаш оди во '0'
Кој се точни спецификации на кодирањево? Кај големиве букви има префрлање на крајот на абецедата, а кај маливе нема.
 

ZoraNaSlobodata

Чоечко суштество
Член од
5 ноември 2008
Мислења
2.736
Поени од реакции
111
Ivanco^^^
На местото од споредбата, наместо да споредуваш со знак, ќе повикуваш функција од типот:
int sporedi(stuct xx * a, struct xx * b);
Оваа се вика функција споредуваш. Во нејзе споредуваш цели објекти/структури. Ќе направиш вака во нејзе, прво споредуваш име. ако се исти, презима, ако и тие се исто тогаш номер. и таа функција ќе враќа број < 0 (пример -1) ако првата стриктура е помала, 0 ако се еднакви или број >0 (еве 1) ако втората е поголема.

И во алгоритмот за подредување, кој и да е, едноствно проверуруваш што вратила функцијата.

ZoraNaSlobodata
Забележав некои грешки. Пример при кодирање '0' ти се пресликува во 'a', но и 'd' се пресликува во 'a'.
При декодирање 'a' секогаш оди во '0'
Кој се точни спецификации на кодирањево? Кај големиве букви има префрлање на крајот на абецедата, а кај маливе нема.
Сега точно ќе напишам, а инаку имам некои блесави грешки ја напишав набрзина за чупето.

Ете ја http://img163.imageshack.us/img163/2134/94605731.jpg
 
Член од
6 јуни 2009
Мислења
3.094
Поени од реакции
445
Еве го, го средив си сите валидации. Ако внесен знак не е според спецификациите за влез, не се менува.
Код:
#include <stdio.h>

char kodChar(char inputChar)
{
	if (inputChar>='A' && inputChar<='Z')
	{
		inputChar-=4;
		if (inputChar<'A')
		{
			inputChar = 'Z'-('A'-inputChar)+1;
		}
	}
	else if (inputChar>='0')
	{
		if(inputChar<='4')
			inputChar = 'a' + (inputChar - '0');
		else if (inputChar<='9')
		{
			switch (inputChar)
			{
			case '5':
				inputChar = '_';
				break;
			case '6':
				inputChar = '!';
				break;
			case '7':
				inputChar = '?';
				break;
			case '8':
				inputChar = '@';
				break;
			case '9':
				inputChar = '&';
				break;
			}
		}
	}
	return inputChar;
}

char dekodChar(char inputChar)
{
	if (inputChar>='A' && inputChar<='Z')
	{
		inputChar+=4;
		if (inputChar>'Z')
		{
			inputChar = 'A'+(inputChar-'Z')-1;
		}
	}
	else if (inputChar>='a' && inputChar<='e')
	{
		inputChar = '0'+(inputChar-'a');
	}
	else
	{
		switch (inputChar)
		{
		case '_':
			inputChar = '5';
			break;
		case '!':
			inputChar = '6';
			break;
		case '?':
			inputChar = '7';
			break;
		case '@':
			inputChar = '8';
			break;
		case '&':
			inputChar = '9';
			break;
		}
	}
	return inputChar;
}

void kodStr(char * strA)
{
	while (*strA)
	{
		*strA = kodChar(*strA);
		strA++;
	}
}

void dekodStr(char * strA)
{
	while (*strA)
	{
		*strA = dekodChar(*strA);
		strA++;
	}
}

int main()
{
	char strA[50] = "ABCDEFGH IJKLMNOPQRSTU VWXYZ01 23456789"; //работи со празни места
	//scanf("%s", strA);
	kodStr(strA);
	printf("%s\n", strA);
	dekodStr(strA);
	printf("%s\n", strA);
	return 0;
}
 
Член од
14 јануари 2008
Мислења
1.341
Поени од реакции
162
Сега точно ќе напишам, а инаку имам некои блесави грешки ја напишав набрзина за чупето.

Ете ја http://img163.imageshack.us/img163/2134/94605731.jpg
Проблемот е во тоа што cin чита се додека не наиде на празно место. Решение е да користиш scanf ако работиш во С или getline ако работиш во С++. За getline ке треба да користиш променлива од типот string.
 

ZoraNaSlobodata

Чоечко суштество
Член од
5 ноември 2008
Мислења
2.736
Поени од реакции
111
Фала ви за помошта луѓе, јас намирисав дека е со це ин проблемо, ама со гетлајн не ми работеше :toe:, значи мора стриктно класата стринг да ја користам за гетлајн,не можи ц стринг како низа од карактери :nesvest:
Ах ко ми збораја за предностите на scanf...
 
Член од
12 декември 2009
Мислења
5
Поени од реакции
0
mi treba pomos okolu edna programa ako moze nekoj neka pomozi! treba da se odredat sitee mozni pozicii sto gi bie lovecot vo sah za vneseni k,p koordinat. fala
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
mi treba pomos okolu edna programa ako moze nekoj neka pomozi! treba da se odredat sitee mozni pozicii sto gi bie lovecot vo sah za vneseni k,p koordinat. fala
Ако шаховската табла изгледа вака (т.е. ако полињата се означени со букви и бројки), тогаш еве го решението:

Код:
#include <iostream>

using namespace std;

void Hunter(int x, int y)
{
	char ch[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
	int no[] = {8, 7, 6, 5, 4, 3, 2, 1 };
	int i=x, j=y;;
	for(i=i; i<8 && j<8; i++ && j++) { cout << ch[i] << no[j] << " "; } cout << endl;
	i=x; j=y;
	for(i=i; i>=0 && j>=0; i-- && j--) { cout << ch[i] << no[j] << " "; } cout << endl;
	i=x; j=y;
	for(i=i; i>=0 && j<8; i-- && j++) { cout << ch[i] << no[j] << " "; } cout << endl;
	i=x; j=y;
	for(i=i; i<8 && j>=0; i++ && j--) { cout << ch[i] << no[j] << " "; } cout << endl;
}

int main()
{
	int x,y;
	cout << "Vnesete go 'x': ";
	cin >> x;
	cout << "Vnesete go 'y': ";
	cin >> y;
	Hunter(x, y);
	cin.get();
	cin.get();
}
Значи решениево ги печати полињата, пример:

A1, G4, H7, E3... во сите 4 насоки во кои може да се движи ловецот почнувајки од внесените координати.
 
Член од
12 декември 2009
Мислења
5
Поени од реакции
0
fala ti mnogu SkyDriver so si se potrudil no jas zaboraviv da kazam deka programata mi e za vo C , a koga ja gledam sega ova sto si ja postiral deka ne e vo C mi doaga da se kicknam ama fala sepak vo sekoj slucaj.
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
fala ti mnogu SkyDriver so si se potrudil no jas zaboraviv da kazam deka programata mi e za vo C , a koga ja gledam sega ova sto si ja postiral deka ne e vo C mi doaga da se kicknam ama fala sepak vo sekoj slucaj.
Исто е и во C само cin замени го со scanf и cout замени го со printf и тоа е тоа. :)

Резултатите печати ги со: printf("%c%d ", ch, no[j]);
 

ZoraNaSlobodata

Чоечко суштество
Член од
5 ноември 2008
Мислења
2.736
Поени од реакции
111
Побарај на гугл scanf i printf reference и ќе видиш детално како се користат.
 
Член од
2 октомври 2009
Мислења
100
Поени од реакции
2
Ако може помош објаснување било што пошто не ја разбирам задачава!
Да се изостави k-тата (овој број е внесен преку тастатура)
цифра од природниот број n внесен преку тастатура, броејќи
ги цифрите од цифрата на единиците
 

Kajgana Shop

На врв Bottom