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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Case в Case-е и бинарные файлы! 
V
    Опции темы
mgkit
Дата 2.6.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Задание: 
ввод исходных данных (учесть три возможности ввода данных: с клавиатуры, случайным образом, из файла);
вывод массива исходных данных (для улучшения качества просмотра предпочтение отдать табличному виду и формату с фиксированной точкой);
обработку данных в соответствии с заданным вариантом;
вывод результатов выполнения программы (в процессе отладки программы – на экран; после отладки – в файл);

Вариант:
Найти среднее арифметическое тех элементов одномерного массива X,значение которых не превышают X1, включая и сам элемент X1. Найти также среднее арифметическое всех элементов данного массива.
Код:
Код

#include <vcl.h>
#include <iostream.h>
#include <sstream.h>
#include <fstream.h>
#include <conio.h>
#pragma hdrstop

void entermatr(int *a,int n)
{
printf("\n---------------------------------\n\n");
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    cin>>*(a+i);
  }
  return;
}

void rentermatr(int *a,int n)
{
printf("\n---------------------------------\n\n");
randomize;
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    *(a+i)=random(100);
  }
  return;
}

void seshion(int *a, int n, float S1,float S2)
{
int k=0,c=0,i;
for (i = 0; i<n; i++) {
 if (*(a+i)<=*a)
  {
    S1=S1+*(a+i);
    k++; }
   S2=S2+*(a+i);
   c++; }
 S1=S1/k;
 S2=S2/c;
return;
}

main()
{
        int c=1,n;
        while ( (c = getch()) != '4')
        {
         switch ( c ) {
            case '1' :
            while ( (c = getch()) != '4')
        {
            switch ( c ) {

                 case '1' :
                     printf("Please, enter quantity elements of mas\n");
                     cin>>n;
                     int *a=new int[n];
                     entermatr(a,n);
                     break;

                 case '2' :
                     printf("Please, enter quantity elements of mas\n");
                     cin>>n;
                     int *a=new int[n];
                     rentermatr(a,n);
                     break;

                 case '3' : {тут типо из файла брать надо, не знаю как}
                     break;

                 default:
                     printf( "Please, write new simbol!" );
                     break;
                }
               }
                break;

            case '2' :
                float S1=0,S2=0;
                seshion(a,n,S1,S2);
                break;

            case '3' :
                cout<<S1<<" - Sum elements > A[1]"<<endl;
                cout<<S2<<" - Sum elements"<<endl;
                {тут надо вносить в файл}
                break;
            default:
                printf( "Please, write new simbol!" );
                break;
        }
    }

    free(a);

    return 0;
}


1)Очень страная ошибка на выборе case, не компилируется.

2)Не поможете с бинарными файлами, книги есть, но там как то не понятно.


Это сообщение отредактировал(а) mgkit - 2.6.2009, 01:11
PM MAIL   Вверх
zim22
Дата 2.6.2009, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(mgkit @  2.6.2009,  00:32 Найти цитируемый пост)
1)Очень страная ошибка на выборе case, не компилируется.

http://forum.vingrad.ru/index.php?showtopi...t&p=1775775


--------------------
PM MAIL   Вверх
Alca
Дата 2.6.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Цитата

Код

case '1' :


А зачем одинарные ковычки?


--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 2.6.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Alca @  2.6.2009,  10:17 Найти цитируемый пост)
А зачем одинарные ковычки? 

'1' == 49
1 == 1

PM   Вверх
math64
Дата 2.6.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



В case '1' и case '2' объявлены int *a; Нужно либо вынести объявление перед switch(), либо использовать фигурные скобки:
Код

                 case '1' :
                     {
                     printf("Please, enter quantity elements of mas\n");
                     cin>>n;
                     int *a=new int[n];
                     entermatr(a,n);
                     break;
                     }

PM   Вверх
zim22
Дата 2.6.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(math64 @  2.6.2009,  10:39 Найти цитируемый пост)
Нужно либо вынести объявление перед switch(), либо использовать фигурные скобки:

повторюсь: http://forum.vingrad.ru/topic-244742/view-.../p-1775775.html
переменные объявлять можно в последней метке case или default. иначе - фигурные скобки.




--------------------
PM MAIL   Вверх
mgkit
Дата 3.6.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, с case разобрался!
С бинарными поможете?)
Код

#include <vcl.h>
#include <iostream.h>
#include <sstream.h>
#include <fstream.h>
#include <conio.h>
#pragma hdrstop

void entermatr(int *a,int n)
{
printf("\n---------------------------------\n\n");
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    cin>>*(a+i);
  }
  return;
}

