Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] текстовый файл, сложение столбцов 
V
    Опции темы
Zaulyx
Дата 9.12.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



вот смысл моей идеи. поправьте плз код

Код

coloumn=i;
while(o!='=')
{
printf("vvedite nomer stolbca\n");
scanf("%d", &coloumn);
printf("vvedite operaciu");
gets(o);
switch(o)
{
case '+' :
for(j=0; j<=N; j++) 
result[a]+=matrix[coloumn][j];
break;
case '-' :
for(j=0; j<=N; j++)
result[a]-=matrix[coloumn][j];
break;
case'*' :
for(j=0; j<=N; j++)
result[a]*=matrix[coloumn][j];
break;
case'/' :
for(j=0; j<=N; j++)
result[a]/=matrix[coloumn][j];
break;
}

}



Это сообщение отредактировал(а) Zaulyx - 9.12.2008, 18:10
PM MAIL   Вверх
taiven
Дата 9.12.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



А ты кроме сложения другие операции сделал уже? Оно у тебя работает? Тебе осталось только выбор операции сделать?
PM   Вверх
Zaulyx
Дата 9.12.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



ну как правильность я пока не могу проверить - компилятор не пашет... можно сказать на бумажке это написал...
не знаю как насчет правильности но хотел чтобы это выглядело так:
пользователь вводит номер столбца
вводит операцию
дальше идет выбор из операций записывает этот столбец в result[a]
потом вводится другой столбец. в зависимости от операции к result[a] прибавляется/вычитается и тд.. этот столбец.
и так пока пользователь не введет '='
это как я себе представляю должно работать....но на деле может и не получится, по-этому прошу поправить если я в силу своей неопытности в програмировании отклонился от своей идеи smile 
PM MAIL   Вверх
taiven
Дата 9.12.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



Цитата

ну как правильность я пока не могу проверить - компилятор не пашет... можно сказать на бумажке это написал...

на бумажке это конечно круто  smile , но лучше скачай компиль себе какой-нибудь(тот же Dev C++ например).
ну и по коду:
в строке 
Код

result[a]/=matrix[coloumn][j];
 ты не учитываешь возможность деления на ноль.
в строке 
Код

result[a]-=matrix[coloumn][j];
 ты не учитываешь, что result[a](если он у тебя не инициализирован никаким столбцом) может быть равен нулю и в итоге ты можешь получить отрицательное значение... да и переменная a у тебя не изменяется...
Код

gets(o);
switch(o)

