PDA

View Full Version : Информатика - 9 клас



gegata15
05-25-2011, 07:32
Имам да напиша за домашно програма но си нямам и на идея как ще стане.
Вмомента сме на масиви, и предполагам че задачата ще я има в учебникп по информатика. Та ако може някой да ми помогне ще съм много благодарна.
Да се състави програма, която проверява дали X се съдържа в редицата !

благодаря предварително :)

Chacho
05-25-2011, 08:54
#include <iostream>
using namespace std;

int main()
{
int i, x, n;
int a[100];
bool ans=false;

cout<<"Vuvedete broq na elementite 'n'";
cout<<"\nn="; cin>>n;

//Vuvejdane na elementite na masiva

for (i=0;i<n;i++)
{
cout<<"\na["<<i<<"]=";
cin>>a[i];
}

cout<<"\nVuvedete element x";
cout<<"\nx="; cin>>x;

//Proverka dali x e sred elementite

for (i=0;i<n;i++)
{
if (a[i]==x)
{ans=true;}
}

if (ans==true)
{
cout<<"x e sred elementite";
}

else
{
cout<<"x ne e sred elementite";
}

//Kod, koito kara programata da se zatvori 4ak sled natiskane na enter

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();

return 0;

}





Това е кодът, не съм го компилирал, може да има някоя грешчица. Ето ти обяснение, как работи програмата.

1.Въвеждат се елементите на масива по следния начин:

-Дължината на масива е n. С помощта на променливата i "обхождаме" редицата. С други думи, в първият цикъл for се извършва частта "Въведете a[i]", като i първоначално е 0. Това означава, че пита за a[0] (първия елемент). След като се извърши това, i нараства с 1 и пак се извършва "Въведете a[i]". Това се повтаря докато е вярно i<n. В момента, в който i стане n (демек няма повече елементи, цикълът свършва).

2.Отново се обхожда масива, за да се провери дали х е сред елементите

-Отново ползваме цикъл for за i от 0 до n-1 (i<n е същото като i<=n-1). На всяка стъпка обаче, вместо да пита потребителят да въведе елемент a[i], той проверява дали текущият елемент a[i] е равен на х. Тъй като сме цикъл, това става за всеки елемент от масива а. Първоначално променливата аns e false (лъжа). Ако срещне обаче елемент, равен на х, тя става true (истина).

3.Накрая с помощта на един if - else проверяваме дали след циклите ans е true или false и изкарваме съобщение, дали е намерен такъв елемент.




Задачата има малък недостатък, който можеш да оправиш. С вторият цикъл for, тя може да намери още на 2-ра позиция в масива елемент, равен на х. След това прави излишни проверки до края на масива, нищо че програмата вече е срещнала такъв елемент. Ползвайки цикъл while, можеш да сложиш друго условие за край на цикъла (вместо за край i>=n).

milena1992
05-25-2011, 08:57
#include<iostream.h>
int main()
{ int n,a[12],x;
cout<<"Broi elementi na masiva: ";
cin>>n;
cout<<"Poredica chisla";
for(int i=0;i<n;i++)
cin>>a[i];
cout<<"x=";
cin>>x;
i=0;
while(a[i]!=x) i++;
if(a[i]==x) cout<<"Yes";
else cout<<"No";
return 0;
}

Chacho
05-25-2011, 09:32
Имаш грешка в while-a. Условието трябва да е (a[i]!=x) && (i<n), иначе въведе ли се масив, който няма елемент = х, цикълът става безкраен.

Също така трябва да оформиш тяло на while-а с {}

Foreverbg
05-25-2011, 10:12
Забелязах, че навсякъде пишеш
"std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();"
Можеш просто да напишеш system("pause"). Върши същата работа.

Chacho
05-25-2011, 10:25
Препоръчително е да се избягва system("pause"). Това, което пиша, е по-добрият вариант.

Reasons:

It's not portable. This works only on systems that have the PAUSE command at the system level, like DOS or Windows. But not Linux and most others...

It's a very expensive and resource heavy function call. It's like using a bulldozer to open your front door. It works, but the key is cleaner, easier, cheaper. What system() does is:

suspend your program

call the operating system

open an operating system shell (relaunches the O/S in a sub-process)

the O/S must now find the PAUSE command

allocate the memory to execute the command

execute the command and wait for a keystroke

deallocate the memory

exit the OS

resume your program

There are much cleaner ways included in the language itself that make all this unnessesary.

You must include a header you probably don't need: stdlib.h or cstdlib

Foreverbg
05-25-2011, 10:49
За такива прости програми, които се пишат в даскало изобщо не е проблем да се използва system("pause"). Иначе най-добрият вариант е да си пускаш програмата през конзолата.

gegata15
05-25-2011, 13:14
много ви благодаря (мечка)