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

Ввод вывод - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
12.03.2011, 22:45     Ввод вывод #1
Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Получить в файле g все компоненты файла f, которые делятся на m и не делятся на n.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
12.03.2011, 23:12     Ввод вывод #2
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
Заполнить файл последовательного доступа f целыми числами
Каким количеством ?
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
12.03.2011, 23:53  [ТС]     Ввод вывод #3
Цитата Сообщение от asics Посмотреть сообщение
Каким количеством ?
наверное до конца файла....
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.03.2011, 00:24     Ввод вывод #4
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
наверное до конца файла....
Эмм, а это сколько, а то я даже не знаю
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
13.03.2011, 01:08     Ввод вывод #5
yuliyayuliya28,
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
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;
int check(int m, int n,int size, int *ptr)
{
 
 
     ofstream out;
     out.open("otvet.txt", fstream::in);
     for(int i=0; i < size; i++)
     {
          if(ptr[i]%m==0 && ptr[i]%n!=0)
          {
               out<<ptr[i];
          }
     }
     out.close();
     return -1;
}
 
 
int * ptr =0;
int * ap=0;
int main()
{
 
     int size, m, n;
     cout<<"Vvedite kol-vo tselih chisel: "<<endl;
     cin >> size;
     cout<<"Chisla kratni: "<<endl;
     cin >> m;
     cout<<"Ne kratni: "<<endl;
     cin >> n;
     int arr[size];
     ptr = arr;
     for(int i=0; i <size; i++)
     {
          arr[i] = rand() % 100;
     }
     check(m, n, size, ptr);
     getch();
     return 0;
}

asics, однако тут есть ошибки..если вам не трудно подправьте, и скажите мне я исправлю
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.03.2011, 01:16     Ввод вывод #6
Вроде так
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
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#include <conio.h>
using namespace std;
void check(int m, int n,int size, int *ptr)
{
 
 
     ofstream out("g.txt");
     for(int i=0; i < size; i++)
     {
          if(ptr[i]%m==0 && ptr[i]%n!=0)
          {
               out<<ptr[i] << ' ';
          }
     }
     out.close();
}
int main()
{
 
     int size, m, n;
     cout<<"Vvedite kol-vo tselih chisel: "<<endl;
     cin >> size;
     cout<<"Chisla kratni: "<<endl;
     cin >> m;
     cout<<"Ne kratni: "<<endl;
     cin >> n;
     int *array = new int[size];
     ofstream ofs("f.txt");
     srand(time(0));
     for(int i=0; i <size; i++)
     {
          array[i] = rand() % 100;
          ofs << array[i] << ' ';
     }
     check(m, n, size, array);
     delete[] array;
     //getch();
     return 0;
}
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
13.03.2011, 01:16     Ввод вывод #7
Ошибка в том,что вы вводите размер массива в программе,а так делать нельзя
Либо динамическое выделение памяти под массив,либо array[100]
Размер массива должен быть явно задан,чтобы компьютер знал сколько памяти выделять на массив.
Условие задачи странное,до конца файла,но конец то его где?Пока место на жестком диске не закончится?
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
13.03.2011, 01:22     Ввод вывод #8
Цитата Сообщение от Rexer Посмотреть сообщение
азмер массива должен быть явно задан,чтобы компьютер знал сколько памяти выделять на массив.
я вас не понял. а разве когда пользователь вводит
Цитата Сообщение от asics Посмотреть сообщение
cout<<"Vvedite kol-vo tselih chisel: "<<endl; cin >> size;
то компьютер не знает сколько памяти выделять?

и еще чего я не могу понять почему функция check() не работает ... вроде условие if правильно написал...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.03.2011, 01:27     Ввод вывод #9

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
Эмм, а это сколько, а то я даже не знаю
Будет Вам над барышней издеваться


Вот без массивов и заморочек по поводу их размера
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 <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define F "f.txt"
#define G "g.txt"
    
#define TOP 100
 
int main(void){
    FILE * f1, * f2;
    int numbersCount, i, number, m, n;
    
    printf("Numbers count: ");
    scanf("%d", &numbersCount);
    printf("m = ");
    scanf("%d", &m);
    printf("n = ");
    scanf("%d", &n);
    
    if ( ( f1 = fopen(F, "w") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    srand(time(NULL));
    for ( i = 0; i < numbersCount; ++i ){
        if ( fprintf(f1, "%d\n", rand() % TOP) < 0 ){
            perror("fprintf");
            if ( fclose(f1) )
                perror("fclose");
            exit(1);
        }
    }
    if ( fclose(f1) ){
        perror("fclose");
        exit(1);
    }
    
    if ( ( f1 = fopen(F, "r") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( ( f2 = fopen(G, "w") ) == NULL ){
        perror("fopen");
        if ( fclose(f1) )
            perror("fclose");
        exit(1);
    }
    
    while ( fscanf(f1, "%d", &number) == 1 ){
        if ( ! ( number % m ) && ( number % n ) ){
            if ( fprintf(f2, "%d\n", number) < 0 ){
                perror("fprintf");
                if ( fclose(f1) )
                    perror("fclose");
                if ( fclose(f2) )
                    perror("fclose");
                exit(1);
            }
        }
    }
    if ( ferror(f1) ){
        perror("ferror");
        if ( fclose(f1) )
            perror("fclose");
        if ( fclose(f2) )
            perror("fclose");
        exit(1);
    }
    number = 0;
    if ( fclose(f1) ){
        perror("fclose");
        ++number;
    }
    if ( fclose(f2) ){
        perror("fclose");
        ++number;
    }
    
    fprintf(stderr, "Done with %d errors.\n", number);
    exit(number);
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.03.2011, 01:28     Ввод вывод #10
instagib, Что в моем коде не так ?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.03.2011, 01:43     Ввод вывод #11
Цитата Сообщение от instagib Посмотреть сообщение
компьютер не знает сколько памяти выделять?
Читайте про размещение массивов в стеке и в динамической памяти. При объявлении массива
C++
1
int arr[size];
параметр size должен быть известен на этапе компиляции, то есть должен быть константным значением. Во время выполнения программы такое не сделаешь. Присмотритесь к программе asics, там в этом плане всё правильно.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
13.03.2011, 02:34     Ввод вывод #12
easybudda, спасибо.. на счет:
Цитата Сообщение от easybudda Посмотреть сообщение
параметр size должен быть известен на этапе компиляции, то есть должен быть константным значением
теперь знаю.
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
13.03.2011, 12:35  [ТС]     Ввод вывод #13
Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:


Будет Вам над барышней издеваться


Вот без массивов и заморочек по поводу их размера
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 <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define F "f.txt"
#define G "g.txt"
    
#define TOP 100
 
int main(void){
    FILE * f1, * f2;
    int numbersCount, i, number, m, n;
    
    printf("Numbers count: ");
    scanf("%d", &numbersCount);
    printf("m = ");
    scanf("%d", &m);
    printf("n = ");
    scanf("%d", &n);
    
    if ( ( f1 = fopen(F, "w") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    srand(time(NULL));
    for ( i = 0; i < numbersCount; ++i ){
        if ( fprintf(f1, "%d\n", rand() % TOP) < 0 ){
            perror("fprintf");
            if ( fclose(f1) )
                perror("fclose");
            exit(1);
        }
    }
    if ( fclose(f1) ){
        perror("fclose");
        exit(1);
    }
    
    if ( ( f1 = fopen(F, "r") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( ( f2 = fopen(G, "w") ) == NULL ){
        perror("fopen");
        if ( fclose(f1) )
            perror("fclose");
        exit(1);
    }
    
    while ( fscanf(f1, "%d", &number) == 1 ){
        if ( ! ( number % m ) && ( number % n ) ){
            if ( fprintf(f2, "%d\n", number) < 0 ){
                perror("fprintf");
                if ( fclose(f1) )
                    perror("fclose");
                if ( fclose(f2) )
                    perror("fclose");
                exit(1);
            }
        }
    }
    if ( ferror(f1) ){
        perror("ferror");
        if ( fclose(f1) )
            perror("fclose");
        if ( fclose(f2) )
            perror("fclose");
        exit(1);
    }
    number = 0;
    if ( fclose(f1) ){
        perror("fclose");
        ++number;
    }
    if ( fclose(f2) ){
        perror("fclose");
        ++number;
    }
    
    fprintf(stderr, "Done with %d errors.\n", number);
    exit(number);
}
Спасибо....можете пояснить код?и вот в f...должна быть числовая последоватьность?или что?
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
13.03.2011, 21:09     Ввод вывод #14
Цитата Сообщение от instagib Посмотреть сообщение
я вас не понял. а разве когда пользователь вводит

то компьютер не знает сколько памяти выделять?

и еще чего я не могу понять почему функция check() не работает ... вроде условие if правильно написал...
Вводя размер вы выделяете память под переменную,где храните размер,а не под массив
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
14.03.2011, 20:12  [ТС]     Ввод вывод #15
Цитата Сообщение от Rexer Посмотреть сообщение
Вводя размер вы выделяете память под переменную,где храните размер,а не под массив
Вроде так...только воп помогите ошибки исправить(пожалуйста

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
#include "stdafx.h"
#include "iostream"
#include <conio.h>
#include "time.h"
 
 
using namespace std;
long int i,k,m,n;
 
 
int main()
{   
    setlocale(LC_ALL,"");
    srand(time==NULL);
cout<<"Введите количество элементов: ";
cin>>k;
cout<<endl;
cout<<"Введите число m: ";
cin>>m;
cout<<endl;
cout<<"Введите число n: ";
cin>>n;
    int *a;
    a = new int[n];
    FILE* str;
    str=fopen("d1.txt","w");
    for(i=0;i<k;i++)
    {
point:  a[i]=rand()%100-rand()%100;
        if (a[i]==0)
            goto point;
        fprintf(str,"%d ",a[i]);
    }
    fclose(str);
 
    FILE* str1;
 
    str1=fopen("d2.txt","w");
    for(i=0;i<k;i++)
    {
        if (a[i]%m==0)&&(!a[i]%n==0);
        fprintf(str1," %d ,",a[i]);
    }
    fclose(str1);
    delete []a;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 20:27     Ввод вывод
Еще ссылки по теме:

C++ Ввод\Вывод
Ввод/вывод C++
ввод вывод C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.03.2011, 20:27     Ввод вывод #16
Вот, исправил ошибки в исходнике. Единственное - логику и математику вашу не проверял.

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
//УЖАС!
//#include "iostream"
//#include <conio.h>
//#include "time.h"
 
#include <iostream>
#include <conio.h>
#include <time.h>   //для time
#include <stdlib.h> //для srand
#include <stdio.h>  //для fprintf и подобных
 
 
using namespace std;
long int i, k, m, n;
 
 
int main()
{
    setlocale(LC_ALL,""); // ?!
 
    //srand(time==NULL);
    srand( time(0) ); //time ведь функция
 
    cout << "Enter number of elements: ";
    cin >> k;
    cout << "\nEnter m: ";
    cin >> m;
    cout << endl;
    cout << "Enter n: ";
    cin >> n;
 
    int * a = new int[n];
 
    FILE * str = fopen( "d1.txt" , "w" );
 
    for( i = 0; i < k; i++ )
    {
        /* //УЖАС!
        point: a[i]=rand()%100-rand()%100;
        if (a[i]==0)
            goto point;
        */
 
        do
        {
            a[i] = rand() % 100 - rand() % 100;
        }
        while( a[i] == 0 );
 
        fprintf( str, "%d ", a[i] );
    }
 
    fclose( str );
 
    FILE * str1 = fopen( "d2.txt", "w" );
 
    for( i = 0; i < k; i++ )
    {
        //if ( a[i] % m == 0 ) && ( !a[i] % n == 0 );
        //fprintf(str1," %d ,",a[i]);
 
        if ( ( a[i] % m == 0 ) && ( !a[i] % n == 0 ) ) //всё вместе ещё в одни скобки + убрать точку с запятой
          fprintf( str1, " %d ," , a[i] );
    }
 
    fclose( str1 );
    delete [] a;
 
    return 0;
}
И пожалуйста, в дальнейшем используйте теги:

Bash
1
[CPP] ваш код [/CPP]
Yandex
Объявления
14.03.2011, 20:27     Ввод вывод
Ответ Создать тему

Метки
ввод/вывод c++, работа с файлами, работа с файлами в си, файлы
Опции темы

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