• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

Помош за една проста програма?

  • Ја почнал/а темата
  • #1

Ivica_M

Intern
3 октомври 2008
226
3
Можеби е глупаво ама нешто не ми работи мозокот а треба една задача да решам :)

задачата гласи:

Да се направи програм којшто за внесена буква од тастатура проверува дали внесенат буква е голема или мала?

најдов алгоритам во Паскал:
алгоритам Буква
почеток
печати 'Внеси една буква '
читај буква
случај буква
'а'..'z': печати 'Буквата е мала'
'А'..'Z': печати 'Буквата е голема'
инаку
печати буква, 'Не е буква'
крај_случај
крај

Да ве потсетам ова е алгоритам во Паскал не во Ц++ само не ми е јасно како да го изведам овој дел

'а'..'z': печати 'Буквата е мала'
'А'..'Z': печати 'Буквата е голема'
не знам како во Ц++ и ве молам за помош.
Знам дека не е тешко ама кога ќе видам :)

Фала ви однапред за помошта!!!
 

Psychoo

Intern
1 мај 2008
374
7
Ohrid
Еве код за C може ке ти помогне, C++ не сум работел досега и незнам како оди кодот.. инаку кодот за C е следниов


#include <stdio.h>
 
#include <stdlib.h> 
 
int main(int argc, char *argv[])
 
{
char bukva;
 
 
    printf("vnesi golema bukva!\n");
 
    scanf("%c",&bukva);
 
    if(bukva>='A'&& bukva<='Z'){
 
                   bukva=bukva-'A'+'a';
 
                   printf("malata bukva e %c\n",bukva);
 
                   }
 
      else{
 
                        printf("ne vnesovte golema bukva\n");
 
                        }
 
    
  system("PAUSE");
  
  return 0;
 
}
 
 

maximilian

Gaining Experience
26 март 2008
1,064
74
Алгоритам си е алгоритам, тој работи на сите програмски јазици. Дури и повќето алгоритми заради универзалност се пишани во псевдо-кодови :).

Како и да е, ова е прелесна задача, еве еден предлог за решение:

Имаш оператор во С++ кој го изведува ASCII кодот на секој внесен знак, т.е.:
Код:
char a;
cin >> a;
[B]cout << (int)a;[/B]
Болдираното ќе ти го изваде ASCII кодот на знакот кој си го внесил. Е сега, треба да знаеш дека на малите букви ASCII кодот е во интервалот [97, 122], а на големита [65, 90].
Прво, треба да се осигураш дека знакот кој го внесуваш е секогаш буква, а тоа можеш да го сториш со do/while циклус, т.е.:
Код:
char a;
do
     cin >> a;
         while ( ((int)a < 65) || (((int)a > 90) && ((int)a < 97) ) || ((int)a>122) )
И веќе следниот чекор ти е да си провериш дали е мала, дали голема веќе внесената буква, односно:
Код:
if ( ((int)a > 64) && ((int)a < 91) )
    cout << "Bukvata e golema";
    else
         cout << "Bukvata e mala";
...and that's it :)
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Код:
#include <iostream>

using namespace std;

int main()
{
	char bukva;
	cout << "Vnesi bukva: ";
	cin >> bukva;
	if(bukva>='A' && bukva<='Z')
		cout << "nVnesovte golema bukva." << endl;
	else if (bukva>='a' && bukva<='z')
		cout << "nVnesovte mala bukva." << endl;
	else
		cout << "nVnesovte nevaliden znak." << endl;
	return 0;
}
Мислам дека е доволно просто и едноставно да не треба коментар и објаснување.:)
 

Stane

Gaining Experience
4 октомври 2007
2,497
77
Код:
#include <iostream>

using namespace std;

int main()
{
	char bukva;
	cout << "Vnesi bukva: ";
	cin >> bukva;
	if(bukva>='A' && bukva<='Z')
		cout << "nVnesovte golema bukva." << endl;
	else if (bukva>='a' && bukva<='z')
		cout << "nVnesovte mala bukva." << endl;
	else
		cout << "nVnesovte nevaliden znak." << endl;
	return 0;
}
Мислам дека е доволно просто и едноставно да не треба коментар и објаснување.:)
Друже не ми е јасен овој дел :

if(bukva>='A' && bukva<='Z')

од каде доаѓа тоа 'A' и 'Z',а исто и подоле ?
 

maximilian

Gaining Experience
26 март 2008
1,064
74
@Stane:

Тоа што го прави Александар е всушност споредување на интервалите на ASCII кодовите, што го објаснив малку погоре. Разликата е што, начинот кој го напиша александар е попрост од мојот :).
Значи, во
Код:
if(bukva>='A' && bukva<='Z')
проверува дали внесениот знак е во интервалот A...Z, зашто тие си се последователни знаци според ASCII таблицата. Истото се однесува и на долните редови :)
 

Stane

Gaining Experience
4 октомври 2007
2,497
77
Аха,не го прочитав твојот пост,фала за објаснувањето :)
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Секој карактер има свој ASCII код. Кога споредуваш два карактери, всушност ги споредуваш нивните ASCII кодови.



Бидејќи 'A' и 'Z' имаат гранични ASCII вредности за голема буква и 'a' и 'z' гранични вредности за мали букви, со проверување дали карактерот има вредност во тој интервал може да се дознае дали тој е голема или мала буква.
 

fuUuUzZzZy

On your way to fame
14 декември 2007
4,842
885
Ohrid
Логика стане :)

A - Првата буква во англиската азбука
Z - Последната буква во англиската азбука

Се мисли на тоа, ако буквата е еднаква на голема A, или поголема ( читај: после A ( b,c,d...) ), и еднаква на последната буква t.e Z или помала ( враќај се наназад, т.е се` пред Z)

Се мисли на тој интервал.

EDIT: Каснам минута :lut2:
 

Stane

Gaining Experience
4 октомври 2007
2,497
77
Сега ми стана јасно,бтњ мислев дека е како што викате ама не бев сигурен :D
 

gdamjan

On your way to fame
3 април 2008
2,379
681
Скопје
damjan.softver.org.mk
gdamjan's setup  
Processor & Cooler
AMD Ryzen 5 3600 / Wraith Stealth
Motherboard
MSI Mortar Wifi B550m
Storage
nvme 1TB / adata xpg sx8200
PSU
Gigabyte G750H
RAM
G. SKILL Ripjaws V Series 2x 16GB / DDR4 3200Mhz
Video card
Asus RX550 2G
Case
Bequiet! PureBase 500
Keyboard
ThinkPad USB Keyboard With TrackPoint (sk-8855)
OS
Arch Linux
а кирилица?

:)
 

reng

Intern
13 август 2007
683
19
Хаха ги збуни сега, па исто е само што треба во мк да ги пишеш еве во VB.

Public Class Form1
Dim bukva As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
bukva = TextBox1.Text
If bukva <> "" Then
If bukva >= "А" And bukva <= "Ш" Then
MsgBox("Golema bukva", vbOKOnly)
ElseIf bukva >= "а" And bukva <= "ш" Then
MsgBox("Mala bukva", vbOKOnly)
Else
MsgBox("Vnesenoto ne e bukva", vbOKOnly)
End If
Else
MsgBox("Ne vnese bukva", vbOKOnly)
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox("Vnesi bukva", vbOKOnly)
End Sub
End Class

Полесно ми беше во VB знам дека е за C темата.
 

vasildb

Intern
17 април 2007
209
6
Хаха ги збуни сега, па исто е само што треба во мк да ги пишеш еве во VB.

Public Class Form1
Dim bukva As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
bukva = TextBox1.Text
If bukva <> "" Then
If bukva >= "А" And bukva <= "Ш" Then
MsgBox("Golema bukva", vbOKOnly)
ElseIf bukva >= "а" And bukva <= "ш" Then
MsgBox("Mala bukva", vbOKOnly)
Else
MsgBox("Vnesenoto ne e bukva", vbOKOnly)
End If
Else
MsgBox("Ne vnese bukva", vbOKOnly)
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox("Vnesi bukva", vbOKOnly)
End Sub
End Class

Полесно ми беше во VB знам дека е за C темата.
Мислам дека не е исто, има некои карактеристични букви кои забегуваат малце со ASCII кодовите, 5-6 букви се. Во два интервали се поделени кириличните букви.
 

gdamjan

On your way to fame
3 април 2008
2,379
681
Скопје
damjan.softver.org.mk
gdamjan's setup  
Processor & Cooler
AMD Ryzen 5 3600 / Wraith Stealth
Motherboard
MSI Mortar Wifi B550m
Storage
nvme 1TB / adata xpg sx8200
PSU
Gigabyte G750H
RAM
G. SKILL Ripjaws V Series 2x 16GB / DDR4 3200Mhz
Video card
Asus RX550 2G
Case
Bequiet! PureBase 500
Keyboard
ThinkPad USB Keyboard With TrackPoint (sk-8855)
OS
Arch Linux
е ај тестирај :)

а и .. како ќе се снајде со UTF-8?
(ја немам VB)
 

maximilian

Gaining Experience
26 март 2008
1,064
74
Не сум правел споредби со кирица, така да не знам, но, нели би одело со ASCII-2 стандард или со Unicode стандард?
 

gdamjan

On your way to fame
3 април 2008
2,379
681
Скопје
damjan.softver.org.mk
gdamjan's setup  
Processor & Cooler
AMD Ryzen 5 3600 / Wraith Stealth
Motherboard
MSI Mortar Wifi B550m
Storage
nvme 1TB / adata xpg sx8200
PSU
Gigabyte G750H
RAM
G. SKILL Ripjaws V Series 2x 16GB / DDR4 3200Mhz
Video card
Asus RX550 2G
Case
Bequiet! PureBase 500
Keyboard
ThinkPad USB Keyboard With TrackPoint (sk-8855)
OS
Arch Linux
Што е па ascii-2??

Единствен стандард кој треба да се следи (барем во 21 век) е Unicode и неговиоте UTF-8 encoding.
 

maximilian

Gaining Experience
26 март 2008
1,064
74


ASCII 2 е таблицата ASCII само со некои измени (а тоа се кириличните букви). Таа има 8 реда и 16 колони, исто и како ASCII, нумерирани соодветно во интервалите [0,7] и [0,15].

Еден ASCII код на симбол, на пример, на буквата А-65, представен во бинарен број е 1000001, а сепак знаеме дека еден знак завзема 1B=8 bit, а тука се употребени 7 бита. Затоа можеме лесно да ставиме една 0 пред изразот, и 1000001 ќе биде 01000001, којшто израз завзема точно 1В.

Што всушност представува овој број?
Да го разделиме бројот 01000001 на 3 дела:
Прв дел: 0
Втор дел: 100
Трет дел: 0001.
Бинарниот број 100=4 во декадниот броен систем.
Бинарниот број 0001=1 во декадниот броен систем.
Односно, кодот 65 (1000001 бинарно) всушност значи дека знакот А се наоќа во 4-тата колона и 1-виот ред од ASCII таблицата.

Така се представуваат сите симболи во ASCII.

Но, што е таа нула на почетокот?
Секој ASCII код започнува со 0, зашто најголемиот број од интервалот [1,7] за редовите е 7=111 бинарно, што значи дека му требаат само 3 бита за да се представи редот каде што се наоѓа, а пак најголемиот број во интервалот [1,15] кој е за колоните е 15=1111 бинарно, што значи дека за секој знак во ASCII се потребни точно 7 бита. Едниот слободен бит означува дали таблицата е ASCII или ASCII 2. За ASCII таблицата, секој знак започнува задолжително со 0, а во ASCII 2, секој знак започнува со 1. Има повеќе ASCII 2 таблици, кои се користат за користење на посебни карактери. Употребата на ASCII 2 за кирилица е една од нив.

Еве и слика за представувањето на ASCII симболите во бинарни кодови:


Забележете, сите започнуваат со 0, зашто е ASCII, a не ASCII 2

...and that's ASCII 2 :)
 

eldiablo

Баниран/a
21 октомври 2008
820
48
А ако забележите во првиот пост, алгоритмот е пишуван, така што кодот да се напише со помош на контролната структура switch. Баш ме интересира дали може задачкава да се изреализира преку switch.
 

Stane

Gaining Experience
4 октомври 2007
2,497
77
Пробував секако,и изгледа не може :O А што му фали на овој начин ?
 

eldiablo

Баниран/a
21 октомври 2008
820
48
Супер си е начинот, само онака ме заинтригира малку ова, бидејќи и јас пробував со switch и не успеав.
 

gdamjan

On your way to fame
3 април 2008
2,379
681
Скопје
damjan.softver.org.mk
gdamjan's setup  
Processor & Cooler
AMD Ryzen 5 3600 / Wraith Stealth
Motherboard
MSI Mortar Wifi B550m
Storage
nvme 1TB / adata xpg sx8200
PSU
Gigabyte G750H
RAM
G. SKILL Ripjaws V Series 2x 16GB / DDR4 3200Mhz
Video card
Asus RX550 2G
Case
Bequiet! PureBase 500
Keyboard
ThinkPad USB Keyboard With TrackPoint (sk-8855)
OS
Arch Linux
ниш не те сфатив што сакаш да кажеш за ASCII-2 .. али изгледа мислиш на оние windows-1251, iso-8859-1 и слични енкодинзи.
(they suck)

21 век сме, и користење на било што освен UTF-8 из-но-гуд.
 

dimitars

Gaining Experience
8 мај 2007
1,681
333
ниш не те сфатив што сакаш да кажеш за ASCII-2 .. али изгледа мислиш на оние windows-1251, iso-8859-1 и слични енкодинзи.
(they suck)

21 век сме, и користење на било што освен UTF-8 из-но-гуд.
utf-8 e користен, да не речам задолжителен за веб апликации, а ASCII нема врска со тоа.
 

CpuMan

Intern
23 ноември 2008
37
0
@eldiablo сеа баш и јас пробав со switch еве го кодот
Код:
#include <iostream>

using namespace std;

int main()
{
	char bukva;
	cout<<"Vnesete golema ili mala bukva"<<endl;
	cin>>bukva;
	switch (bukva)
	{
		case 'A..Z':cout<<"Vnesovte golema bukva"<<endl;
			break;
		case 'a..z':cout<<"Vnesovte mala bukva"<<endl;
			break;
		default:cout<<"abe vnesi bukva ne se zaebavi"<<endl;
	}
}
ама кој знак и да го внесам секогаш ми дава резултат тоа што е на default како да не внесувам буква. Може ли некој да ја реши точно? :)
 

Нови мислења

Последни Теми

Статистика

Теми
42,542
Мислења
820,225
Членови
28,210
Најнов член
iledimovski
На врв Дно