Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > запись в массив


Автор: godvinn 19.11.2008, 15:25
есть маленькая программа для вывода гистрограммы

Код

#include <stdio.h>
#define SIZE 5
int main()
{
    int n[SIZE] = {5,8,8,9,1};
    int i, j;
    for(i = 0; i <= SIZE - 1; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
            printf("%c", '*');
        }
        printf("\n");
    }
    return 0;
}

как можно организовать запись массива с клавиатуры то есть чтобы пользователь ввел допустимое количество допустип 5 (вместо SIZE) и потом заполнил эти пять элементов в массиве*? smile 

Автор: REZiaMIX 19.11.2008, 15:33
Цитата(godvinn @ 19.11.2008,  15:25)
есть маленькая программа для вывода гистрограммы

Код

#include <stdio.h>
#define SIZE 5
int main()
{
    int n[SIZE] = {5,8,8,9,1};
    int i, j;
    for(i = 0; i <= SIZE - 1; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
            printf("%c", '*');
        }
        printf("\n");
    }
    return 0;
}

как можно организовать запись массива с клавиатуры то есть чтобы пользователь ввел допустимое количество допустип 5 (вместо SIZE) и потом заполнил эти пять элементов в массиве*? smile

Код

#include <stdio.h>
int main()
{
    int count =0;
    int *n = new int[count]
    int i, j;
    for(i = 0; i <= count - 1; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
            printf("%c", '*');
        }
        printf("\n");
    } 
    delete [] count; 
    return 0;
}

примерно так , тут надо изменить , чтобы в count было нужное число

Автор: DareDevil225 19.11.2008, 15:38
Код

#include <stdio.h>
int main()
{
    int nCount = 0;
    printf("Введите количество колонок: ");
    scanf("%d\n",&nCount);
    if( nCount <=0 )
       return 0;
    int n[nCount];
    for(int nIndex = 0; nIndex < nCount; nIndex++)
    {
         printf("Значение %d :", nIndex);
         scanf("%d\n", &value);
         n[nIndex] = value;
    }
    int i, j;
    for(i = 0; i < nCount; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
            printf("%c", '*');
        }
        printf("\n");
    }
    return 0;

}


Автор: warmonger_ 19.11.2008, 15:41
Код

#include <iostream>



int main(int argc, char **argv)
{
    int size;
    std::cout<<"enter size: ";
    std::cin>>size;
    int *n=new int[size];
    std::cout<<"enter mas: ";
    for (int i=0; i<size; ++i)
        std::cin>>n[i];
    for(int i = 0; i < size; ++i)
    {
        for(int j= 0; j < n[i]; ++j)
        {
            std::cout<<"*";
        }
        std::cout<<"\n";
    }
    return 0;
}

Автор: REZiaMIX 19.11.2008, 15:42
Еще)
Код

#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    unsigned int count =0;
    cout << "Count:\n";
    cin >> count;
    if(count<1)
        return 0;
    int *n = new int[count];
    for (unsigned int a = 0; a<count;++a)
    {
        cout << "Enter #"<<a<<"\n";
        cin >> n[a];
    }
    int i, j;
    for(i = 0; i <= count; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
           cout << "*";
        }
        cout << "\n";
    } 
    delete [] n; 
    return 0;
}


Добавлено через 4 минуты и 3 секунды
warmonger_
Не будет работать!
DareDevil225
А удалить n?))

Автор: warmonger_ 19.11.2008, 15:48
Цитата(REZiaMIX @  19.11.2008,  14:42 Найти цитируемый пост)

Не будет работать!

почему? проверил - работает...

Автор: REZiaMIX 19.11.2008, 15:51
Цитата(warmonger_ @ 19.11.2008,  15:48)
Цитата(REZiaMIX @  19.11.2008,  14:42 Найти цитируемый пост)

Не будет работать!

почему? проверил - работает...

Компилятор? Размер массива должен быть константным.

Проверил , действительно не работает:
error C2057: expected constant expression

Автор: DareDevil225 19.11.2008, 15:54
Цитата(REZiaMIX @ 19.11.2008,  15:42)
DareDevil225
А удалить n?))