void rentermatr(int *a,int n)
{
printf("\n---------------------------------\n\n");
randomize;
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    *(a+i)=random(100);
  }
  return;
}

void seshion(int *a, int n, float S1,float S2)
{
int k=0,c=0,i;
for (i = 0; i<n; i++) {
 if (*(a+i)<=*a)
  {
    S1=S1+*(a+i);
    k++; }
   S2=S2+*(a+i);
   c++; }
 S1=S1/k;
 S2=S2/c;
return;
}

main()
{
        int c=1,n;
        printf("Please, enter quantity elements of mas\n");
        cin>>n;
        int *a=new int[n];
        float S1=0,S2=0;
        char put[255];
        while ( (c = getch()) != '4')
        {
         switch ( c ) {
            case '1' :
              {
            while ( (c = getch()) != '4')
        {
            switch ( c ) {

                 case '1' :
                     entermatr(a,n);
                     break;
                 case '2' :
                     rentermatr(a,n);
                     break;
                 case '3' :
                    {
                     cout>>"Please, enter name file: ";
                     cin<<put<<endl;
                     File *f=fopen(put, "rb+");
                     //Как здесь прописать, что бы он вводил в *а с файла? (понимаю, что функцией fscanf,но как?)
                     break;
                    }
                 default:
                     printf( "Please, write new simbol!" );
                     break;
                }
               }
                break;
              }
            case '2' :
              {
                seshion(a,n,S1,S2);
                break;
              }
            case '3' :
              {
                cout<<S1<<" - Sum elements > A[1]"<<endl;
                cout<<S2<<" - Sum elements"<<endl;
                break;
              }
            default:
                printf( "Please, write new simbol!" );
                break;
        }
    }

    free(a);

    return 0;
}

PM MAIL   Вверх
mgkit
Дата 6.6.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



хм... алгоритм такой - на каждой новой строчке файла новый элемент массива...
Код

#include <vcl.h>
#include <iostream.h>
#include <sstream.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>

#pragma hdrstop

void entermatr(float *a,int n)
{
printf("\n----------------------------------------------\n\n");
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    cin>>*(a+i);
  }
  return;
}

void rentermatr(float *a,int n)
{
printf("\n----------------------------------------------\n\n");
randomize;
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    *(a+i)=random(100);
  }
  return;
}

void fentermatr(float *a,int n)
{
  int i;
  char put[255];
  printf("\n----------------------------------------------\n\n");
  cout<<"Please, enter name file: ";
  cin>>put;
  FILE *f=fopen(put, "rb+");
   for( i=0; i<n; i++) {
     fscanf(f,"%s",&put);
     *(a+i)=atof(put);
    }
 return;
}

void seshion(float *a, int n, float S1,float S2)
{
int k=0,c=0,i;
for (i = 0; i<n; i++) {
 if (*(a+i)<=*a)
  {
    S1=S1+*(a+i);
    k++; }
   S2=S2+*(a+i);
   c++; }
 S1=S1/k;
 S2=S2/c;
return;
}

void fexitmatr(float S1, float S2)
{
  int i;
  char put[255];
  printf("\n----------------------------------------------\n\n");
  cout<<"Please, enter name file: ";
  cin>>put;
  FILE *f=fopen(put, "rb+");
  fprintf(f,"%s",&S1);
  fprintf(f,"%s",&S2);
 return;
}

main()
{
        int c=1,n;
        printf("Please, enter quantity elements of mas\n");
        cin>>n;
        float *a=new float[n];
        float S1=0,S2=0;
        while ( c!= '0')
        {
          cout<<"----------------------------------------------"<<endl;
          cout<<"Choose number and press"<<endl;
          cout<<"1 - write matr"<<endl;
          cout<<"2 - work with matr"<<endl;
          cout<<"3 - result"<<endl;
          cout<<"0 - exit"<<endl;
         switch ( c = getch() ) {
            case '1' :
              {
            while ( c!= '0')
        {
          cout<<"----------------------------------------------"<<endl;
          cout<<"Choose number and press"<<endl;
          cout<<"1 - someself"<<endl;
          cout<<"2 - random"<<endl;
          cout<<"3 - file"<<endl;
          cout<<"0 - exit"<<endl;
            switch ( c = getch() ) {

                 case '1' :
                     entermatr(a,n);
                     break;
                 case '2' :
                     rentermatr(a,n);
                     break;
                 case '3' :
                    {
                     fentermatr(a,n);
                     break;
                    }
                 default:
                     cout<<"Please, write new simbol! "<<endl;
                     break;
                }
               }
                c=1;
                break;
              }
            case '2' :
              {
                seshion(a,n,S1,S2);
                break;
              }
            case '3' :
              {
                cout<<S1<<" - Sum elements > A[1]"<<endl;
                cout<<S2<<" - Sum elements"<<endl;
                fexitmatr(S1, S2);
                break;
              }
            default:
                cout<<"Please, write new simbol! "<<endl;
                break;
        }
    }

    free(a);

    return 0;
}

мм... из файла не читает, рандомом не заполняет. Ужас короче! В чём ошибка?


Это сообщение отредактировал(а) mgkit - 6.6.2009, 23:11
PM MAIL   Вверх
mgkit
Дата 7.6.2009, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Получилось. Есть две проблемы:
1. Среднее арифмитическое постояно округляется до десятых.
2. При выводе в файл, пишутся вовсе НЕ S1 и S2.
Как исправить?

Код

#include <iostream.h>
#include <conio.h>

#pragma hdrstop

void entermatr(float *a,int n)
{
printf("\n----------------------------------------------\n\n");
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    cin>>*(a+i);
  }
  return;
}

void rentermatr(float *a,int n)
{
printf("\n----------------------------------------------\n\n");
randomize;
 for(int i=0; i<n; i++)
    *(a+i)=random(100);
return;
}

void fentermatr(float *a,int n)
{
  int i;
  char put[255];
  printf("\n----------------------------------------------\n\n");
  cout<<"Please, enter name file: ";
  cin>>put;
  FILE *f=fopen(put, "rb+");
   for( i=0; i<n; i++) {
     fscanf(f,"%s",&put);
     *(a+i)=atof(put);
    }
  fclose(f);
 return;
}

float seshion1(float *a, int n)
{
int k=0,i,S=0;
for (i = 0; i<n; i++)
 if (*(a+i)<=*a)
  {
    S=S+*(a+i);
    k++; }
 S=S/k;
return(S);
}

float seshion2(float *a, int n)
{
int k=0,i,S=0;
for (i = 0; i<n; i++) {
    S=S+*(a+i);
    k++; }
 S=S/k;
return(S);
}

void fexitmatr(float S1, float S2)
{
  int i;
  char put[255];
  printf("\n----------------------------------------------\n\n");
  cout<<"Please, enter name file: ";
  cin>>put;
  FILE *f=fopen(put, "ab+");
  fprintf(f,"\nSum elements > A[1] = %f\nSum elements = %f\n",&S1,&S2);
  fclose(f);
 return;
}

main()
{
        int c=1,n;
        printf("Please, enter quantity elements of mas\n");
        cin>>n;
        float *a=new float[n];
        float S1=0,S2=0;
        while ( c!= '0')
        {
          cout<<"----------------------------------------------"<<endl;
          cout<<"Choose number and press"<<endl;
          cout<<"1 - write matr"<<endl;
          cout<<"2 - work with matr"<<endl;
          cout<<"3 - result"<<endl;
          cout<<"0 - exit"<<endl;
         switch ( c = getch() ) {
            case '1' :
              {
            while ( c!= '0')
        {
          cout<<"----------------------------------------------"<<endl;
          cout<<"Choose number and press"<<endl;
          cout<<"1 - someself"<<endl;
          cout<<"2 - random"<<endl;
          cout<<"3 - file"<<endl;
          cout<<"0 - exit"<<endl;
            switch ( c = getch() ) {

                 case '1' :
                     entermatr(a,n);
                     break;
                 case '2' :
                     rentermatr(a,n);
                     break;
                 case '3' :
                    {
                     fentermatr(a,n);
                     break;
                    }
                 default:
                     cout<<"Please, write new symbol! "<<endl;
                     break;
                }
               }
                c=1;
                break;
              }
            case '2' :
              {
                S1=seshion1(a,n);
                S2=seshion2(a,n);
                break;
              }
            case '3' :
              {
                cout<<S1<<" - Sum elements > A[1]"<<endl;
                cout<<S2<<" - Sum elements"<<endl;
                fexitmatr(S1, S2);
                break;
              }
            default:
                cout<<"Please, write new simbol! "<<endl;
                break;
        }
    }

    free(a);
}

PM MAIL   Вверх
mgkit
Дата 7.6.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так теперь проблема только с записью S1и S2 в файл!
Код

#include <iostream.h>
#include <conio.h>

#pragma hdrstop

void entermatr(float *a,int n)
{
printf("\n----------------------------------------------\n\n");
 for(int i=0; i<n; i++)
  {
    printf("Please, enter %i massive element\n",i);
    cin>>*(a+i);
  }
  return;
}

