#4 p3can
lol, errorlevel ...
Příspěvky odeslané z IP adresy 213.226.195.–
Ahoj, mohl by mi někdo prosím poradit co mám špatně v tomto C++ kodu? Jde o tu metodu bool search(int), která by měla vzít uživatelem zadané číslo a zjistit zdali strom obsahuje takovýto uzel. Podle toho by měla vracet buď TRUE nebo FALSE. Bohužel při spuštění programu se nic nevrací (program se spustí, žádne chyby se neobjeví, po zadání čísla jakoby ta metoda proběhne až po ten brake ale nevrátí to ani TRUE ani FALSE). Děkuji za pomoc.
#include <process.h>
#include <conio.h>
#include <iostream>
#include <cstdlib>
using namespace std;
class BinarySearchTree
{
private:
struct tree_node
{
tree_node* left;
tree_node* right;
int data;
};
tree_node* root;
public:
BinarySearchTree()
{
root = NULL;
}
void insert(int);
bool isEmpty() const { return root==NULL; }
bool search(int);
};
//----------------------------------------------------------
void BinarySearchTree::insert(int d)
{
tree_node* t = new tree_node;
tree_node* parent;
t->data = d;
t->left = NULL;
t->right = NULL;
parent = NULL;
// is this a new tree?
if(isEmpty()) root = t;
else
{
//Note: ALL insertions are as leaf nodes
tree_node* curr;
curr = root;
// Find the Node's parent
while(curr)
{
parent = curr;
if(t->data > curr->data) curr = curr->right;
else curr = curr->left;
}
if(t->data < parent->data)
parent->left = t;
else
parent->right = t;
}
}
bool BinarySearchTree::search(int d) {
tree_node* temp = root;
while (temp != NULL) {
if (temp->data == d) {
return true;
}
else {
if (d > temp->data) {
temp = temp->right;
}
else {
temp = temp->left;
}
}
}
return false;
}
//----------------------------------------------------------
int main()
{
BinarySearchTree b;
int ch,tmp,tmp1;
while(1)
{
cout<<endl<<endl;
cout<<" Binary Search Tree Operations "<<endl;
cout<<" ----------------------------- "<<endl;
cout<<" 1. Insertion/Creation "<<endl;
cout<<" 2. Does BST contain this number? "<<endl;
cout<<" 3. Exit "<<endl;
cout<<" Enter your choice : ";
cin>>ch;
switch(ch)
{
case 1 : cout<<" Enter Number to be inserted : ";
cin>>tmp;
b.insert(tmp);
break;
case 2 : cout<<" Enter number to be found : ";
cin>>tmp1;
b.search(tmp1);
break;
case 3 : system("pause");
return 0;
break;
}
}
}
Dobrý den.
Pracuju v Code Blocks. Mám napsaný program uložený jako program.c. Tento zdrojový kód je ale moc dlouhý a nepřehledný, rád bych ho rozdělil na 2 části - na program1.c a program2.c. Mohli byste mi prosím napsat co se
všechno musí udělat (odkaz z 1 zdrojáku na druhý,...) abych to mohl provést? Děkuju
Tak jsem to tam implementoval. Kod vypada takto (pro zjednodušení jsem tam dal jen operace + a -):
#include <stdio.h>
int main()
{
char oper;
double a, b;
printf("Napiš co chceš vypočítat\n");
scanf("%lf", &a);
getchar();
oper = getchar();
scanf("%lf", &b);
switch(oper)
{
case '+':
printf("a+b=%.2f",a+b);
break;
case '-':
printf("a-b=%.2f",a-b);
break;
default:
printf("Error! Špatně zadaný operátor.");
break;
}
return 0;
}
Takhle vypadá výstup - příklad:
Napiš co chceš vypočítat
4 + 1
num1+num2=5.00
Chtěl bych se vás ještě zeptat jak lze udělat aby v tom výstupu místo toho num1+num2=5.00 bylo 4+1=5.
To je asi všechno, co by mne k tomuto tématu ještě zajímalo. MOC díky
#3 Robo
Ahoj, děkuju za radu. Vytvářím to v .c, opravil jsem ten můj kód - teď vypadá takto
#include <stdio.h>
int main()
{
char oper;
double num1, num2;
printf("Napiš co chceš vypočítat\n");
scanf("%f%c%f", &num1, &oper, &num2);
switch(oper)
{
case '+':
printf("num1+num2=%.2f",num1+num2);
break;
case '-':
printf("num1-num2=%.2f",num1-num2);
break;
case '*':
printf("num1*num2=%.2f",num1*num2);
break;
case '/':
if(num2 != 0)
{
printf("num1/num2=%.2f",num1/num2);
break;
}
else
{
printf("Error! Dělíte nulou.");
break;
}
default:
printf("Error! Špatně zadaný operátor.");
break;
}
return 0;
}
Program se sice spustí ale neproběhne správně - konkrétně takto vypadá výstup:
Příklad výstupu:
Napiš co chceš vypočítat
4+1
num1+num2=0.00
Ahoj, potřeboval bych poradit s jedním programem. Možná se vám to bude zdát jednoduché ale pro mě to rozhodně jednoduché není.
Chci vytvořit program podobný kalkulačce. vstup je ve tvaru num1 operator num2 , kde num1 a num2 jsou čísla typu double, operator je jedním ze znaků +,-,*,/.
Toto je můj pokus o napsání toho kódu:
#include <stdio.h>
int main()
{
char operator;
double num1, num2;
printf("Napiš co chceš vypočítat\n");
scanf("%f%c%f", &num1, &operator, &num2);
switch(operator);
{
case '+':
printf("num1+num2=%.2f",num1+num2);
break;
case '-':
printf("num1-num2=%.2f",num1-num2);
break;
case '*':
printf("num1*num2=%.2f",num1*num2);
break;
case '/':
if(num2 != 0)
{
printf("num1/num2=%.2f",num1/num2);
break;
}
else
{
printf("Error! Dělíte nulou.");
break;
}
default:
printf("Error! Špatně zadaný operátor.");
break;
}
return 0;
}
Musím ovšem vyřešit tyto problémy, doufám, že s vaší pomocí to vyřeším:
1) Musím nějak upravit ten můj kód protože nefunguje (nelze ho spustit). Nevím proč to nefunguje. Poraďte prosím.
2) Musím vyřešit problém se zadáváním vstupu. Konkrétně mám na mysli, jak programu říct, že pokud uživatel zadá
2.456 * 5
tak se tím myslí 2.456*5
Tedy že by program měl ignorovat ty mezery. Vůbec nevím, jak na to.
3) Co napsat aby pokud by uživatel zadal takový to vstup
3
program napsal
Chybně zadaný vstup
Byl bych moc rád kdyby mi někdo napsal ty kousky kódu, které mi chybí nebo poradil, jak je napsat abych je mohl implementovat do mého kódu. Díky