Простите, что удалить????? smile 
n создается на стеке - ничего удалять не нужно, это не динамический массив

Добавлено @ 15:56
REZiaMIX, а вот в вашем первом примере n действительно надо удалить, а не count
Цитата

Код

#include <stdio.h>
int main()
{
    int count =0;
    int *n = new int[count]
    int i, j;
    for(i = 0; i <= count - 1; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
            printf("%c", '*');
        }
        printf("\n");
    } 
    delete [] count; 
    return 0;

}


Автор: REZiaMIX 19.11.2008, 16:03
Тьфу , перепутал вас!
Код

warmonger_
Не будет работать!
DareDevil225
А удалить n?))

>>>
warmonger_
А удалить n?))
DareDevil225
Не будет работать, т.к. размер массива должен быть конст.

Автор: warmonger_ 19.11.2008, 16:05
Цитата(REZiaMIX @  19.11.2008,  15:03 Найти цитируемый пост)
Тьфу , перепутал вас!

не надо путать. а то я уже думал, что глючит мя....

да, забыл удалить.

Автор: DareDevil225 19.11.2008, 16:22
Цитата(REZiaMIX @ 19.11.2008,  16:03)
DareDevil225
Не будет работать, т.к. размер массива должен быть конст.

А вот здесь вы правы, еще раз посмотрел что написал, ошибся при написании
Код

#include <stdio.h>
int main()
{
    int nCount = 0;
    printf("Введите количество колонок: ");
    scanf("%d\n",&nCount);
    if( nCount <=0 )
       return 0;
    int *n = new int[nCount];
    int value = 0;
    for(int nIndex = 0; nIndex < nCount; nIndex++)
    {
         printf("Значение %d :", nIndex);
         scanf("%d\n", &value);
         n[nIndex] = value;
    }
    int i, j;
    for(i = 0; i < nCount; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
            printf("%c", '*');
        }
        printf("\n");
    }
    delete []n;
    return 0;
}

Автор: REZiaMIX 19.11.2008, 16:30
warmonger_
DareDevil225

Извиняюсь за сбитие с толку.

Автор: godvinn 20.11.2008, 10:17
Код

#include <stdio.h>
#include <iostream>

void arrayPaint(int [], int); //прототип функции
using namespace std; 

int main()
{
    int count = 0;
    cout << "Count line:\n";
    cin >> count;
    if (count < 1)
    {
        cout << "Wanted:: Not correctly entered data \n";
        return 0;
    }
    else {
        int *n = new int[count];
        for (unsigned int a = 1; a < count; ++a)
        {
            cout << "Enter #::  "<< a << "\n";
            cin >> n[a];
        }
        arrayPaint(n, count);
        delete [] n; 
    }
    return 0;
}

void arrayPaint(int n[], int count) 
{
    unsigned int i, j;
    for(i = 1; i <= count - 1; ++i)
    {
        for(j= 0; j < n[i]; ++j)
        {
           cout << "*";
        }
        cout << "\n";
    } 
}


работоет но если ввести чило типа 1111111
получается зацикливание ? почему?

Автор: inside_pointer 20.11.2008, 11:39
то же на сишнике
Код


#include <stdio.h>
#include <stdlib.h>

/* распечатывает гистограмму */
int main()
{
    long i, j, size = 0;
    int *ip;
    
    printf("Enter the size: ");
    scanf("%ld", &size);
    if (size == 0 || (ip = malloc(size*sizeof(int))) == NULL)
        return 1;
    printf("Enter nums: ");
    for (i = 0; i < size; i++)
        scanf("%d", ip+i);
    
    for(i = 0; i < size; i++) {
        j = ip[i];
        while (j--)
            printf("%c", '*');
        putchar('\n');
    }
    free(ip);
    return 0;
}


если ввести 1111111 она не зацикливается а распечатывает столько звёздочек

Код

[guest@localhost tmp]$ ./t
Enter the size: 3
Enter nums: 1111111 4 2


будет распечатывать 1111111 звёздочек
потом распечатает 4 потом 2, ну долго конечно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)