void rentermatr(float *a,int n)
{
printf("\n----------------------------------------------\n\n");
randomize;
 for(int i=0; i<n; i++)
    *(a+i)=random(100);
return;
}

void fentermatr(float *a,int n)
{
  int i;
  char put[255];
  printf("\n----------------------------------------------\n\n");
  cout<<"Please, enter name file: ";
  cin>>put;
  FILE *f=fopen(put, "rb+");
   for( i=0; i<n; i++) {
     fscanf(f,"%s",&put);
     *(a+i)=atof(put);
    }
  fclose(f);
 return;
}

float seshion1(float *a, int n)
{
int k=0,i;
float S=0;
for (i = 0; i<n; i++)
 if (*(a+i)<=*a)
  {
    S=S+*(a+i);
    k++; }
 S=S/k;
return(S);
}

float seshion2(float *a, int n)
{
int k=0,i;
float S=0;
for (i = 0; i<n; i++) {
    S=S+*(a+i);
    k++; }
 S=S/k;
return(S);
}

void fexitmatr(float S1, float S2)
{
  int i;
  char put[255];
  printf("\n----------------------------------------------\n\n");
  cout<<"Please, enter name file: ";
  cin>>put;
  FILE *f=fopen(put, "ab+");
  fprintf(f,"\nSum elements > A[1] = %f\nSum elements = %f\n",&S1,&S2);
  fclose(f);
 return;
}

main()
{
        int c=1,n;
        printf("Please, enter quantity elements of mas\n");
        cin>>n;
        float *a=new float[n];
        float S1=0,S2=0;
        while ( c!= '0')
        {
          cout<<"----------------------------------------------"<<endl;
          cout<<"Choose number and press"<<endl;
          cout<<"1 - write matr"<<endl;
          cout<<"2 - work with matr"<<endl;
          cout<<"3 - result"<<endl;
          cout<<"0 - exit"<<endl;
         switch ( c = getch() ) {
            case '1' :
              {
            while ( c!= '0')
        {
          cout<<"----------------------------------------------"<<endl;
          cout<<"Choose number and press"<<endl;
          cout<<"1 - someself"<<endl;
          cout<<"2 - random"<<endl;
          cout<<"3 - file"<<endl;
          cout<<"0 - exit"<<endl;
            switch ( c = getch() ) {

                 case '1' :
                     entermatr(a,n);
                     break;
                 case '2' :
                     rentermatr(a,n);
                     break;
                 case '3' :
                    {
                     fentermatr(a,n);
                     break;
                    }
                 default:
                     cout<<"Please, write new symbol! "<<endl;
                     break;
                }
               }
                c=1;
                break;
              }
            case '2' :
              {
                S1=seshion1(a,n);
                S2=seshion2(a,n);
                break;
              }
            case '3' :
              {
                cout<<S1<<" - Sum elements > A[1]"<<endl;
                cout<<S2<<" - Sum elements"<<endl;
                fexitmatr(S1, S2);
                break;
              }
            default:
                cout<<"Please, write new simbol! "<<endl;
                break;
        }
    }

    free(a);
}


PM MAIL   Вверх
mgkit
Дата 8.6.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ребята, ну помоги с вводом значений в файл. У меня в следующей задаче тоже самое.! Я не могу так сдать работу!! Почему при выводе в файл значения другие?

Это сообщение отредактировал(а) mgkit - 8.6.2009, 21:19
PM MAIL   Вверх
zim22
Дата 9.6.2009, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(mgkit @  8.6.2009,  21:19 Найти цитируемый пост)
 Я не могу так сдать работу!! Почему при выводе в файл значения другие?

намекаю: пошаговая отладка. degug. f9. f5. breakpoint.


--------------------
PM MAIL   Вверх
mgkit
Дата 9.6.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



zim22
Мне уже помогли, отдельно тему создал. А пошаговой я делал, и не понимал, почему в програме значения одни, а в файле другие. Если интересно почему, тебе сюда http://forum.vingrad.ru/forum/topic-262633.html
PM MAIL   Вверх
zim22
Дата 9.6.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(mgkit @  9.6.2009,  19:32 Найти цитируемый пост)
Если интересно почему, тебе сюда

угу, прочитал. понял, в чём ваши проблемы заключались  smile 
Цитата(Dmi3ev @  9.6.2009,  00:06 Найти цитируемый пост)
наверное, потому что прокладку между компом и монитором поменять надо...

Цитата(Dmi3ev @  9.6.2009,  00:06 Найти цитируемый пост)
код форматировать учись, а то читать невозможно.




--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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