switch`у нельзя скормить строку, тут лучше сделать так
Код

char o; 
o = getch();
switch(o)
{
          //... 
 }




Это сообщение отредактировал(а) taiven - 9.12.2008, 19:41
PM   Вверх
Zaulyx
Дата 9.12.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



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

printf("vvedite nomer pervogo stolbca\n");
scanf("%d", &firstCol);
result[a]=matrix[firstCol][j];

coloumn=i;
while(o!='=')
{
printf("vvedite operaciu");
o = getch();    
    
printf("vvedite nomer stolbca\n");
scanf("%d", &coloumn);

switch(o)
{
case '+' :
for(j=0; j<=N; j++) 
result[a]+=matrix[coloumn][j];
a++;
break;
case '-' :
for(j=0; j<=N; j++)
result[a]-=matrix[coloumn][j];
a++;
break;
case'*' :
for(j=0; j<=N; j++)
result[a]*=matrix[coloumn][j];
a++;
break;
case'/' :
for(j=0; j<=N; j++)
result[a]/=matrix[coloumn][j];
a++;
break;
}

}



PS и дев-Си не хочет работать) пишет проект не откомпилирован....хотя компилица успешно...не хочет запускаться и все тут

Это сообщение отредактировал(а) Zaulyx - 9.12.2008, 20:10
PM MAIL   Вверх
taiven
Дата 9.12.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



Цитата

PS и дев-Си не хочет работать) пишет проект не откомпилирован....хотя компилица успешно...не хочет запускаться и все тут

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

Это сообщение отредактировал(а) taiven - 9.12.2008, 21:15
PM   Вверх
Zaulyx
Дата 9.12.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



о спасибо, а по коду есть какие-нибудь советы?

кстати твоя часть кода-считывание из файла не загружается. т.е. нажимаю на екзешный файл и вылетает...

Это сообщение отредактировал(а) Zaulyx - 9.12.2008, 21:45
PM MAIL   Вверх
taiven
Дата 9.12.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



В смысле вылетает? С ошибкой? что пишет?
PM   Вверх
Zaulyx
Дата 9.12.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



вылетает на подобии того как в паскале когда не пишешь readln; в конце и при запуске вылетает... вот и здесь что-то типо того...без ошибок..
PM MAIL   Вверх
taiven
Дата 9.12.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



запусти файл из командной строки(перетащи файл консольное окно и нажми <ENTER>)
или же вот эту часть кода 
Код

if((fp = fopen("C:\\file.txt", "r"))==NULL)
   {
      printf("Error\n");
      exit(1);
   }

измени на
Код

if((fp = fopen("C:\\file.txt", "r"))==NULL)
   {
      printf("Error\n");
      system("pause");
      exit(1);
   }

и откомпиль снова
скорее всего ты путь к файлу на свой не изменил.
PM   Вверх
Zaulyx
Дата 9.12.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



хм...ну я создал по адресу файл file.txt..
c:\file.txt

вот содержимое файла:
1.0 3.0 3.2 32.1
4.1 5.11 32.3 1.1

а когда запускаю пишет Error
т.е. файл не проходит проверку на null...
PM MAIL   Вверх
taiven
Дата 9.12.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



попробуй положить file.txt в папку с экзешником и поменяй это 
Код

if((fp = fopen("C:\\file.txt", "r"))==NULL)

на это
Код

if((fp = fopen("file.txt", "r"))==NULL)

PM   Вверх
Zaulyx
Дата 9.12.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



та же фигня...
PM MAIL   Вверх
taiven
Дата 9.12.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



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

 if((fp = fopen("C:\\file.txt.txt", "r"))==NULL)

PM   Вверх
Zaulyx
Дата 9.12.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



Код

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

int main()
{
   FILE *fp;
   FILE *Out;
   int index = 0, i = 0, j = 0, M = 0, N = 0, a=0, firstCol, coloumn;
   char str[10] = {0};
   double matrix[30][30] = {0};
   double value = 0.0;
   double result[30] = {0};
   char ch, o;

   if((fp = fopen("file.txt.txt", "r"))==NULL)
   {
      printf("Error\n");
      system("pause");
      exit(1);
   }

   while(!feof(fp))
   {
        ch = getc(fp);
        if(isdigit(ch))
        {
            while(!isspace(ch) && ch!=EOF)
            {
                str[index++] = ch;
                ch = getc(fp);
            }
            value = atof(str);
            matrix[i][j++] = value;
            M = i; N = j-1;
            if(ch=='\n'){ ++i; j = 0; }
            memset(str, '\0', 10);
        }
        index = 0;
   }

/*âûâîä íà ýêðàí*/
    for(i = 0; i <= M; ++i)
    {
        for(j = 0; j <= N; ++j)
        {
            printf("%g\t", matrix[i][j]);
        }
        printf("%c", '\n');
    }

    fclose(fp);
    system("pause");
  //  return 0;

printf("vvedite nomer pervogo stolbca\n");
scanf("%d", &firstCol);
result[a]=matrix[firstCol][j];

coloumn=i;
while(o!='=')
{
printf("vvedite operaciu");
o = getch();    
    
printf("vvedite nomer stolbca\n");
scanf("%d", &coloumn);

switch(o)
{
case '+' :
for(j=0; j<=N; j++) 
result[a]+=matrix[coloumn][j];
a++;
break;
case '-' :
for(j=0; j<=N; j++)
result[a]-=matrix[coloumn][j];
a++;
break;
case'*' :
for(j=0; j<=N; j++)
result[a]*=matrix[coloumn][j];
a++;
break;
case'/' :
for(j=0; j<=N; j++)
result[a]/=matrix[coloumn][j];
a++;
break;
}

}
Out = fopen("output.txt.txt", "w");
for (j=0;j<=N; j++)
fprintf(FILE Out, result[coloumn][j]);
fclose(FILE Out);
}


хм.. жалуется на то что char o не объявлена....
и жалуется на запись файла(не могу разобраться как записать массив в файл...)

Это сообщение отредактировал(а) Zaulyx - 9.12.2008, 23:43
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.