Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2010, 21:28   #1
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию еще раз файлы в С

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#include <time.h>
void main ()
{
srand (time (0));
int MAS[20],i;
int ch,n;
FILE *intxt; //Запись исх.данных в файл //“1.txt” 
intxt = fopen ("D:\\1.txt","w+t") ;
for (i ;i<20;i++)
{
*(MAS+i) = rand()%100;
fprintf (intxt, "%4d", *(MAS+i));
printf ("%d\n",*(MAS+i));
}
fclose (intxt);
{
FILE *outtxt; //Чтение массива из файла //“1.txt” 
outtxt = fopen ("D:\\1.txt","rt") ;
for (i ;i<20;i++)
{
fscanf (outtxt,"%4d",&(*(MAS+i)));
}
{
FILE *savetxt; //Обработка и запись //результата
savetxt = fopen ("D:\\2.txt","w+t") ; //в другой файл “2.txt”
for (i ; i<20; i++) 
{ 
if (*(MAS+i)%2==0)
   ch=ch++;
   else n=n++;
}
fprintf (savetxt,"%d", ch,n);
printf ("kolichestvo chet= %d \n\n", ch);
printf ("kolichestvo nechet= %d \n\n", n);
}
}
fclose (savetxt);
fclose (outtxt);
код написан вроде правильно файл intxt работает нормально но компилятор говорит что outtxt и savetxt не идентифицированы хотя написаны также как и intxt в чем проблема не могу понять подскажите пожалуйста
серг вне форума Ответить с цитированием
Старый 18.02.2010, 21:38   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#include <time.h>
void main (void)
{
     srand (time (0));
     int MAS[20],i;
     int ch,n;
     FILE *intxt; //Запись исх.данных в файл //“1.txt” 
     intxt = fopen ("D:\\1.txt","w+t") ;
     for (i ;i<20;i++)
     {
         *(MAS+i) = rand()%100;
         fprintf (intxt, "%4d", *(MAS+i));
         printf ("%d\n",*(MAS+i));
     }        
     fclose (intxt);
//     {
            FILE *outtxt; //Чтение массива из файла //“1.txt” 
            outtxt = fopen ("D:\\1.txt","rt") ;
            for (i ;i<20;i++)
            {
                fscanf (outtxt,"%4d",&(*(MAS+i)));
            }
  //   {
            FILE *savetxt; //Обработка и запись //результата
            savetxt = fopen ("D:\\2.txt","w+t") ; //в другой файл “2.txt”
            for (i ; i<20; i++) 
            { 
                if (*(MAS+i)%2==0)
                   ch=ch++;
                else n=n++;
            }
            fprintf (savetxt,"%d", ch,n);
            printf ("kolichestvo chet= %d \n\n", ch);
            printf ("kolichestvo nechet= %d \n\n", n);
    //        }
     //}
     fclose (savetxt);
     fclose (outtxt);
}
кстати на счет этого:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
в iostream.h есть все функции из stdio.h(printf, scanf...)
conio.h и stdlib.h здесь вообще не нужны

Последний раз редактировалось NiCola999; 18.02.2010 в 21:49.
NiCola999 вне форума Ответить с цитированием
Старый 18.02.2010, 22:00   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

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

Код:
#include <iostream>
using namespace std;
#include <time.h>

int main (void)
{
     srand (time (0));
     int MAS[20],i;
     int ch,n=0; // !!! n не была проинициализирована, поэтому кол-во нечетных цифр в ответе было не правильным
     FILE *intxt; //Запись исх.данных в файл //“1.txt” 
     intxt = fopen ("D:\\1.txt","w+t") ;
     for (i=0 ;i<20;i++)    
     {
         *(MAS+i) = rand()%100;
         fprintf (intxt, "%4d", *(MAS+i));
         printf ("%d\n",*(MAS+i));
     }        
     fclose (intxt);
//     {
            FILE *outtxt; //Чтение массива из файла //“1.txt” 
            outtxt = fopen ("D:\\1.txt","rt") ;
            for (i=0 ;i<20;i++)    // !!! после первого фора  i=19, у вас второй фор крутится 0 раз, так как
            //получается for(i=19; i<20; i++)
            {
                fscanf (outtxt,"%4d",&(*(MAS+i)));
            }
  //   {
            FILE *savetxt; //Обработка и запись //результата
            savetxt = fopen ("D:\\2.txt","w+t") ; //в другой файл “2.txt”
            for (i=0 ; i<20; i++)  //!!! аналогично со вторым фором
            { 
                if (*(MAS+i)%2==0)
                   ch++;  // у вас было написано ch = ch++ т.е вы
                   // предыдущему значению ch присваивали увеличенное, в итоге получается 0 всегда
                else n++;   // !!! аналогично с ch
            }
            fprintf (savetxt,"%d", ch,n);
            printf ("kolichestvo chet= %d \n\n", ch);
            printf ("kolichestvo nechet= %d \n\n", n);
    //        }
     //}
     fclose (savetxt);
     fclose (outtxt);
     return 0;
}
void main(){} я поменял на int main(void) { return 0; } так как у меня DevC++ ругается на это

Последний раз редактировалось NiCola999; 18.02.2010 в 22:22.
NiCola999 вне форума Ответить с цитированием
Старый 18.02.2010, 22:10   #4
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

ребят я знаю что уже замучил но вот полный код программы первая састь работает а при вводе двумерного массива для второй компилятор ошибок не находит но при запуске на выполнение выдает ошибку в 52 строке она выделена в коде ошибка такая: строка не равна нулю и выдает код на языке С++ в чем проблема не пойму
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#include <time.h>
void main ()
{
srand (time (0));
int MAS[20],i;
int ch=0,n=0;
FILE *intxt; //Запись исх.данных в файл //“1.txt” 
intxt = fopen ("D:\\1.txt","w+t") ;
for (i=0 ;i<20;i++)
{
*(MAS+i) = rand()%100;
fprintf (intxt, "%4d", *(MAS+i));
printf ("%d\n",*(MAS+i));
}
fclose (intxt);

FILE *out; //Чтение массива из файла //“1.txt” 
out = fopen ("D:\\1.txt","rt") ;
for (i=0 ;i<20;i++)
{
fscanf_s (out,"%4d",&(*(MAS+i)));
}
FILE *save; //Обработка и запись //результата
save = fopen ("D:\\2.txt","w+t") ; //в другой файл “2.txt”
for (i=0 ; i<20; i++) 
{ 
if (*(MAS+i)%2==0)
   ch++;
   else n++; 
}
fprintf (save,"%d", ch);
fprintf(save,"\n");
fprintf (save,"%d", n);
printf ("kolichestvo chet= %d \n\n", ch);
printf ("kolichestvo nechet= %d \n\n", n);
fclose (save);
fclose (out);
ВТОРАЯ ЧАСТЬ
int j,N=10,M=6;// Размерность масива 
    srand (time (0));
	double* mas;  
	mas = new double [N*M]; // Резервирование памяти для динамического массива
    FILE *massiv2; //В файл "1.txt" //дописывается
    massiv2 = fopen ("1.txt","at") ; //двумерный массив
    fprintf (massiv2,"\n\n");
    // Заполнение массива
	for (i=0;i<N;i++){	
		for (j=0;j<M;j++) {
				*(mas+i*M+j)=rand()%200-200;// ОШИБКА В ЭТОЙ СТРОКЕ МАССИВ ПОЧЕМУ ТО НЕ ЗАПОЛНЯЕТСЯ ИЛИ ЧТО ТО ВРОДЕ ТОГО
                    printf ("%d",*(mas+i*M+j));
                       fprintf (massiv2,"%d",*(mas+i*M+j));
                       } 
                      printf ("\n") ;
fprintf (massiv2,"\n") ;
}

fclose (massiv2);

FILE *readmassiv2; //Чтение матрицы из файла //"1.txt"
readmassiv2 = fopen ("2.txt","rt");
for (i=0 ; i<N ; i++){ 
for (j=0 ; j<M; j++){
fscanf_s(readmassiv2,"%d",&(*(mas+i*M+j)));
}
fscanf_s (readmassiv2,"\n") ;
}
FILE *obrabotkamassiv2; //Обработка, и результат
obrabotkamassiv2= fopen ("2.txt","at") ; //дописывается в файл //"2.txt" 
fprintf (obrabotkamassiv2,"\n\n" );
// находим отрицательные элементы массива и если элемент меньше нуля то умножается на -1 (получается положительный)
    for (i=0;i<N;i++)	
		for (j=0;j<M;j++)
				if (*(mas+i*M+j)<0)
					*(mas+i*M+j)=*(mas+i*M+j)*(-1);
	                cout<<"\n";
                   // Вывод массива
		for (i=0;i<N;i++)	
	   	   {
			   for (j=0;j<M;j++)
				{
				printf("%d",*(mas+i*M+j));
				fprintf(obrabotkamassiv2,"%d",*(mas+i*M+j));
				}
                printf("\n");
				fprintf(obrabotkamassiv2,"\n");
				delete [] mas; // Освобождение памяти
		        }
             fclose (obrabotkamassiv2);
             fclose (readmassiv2);
             _getch ();
}

Последний раз редактировалось серг; 18.02.2010 в 22:28.
серг вне форума Ответить с цитированием
Старый 18.02.2010, 22:13   #5
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

МОЖЕТ ЗДЕСЬ НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ ДИНАМИЧЕСКИЙ МАССИВ ???
серг вне форума Ответить с цитированием
Старый 18.02.2010, 22:19   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ты с первой частью сначало разберись, она у тебя не правильно работает!!! прочитай повнимательнее что я писал в комментариях и сравни со своим кодом
NiCola999 вне форума Ответить с цитированием
Старый 18.02.2010, 22:22   #7
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

ТАМ ВСЕ УЖЕ ИСПРАВЛЕНО
серг вне форума Ответить с цитированием
Старый 18.02.2010, 22:23   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

не доконца
Код:
if (*(MAS+i)%2==0)
   ch=ch++;
   else n=n++;
}
NiCola999 вне форума Ответить с цитированием
Старый 18.02.2010, 22:27   #9
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

А ДА НЕ ЗАМЕТИЛ НО СО ВТОРОЙ ЧАСТЬЮ Я ЗАСЕЛ КОНКРЕТНО
серг вне форума Ответить с цитированием
Старый 18.02.2010, 22:46   #10
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

не правильно обьявлен двухмерный дин. массив
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще раз массив Divoha Общие вопросы C/C++ 3 27.06.2009 17:49
Еще раз о списках tae1980 Microsoft Office Excel 2 23.05.2009 16:51
С++. Еще раз файлы. androidvsu Помощь студентам 5 28.04.2009 23:16
Еще раз о EAccessViolation. Andre1723 Общие вопросы Delphi 12 23.02.2009 01:39