Форум программистов, компьютерный форум CyberForum.ru

Массив - C++

Восстановить пароль Регистрация
 
ol4ik
 Аватар для ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
06.11.2010, 19:15     Массив #1
Выдать в виде таблицы индексы элементов массива: в первом столбце таблицы - индексы отрицательных элементов, во втором - индексы нулевых элементов, в третьем - индексы положительных элементов.

Таблицу оформить додумалась только так. Но проблема в том, что в ней выдаются вместо индексов нули.((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
 
int Vvod_Elem(int *d,int n)
{  int i;
   cout<<"vvedite massiv\n";
   for (i=0; i<n; i++)
    {
      cout<<"d["<<i<<"]="; 
      cin>>d[i];
    }
   return *d;
 
}
int main()
{   int n,i;
    int *d;
    cout<<"size n= ";
    cin>>n;
    d=new int[n];      
    Vvod_Elem(d,n);
   printf("|-----|-----|-----|\n");
   printf("|  <0 | =0  |  >0 |\n");
   printf("|-----|-----|-----|\n");
   for (i=0;i<n;i++)
   { 
     if (d[i]<0)
    {printf("|%5.0f|",i); printf("  -  |  -  |\n");
     printf("|-----|-----|-----|\n");}
     else
     if (d[i]=0)
     { printf("|  -  "); printf("|%5.0f|",i);  printf("  -  |\n");
     printf("|-----|-----|-----|\n");}
     else 
    {printf("|  -  |  -  "); printf("|%5.0f|\n",i); 
     printf("|-----|-----|-----|\n");}  
 
}
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2010, 19:15     Массив
Посмотрите здесь:

Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству C++
C++ Найти ошибку. Записать 20 целых чисел в массив. Переписать отрицательные в массив А, а положительные в Б
Файлы и массив (сделать так, чтобы массив заполнялся значениями из этого же файла) C++
C++ Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив)
C++ Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
06.11.2010, 19:57     Массив #2
Проблема вот в чём:
C
1
2
3
if (d[i]=0) //должно быть if (d[i]==0), потому что у тебя уже идёт не совсем условие, а присваивание
...
printf("|%5.0f|",i); // ты выводишь целое число, но представляешь его как с плавающей точкой. Нужно printf("|%5.0i|",i);
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
06.11.2010, 20:00     Массив #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
////////////////////////////////////////////////////////////////////////////////////////
#include <cstdlib>
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////
int Vvod_Elem(int *d,int n)
{  int i;
   cout<<"vvedite massiv\n";
   for (i=0; i<n; i++)
    {
          cout<<"d["<<i<<"]=";
          cin>>d[i];
    }
   return *d;
 
}
////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    int n,i;
    int *d;
    cout << "size n= ";
    cin >> n;
    d = new int[n];
    Vvod_Elem(d, n);
    cout << "|-----|-----|-----|\n";
    cout << "|  <0 | =0  |  >0 |\n";
    cout << "|-----|-----|-----|\n";
////////////////////////////////////////////////////////////////////////////////////////
    for (i = 0; i < n; i++)
    {
        if(d[i] < 0)
        {
            cout << "|  " << i << "  |  -  |  -  |" << std::endl;
            cout << "|-----|-----|-----|" << std::endl;
        }
        else if(d[i] == 0)
        {
            cout << "|  -  |  " << i << "  |  -  |" << std::endl;
            cout << "|-----|-----|-----|" << std::endl;
        }
        else if(d[i] > 0)
        {
            cout << "|  -  |  -  |  " << i << "  |" << std::endl;
            cout << "|-----|-----|-----|" << std::endl;
        }
    }
    std::system("pause >> void");
}
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
06.11.2010, 21:44     Массив #4
Вот еще немного переработанный код, который сформирует таблицу, в которой индексы элементов будут расположены стандартно, а не 1 на рядок =)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <conio.h>
#include <iostream>
 
using namespace std;
 
int Vvod_Elem(int *d, int n)
{  
    int i;
    cout<<"vvedite massiv\n";
    for (i=0; i<n; i++)
    {
        cout<<"d["<<i<<"]="; 
        cin>>d[i];
    }
    return *d; 
}
 
int main()
{       
    int n, i, i1=0, i2=0, i3=0;
    int *d;
    
    cout<<"size n= ";
    cin>>n;
    d=new int[n];      
    Vvod_Elem(d,n);
    printf("|----|----|----|\n");
    printf("| <0 | =0 | >0 |\n");
    printf("|----|----|----|\n");
    
// Формируем таблицу, в которой все столбцы в рядке будут заполнены
// (если существует элемент массива с заданными свойствами)
 
    while ((i1<n)||(i2<n)||(i3<n)) // Общий цикл - проверка всех элементов за 3мя свойствами
    {
        while (i1<n) // Свойство 1: элемент меньше нуля
        {
            if (d[i1]<0) // Если истинна, то ...
            {
                printf("|%4.1i", i1); // Выводим его в таблицу
                i1++; // Подготавливаем индекс следуещего элемента, к которому мы перейдём, когда таблица перейдёт на новую строку
                break; // И выходим из цикла проверки свойства 1
            }
            else
                i1++; // Иначе переходим к следующему элементу
        };
        if ((i1>=n)&&(d[i1-1]>=0)) // Если проверили массив полностью на свойство 1, и при этом последний элемент не соответствует этому свойству (чтобы избежать дублирования вывода элемента и еще прочерка заодно), то выводим просто прочерк в таблице
            printf("| -- ");
    
        while (i2<n) // То же самое для свойтва 2...
        {
            if (d[i2]==0)
            {
                printf("|%4.1i|", i2);
                i2++;
                break;
            }
            else
                i2++;
        };
        if ((i2>=n)&&(d[i2-1]!=0))
            printf("| -- |");
 
        while (i3<n) // ... И свойства 3
        {
            if (d[i3]>0)
            {
                printf("%4.1i|\n", i3);
                i3++;
                break;
            }   
            else
                i3++;   
        };
        if ((i3>=n)&&(d[i3-1]<=0))
            printf(" -- |\n"); //Переходим на новую строку таблицы и продолжаем дальше поиск по одному элементу для каждого свойства
        
    };
    printf("|----|----|----|\n");
    getch();
    return 0;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
06.11.2010, 21:49     Массив #5
x1Mike7x, вы уже определитесь - С или С++,зачем смешивать то ?
ol4ik
 Аватар для ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
06.11.2010, 23:20  [ТС]     Массив #6
x1Mike7x, спасибо, конечно, что время потратили, но я лучше попробую со своим вариантом сдать, а то ваш мудрёный больно Препод сказал, что если не в одну строчку будет, и то ладно)
Yandex
Объявления
06.11.2010, 23:20     Массив
Ответ Создать тему
Опции темы

Текущее время: 13:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru