Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - заполнение массива

Ответить
Настройки темы
C/C++ - заполнение массива

Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


Столкнулся с проблемой:
неком исходном файле содержатся данные в виде:

пн 23.3 55.8 32.5
вт 54.3 23.4
сб 45.7.78.1

или просто:
65.3 74.4 85.2
23.4 54.3
и т.д.

нужно заполнить массив double [7][]
в итоге массив содержит измерения погоды (строки - дни недели. столбцы - измерения)

Вопрос: как заполнить такой массив? Как узнать длину каждой строки массива?

Отправлено: 17:08, 14-11-2009

 

Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


я додумался, как определить кол-во элементов в строке. Столкнулся с такой проблемой:
при объявлении массива weather[NR][NC] компилятор сообщает об ошибке, т.к. не может разместить в памяти массив с нулевой размерностью.

вот код, подскажите пожалуйста, если это возможно, как мне все таки создать массив, а только после какого-то момента задать ему размерность

Код: Выделить весь код
#include <iostream>
#include <fstream>
#include "rus8.h"
#include "conio.h"
using namespace std;

int main() {

rus();
#define NR 7
#define NC *c
	
	char str[100], ch;
	int i=0,n=0, r, c;
	float weather[NR][NC];

	ifstream in("weather");
	if(!in)
	{
		cout << "Не удалось открыть файл";
		getch();
		return 1;
	}

	in.get(str, 99);
	cout << str <<'\n';
	in.close();

	for(n=0;str[n];n++)
	{
		if(str[n] == ' ')
		{
			i++;
			cout << "Найден пробельный символ\n";
		}
		cout << "Символ не является пробелом \n";
	}

	c=i+1;

	cout << "\n Всего символов " << n << " Из них пробельных " << i;

	cout << "\n для завершения нажминие Ввод";
	getch();

	return 0;
}
вот такие ошибки MVS выдает на
Код: Выделить весь код
float weather[NR][NC];
main.cpp(15) : error C2100: недопустимое косвенное обращение
main.cpp(15) : error C2057: требуется константное выражение
main.cpp(15) : error C2466: невозможно выделить память для массива постоянного нулевого размера
main.cpp(15) : error C2087: weather: отсутствует индекс

Последний раз редактировалось Lisiy_egik, 15-11-2009 в 23:31. Причина: опечатка


Отправлено: 23:24, 15-11-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 514
Благодарности: 18

Профиль | Отправить PM | Цитировать


я думаю на #define NC *c ругается, константа не должна меняться, это же не перменная.

Отправлено: 09:59, 16-11-2009 | #12


Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


