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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
#1

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

12.03.2011, 22:45. Просмотров 1103. Ответов 15

Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Получить в файле g все компоненты файла f, которые делятся на m и не делятся на n.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2011, 22:45     Ввод вывод
Посмотрите здесь:

Ввод/вывод - C++
Здраствуйте. Шиворот на выворот в вузе обучение начинается на основое того чего небыло. В данном смысле имеется ввиду ооп на си++ без каких...

ввод/вывод - C++
Как определить откуда вызывают cout - из dll либо из исполняемого приложения?

ВВОД-ВЫВОД!!!! - C++
Неправльно! Вообще ничего не выводит..... Структура «абонент телефонной сети» содержит следующие поля: 1) фамилия (строка), 2) улица,...

Ввод/вывод в MS VS - C++
Здравствуйте! У меня похожая проблема ... только у меня Вижуал С++ (русская версия) ... - только-только установила ... При...

Ввод и вывод на C++ - C++
Перехожу с паскаля на С++. С вводом и выводом в паскале было как-то попроще, а тут десятки вариантов. Подскажите, где можно найти...

ввод вывод СИ++ - C++
ля каждого посетителя парикмахерской (с одним мастером) известны t - момент его прихода и to – продолжительность его обслуживания. Сколько...

ввод вывод - C++
cout << "Rabochiy " << num + 1 << ": \n"; cout << "Imya: "; cin >> (*Worker).Imya; cout << "Doljnost: "; cin >>...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2846 / 1783 / 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++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.03.2011, 00:24     Ввод вывод #4
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
наверное до конца файла....
Эмм, а это сколько, а то я даже не знаю
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
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++
2846 / 1783 / 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
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
13.03.2011, 01:16     Ввод вывод #7
Ошибка в том,что вы вводите размер массива в программе,а так делать нельзя
Либо динамическое выделение памяти под массив,либо array[100]
Размер массива должен быть явно задан,чтобы компьютер знал сколько памяти выделять на массив.
Условие задачи странное,до конца файла,но конец то его где?Пока место на жестком диске не закончится?
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
13.03.2011, 01:22     Ввод вывод #8
Цитата Сообщение от Rexer Посмотреть сообщение
азмер массива должен быть явно задан,чтобы компьютер знал сколько памяти выделять на массив.
я вас не понял. а разве когда пользователь вводит
Цитата Сообщение от asics Посмотреть сообщение
cout<<"Vvedite kol-vo tselih chisel: "<<endl; cin >> size;
то компьютер не знает сколько памяти выделять?

и еще чего я не могу понять почему функция check() не работает ... вроде условие if правильно написал...
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.03.2011, 01:28     Ввод вывод #10
instagib, Что в моем коде не так ?
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
13.03.2011, 01:43     Ввод вывод #11
Цитата Сообщение от instagib Посмотреть сообщение
компьютер не знает сколько памяти выделять?
Читайте про размещение массивов в стеке и в динамической памяти. При объявлении массива
C++
1
int arr[size];
параметр size должен быть известен на этапе компиляции, то есть должен быть константным значением. Во время выполнения программы такое не сделаешь. Присмотритесь к программе asics, там в этом плане всё правильно.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
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
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
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++
Вот код. Здесь я записываю три числа разного типа в текстовый файл test.txt. Но в файле отображаются странные символы. Почему так может...

Ввод\Вывод - C++
Товарищи, был бы рад, если бы Вы оказали мне помощь в С++, пока разбераюсь в Нем плохо, но все еще впереди!) Собственно прошу помощи в...

Ввод и вывод - C++
1)Цифровой счетчик, это переменная с ограниченным диапазоном. Значение которой сбрасывается, когда ее целочисленное значение достигает...

ввод вывод в C++ - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
talis
791 / 543 / 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     Ввод вывод
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru