1 Востаннє редагувалося podolets98 (13.02.2016 15:48:56)

Тема: Масив Розбити підрахувати

Визначити в скільки разів кількість додатних елементів в першій половині масиву більша кількості від'ємних елементів в другій половині масиву.

program unit9;
uses crt;
const n=10;
var i,p1,p2:integer;
    p:array[1..n] of integer;
begin
clrscr;
writeln('Андрiй Подолець 34П');
writeln('___________________');
randomize;
for i:=1 to n do
    begin
         p[i]:=-10+Random(21);
         write(p[i],'   ');
    end;
    writeln;
    writeln;
    p1:=0;
    for i:=1 to n div 2 do
        if p[i]>0 then
           p1:=p1+1;
    p2:=0;
    for i:=n div 2+1 to n do
        if p[i]<0 then
           p2:=p2+1;
    writeln(p1,'/',p2,'=',p1/p2:5:5);
    readln;
end.

Допоможіть переробити, або допоможіть переробити цикли на с++, дякую)

2

Re: Масив Розбити підрахувати

Виправте ваше повідомлення відповідно до правил форуму, тоді допоможу.

Подякували: podolets981

3

Re: Масив Розбити підрахувати

Добре. У вас вже щось написано на С++? Якщо так, то показуйте.

Подякували: podolets981

4

Re: Масив Розбити підрахувати

Все що я маю оголошення бібліотеки в заповнення масиву, можете домомогти з циклами?

5

Re: Масив Розбити підрахувати

Паскалівський цикл

for i:=a to b do
    begin ... end;

в С/С++ виглядатимк так:

for(i=a; i<=b; i++)
    { ... }

Чи в чому там складність?

Подякували: leofun011

6

Re: Масив Розбити підрахувати

Складність в тому що там розділяється масив на 2 частини і підраховуються додатні і відємні числа, а ви просто написали звичайний цикл

7

Re: Масив Розбити підрахувати

Тобто, проблема не в циклі, а в індексах масивів. Сішні масиви завжди індексуються з 0, якщо оголосити масив:

int p[n];


то перший елемент матиме індекс 0, а останній — n-1. Таким чином, у переробленому коді можна використовувати ті ж значення змінних, що й у паскалі, але при доступі до елементів віднімати від індекса одиницю, паскалівське p[ i ] стане сішним p[ i-1 ] і т.д.

Подякували: leofun011

8

Re: Масив Розбити підрахувати

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
  int i,p1,p2;
  int p[10];
//=================================
clrscr();
//=================================
srand(time(NULL));
for (i=0; i<10; i++)
{
 p[i]=rand()%41-20;
}
cout<<"Masyv :";
for (i=0; i<10; i++)
{
    cout<<p[i]<<" ";
}
//=================================
for (i=0; i<10 modf(2); i++ )
{
  if (p[i]>0)
  {
  p1=p1+1;
  }
}
for (i=0; i<10; i++ fmod(2+1))
{
  if (p[i]<0)
  {
  p2=p2+1;
  }
}

cout<<endl;
cout<<" "<<p1<<" "<<p2;
getch();
return 0;
}

Допишіть в цю програму свій варіант, все має бути як у моєму першому повідомлені (прочитайте текст)

9 Востаннє редагувалося P.Y. (13.02.2016 16:53:37)

Re: Масив Розбити підрахувати

Що там робить modf і як це взагалі компілюється? Для операцій з цілими числами достатньо операторів / та % (працюють як паскалівські div та mod відповідно).

Просто візьміть свій код із першого повідомлення й послідовно перепишіть на сі, враховуючи вказані вище зауваження.

Подякували: leofun011

10

Re: Масив Розбити підрахувати

int i,p1,p2; 

Краще ініціалізуйте ці змінні нулями, бо за вас це ніхто не зробить, а там може бути щось відмінне від нуля.

for (i=0; i<10 modf(2); i++ )

Все простіше. for(i=0; i<5; i++) - проходить першу половину масиву. Як пройти другу половину, думаю, здогадаєтесь.

Подякували: podolets98, leofun012

11

Re: Масив Розбити підрахувати

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
  int i,p1,p2;
  int p[10];
//=================================
clrscr();
//=================================
srand(time(NULL));
for (i=0; i<10; i++)
{
 p[i]=rand()%41-20;
}
cout<<"Masyv :";
for (i=0; i<10; i++)
{
    cout<<p[i]<<" ";
}
//=================================
for (i=0; i<5; i++ )
{
  if (p[i]>0)
  {
  p1=p1+1;
  }
}
for (i=0; i>5; i++)
{
  if (p[i]<0)
  {
  p2=p2+1;
  }
}

cout<<endl;
cout<<" "<<p1<<" "<<p2;
getch();
return 0;
}

Я так розумію, пропонуєте записати так) але в мене не вірний підрахунок получається(((

12

Re: Масив Розбити підрахувати

Оце i<5 — це не напрямок, в якому береться п’ять елементів, як, мені здається, ви подумали.

Запис циклу for(i = 0; i < 5; i++) можна розшифрувати так. На початку циклу покладемо i рівним нулю (i=0). Якщо i менше 5 (i < 5), то виконати тіло циклу, інакше виконувати те, що записано після циклу. В кінці циклу збільшити i на один (i++).

Подякували: podolets981

13

Re: Масив Розбити підрахувати

Можете дописати програму? бо я не розумію про що йдеться)

14

Re: Масив Розбити підрахувати

В 30 рядку
for(i=5; i<10; i++)

Подякували: podolets981

15 Востаннє редагувалося podolets98 (13.02.2016 19:40:15)

Re: Масив Розбити підрахувати

Результат отакий)

Post's attachments

Безымянный.png 10.04 kb, 218 downloads since 2016-02-13 

16

Re: Масив Розбити підрахувати

Я ж писав вам про те, що змінні треба ініціалізувати

Подякували: podolets981

17

Re: Масив Розбити підрахувати

Пане podolets98, ось вам кілька правил, які значно спростять вам життя на форумах з програмування:
- ніколи не питайте на форумі словами "не працює", "працює не так", "лається на помилки". Замість того описуйте, що конкретно відбувається: якщо отримали повідомлення про помилку - відтворюйте його повністю, якщо програма виводить не те, що ви очікували - пишіть і те, що виводить, і те, що очікували.
- адекватно "перекладати" з однієї мови програмування на іншу зазвичай не простіше, ніж писати з нуля. Особливо видатні особи іноді при цьому навіть завдання не пишуть, що робить завдання значно складнішим, ніж було на початку - бо треба спершу по коду, часто-густо кривому, відновити завдання, а потім написати це завдання з нуля іншою мовою. Не робіть так.
- робіть в коді відступи. 90% часу програміст не пише код, а читає його, тому будь-що, що полегшує читання і вимагає збільшення часу кодування менш ніж у 10 разів, є корисним. На кожному begin (чи {) збільшуйте відступ на 2(4) пробіли, на end (}) - зменшуйте. Способів розставлення відступів є кілька, почитайте про це в мережі, оберіть свій стиль і дотримуйтеся його. Це дуже спрощує життя - і вам, і тим, хто хоче вам допомогти.
- якщо у вас якийсь особливий (нестандартний, дуже старий, експерементальний) компілятор, вказуйте це. Ваш код явно розрахований на C++ до стандарту 1998 року, тобто компілятор старий. Один рядок "пишу на (назва компілятора) під (фреймворк, якщо використовується)" іноді дозволяє вирішити проблему за кілька хвилин - то чому б не витратити на нього 10 секунд.

І quez хотів сказати, що for(ініціалізація;умова;перехід){тіло;} в C/C++ еквівалентний

ініціалізація;
while(умова){
  тіло;
  перехід;
}

Потім p1=p1+1; записується як ++p1;

Останнє, що вам треба для рішення - це знати, що оператор / має 2 значення: для цілих аргументів він дає цілу відповідь (1/2 == 0), для дійсних - дійсну, що вам і потрібно: float(p1)/float(p2);

Подякували: podolets98, leofun012

18

Re: Масив Розбити підрахувати

Вдячний вам за допомогу, роблю практику, тому вже інколи навіть і прості помилки не замічаю, Дякую вам за допомогу)