все то. что я делал не верно, нужно было через структуру делать, потом читать не символы, а то. что мне точно известно - это значения типа дабл, в общем пойду читать книжки умные и форумы рыть ((

Отправлено: 16:37, 16-11-2009 | #13


Ветеран


Сообщения: 514
Благодарности: 18

Профиль | Отправить PM | Цитировать


Если будет время сделаю заполнение массива по вашему случаю... Структура нужна для удобства, но в ней то всеравно надо алгоритм реализовывать...

Отправлено: 11:45, 17-11-2009 | #14


Ветеран


Сообщения: 514
Благодарности: 18

Профиль | Отправить PM | Цитировать


Сделал, пользуйте...
Код: Выделить весь код
//---------------------------------------------------------------------------

#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <vcl.h>
#pragma hdrstop
#pragma argsused

int main(int argc, char* argv[])
{
char sim[63];  // максимально возможная длина числа
int a, b, eatt=0, numa=0,numb=0,
numstr[1000]; // количество чисел в каждой строке
double number[1000][100]; // массив всех чисел, построчно

   FILE*fp1;

if ((fp1=fopen("1397000.txt", "r"))==NULL)  // считывание чисел из файла 1397000.txt
{
 printf ("not file");
 return 0;
}

do {                 //*******
fscanf(fp1, "%c", &sim[eatt]);

do                   //*
if    ( sim[eatt]=='0' || sim[eatt]=='1' || sim[eatt]=='2' || sim[eatt]=='3' ||
        sim[eatt]=='4' || sim[eatt]=='5' || sim[eatt]=='6' || sim[eatt]=='7' ||
        sim[eatt]=='8' || sim[eatt]=='9' || sim[eatt]=='.' || sim[eatt]=='-')
    {eatt++; fscanf(fp1, "%c", &sim[eatt]); } else break;
 while (true);      //*

if (sim[eatt]==' ') {number[numa][numb]=atof(sim); numstr[numa]=numb; numb++; eatt=0;}
if (sim[eatt]=='\n') {number[numa][numb]=atof(sim); numstr[numa]=numb; numb++; eatt=0; numa++; numb=0;}

}                    //*******
while (!feof(fp1));  //*******


  fclose(fp1);

         // ввод всех преобразованных чисел (в double) в файл   1397001.txt
FILE*fp;
fp=fopen("1397001.txt", "w");

for (a=0; a<=numa-1; a++)
{
for (b=0; b<=numstr[a]; b++)
 fprintf (fp,"%f ",number[a][b]);
   fprintf (fp,"\n");
  }

fclose(fp);

        return 0;
}
//---------------------------------------------------------------------------
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:52, 19-11-2009 | #15

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Не совсем по теме конечно, вот как ещё можно сделать. здесь не хранится в виде *double[7]
Код: Выделить весь код
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <iterator>
#include <sstream>
#include <iomanip>
using namespace std;

int main(int argc, char* argv[])
{
    string str1;
    map<string,vector<double> > weather_by_wday;

    while(getline(cin, str1)) // перебираем строчки
    {
        istringstream line_stm(str1);

        if ((line_stm >> str1)) // день недели
        {
            typedef istream_iterator<double,char> istream_iter;
            // копируем в него данные из потока
            copy(istream_iter(line_stm), istream_iter(), back_inserter(weather_by_wday[str1]));
        }
    }

    // теперь всё упорядочено по дням недели
    // weather_by_wday["день недели"] - это вектор данных
    // можно пользоваться им так: weather_by_wday["ВТ"][3] - это будет 3-й вторник
    // допустим надо вывести на экран

    typedef map<string,vector<double> >::iterator map_iter_t;
    unsigned max_data_size = 0;

    // т.к. длины векторов могут быть разные, найдём самый длинный

    string order[7] = {"mon", "tue", "wed", "thr", "fri", "sat", "sun"};

    for(unsigned wday=0; wday<7; ++wday)
    {
        cout << setw(10) << order[wday];
        unsigned size1 = weather_by_wday[order[wday]].size();
        if (max_data_size<size1) max_data_size=size1;
    }

    for(unsigned n=0; n<max_data_size; ++n)
    {
        cout << "\n";
        
        for(unsigned wday=0; wday<7; ++wday)
        {
            cout << setw(10);
            vector<double> &weather(weather_by_wday[order[wday]]);
            if (n<weather.size()) cout << weather[n];
            else cout << "?";
        }
    }

    return 0;
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:40, 19-11-2009 | #16


Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


Ferum01, pva, спасибо большое, это действительно очень помогло

Отправлено: 12:52, 20-11-2009 | #17


Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


Цитата Ferum01:
#include <vcl.h> »
за что отвечает этот модуль? где его можно взять и как его добавить в библиотеку MVS2008?

Отправлено: 13:46, 20-11-2009 | #18


Ветеран


Сообщения: 514
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Lisiy_egik:
за что отвечает этот модуль? где его можно взять и как его добавить в библиотеку MVS2008? »
vcl.h - библиотека визуальных компонентов, она изначально стоит при создании программ в компиляторе Borland 5.
Вероятно эту библиотеку можно не использовать.

Отправлено: 14:58, 20-11-2009 | #19



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - заполнение массива

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Заполнение FORM в IE HORRIBLE AutoIt 5 10-09-2009 23:46
Интерфейс - [решено] Не показывается заполнение HDD JJKey Microsoft Windows Vista 2 20-06-2009 21:04
Ошибка - Быстрое заполнение диска С: baltiec Microsoft Windows 2000/XP 1 17-01-2009 13:04
Заполнение базы из браузера Qwe1 Вебмастеру 6 19-02-2008 18:49
Delphi - Заполнение БД в Delphi. SOS!!! Voprosik Программирование и базы данных 4 13-11-2005 21:26




 
Переход