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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2013, 14:05   #1
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию Проблема с выводом данных в цикле С++

Всем привет)
Сидела я, тихо-мирно писала курсовик. И вдруг что-то пошло не так. А если точнее, то в цикле, в файле pogr.cpp, должно было выводиться каждое промежуточное значение p и W, но выводится только первое и последнее(хотя цикл повторяется 5 раз). Вроде курсовик уже закончен - а нет, такие вот неприятности. Не знаю что и делать, в программировании я слаба, осталось сдать курсовик и нас больше мучить им не будут (другая специальность, но на первом курсе программирование).
Сама программа и пояснительная записка к ней во вложении. Смею просить о вашей помощи.
Вложения
Тип файла: rar kyrs2.rar (82.9 Кб, 12 просмотров)
Тип файла: doc Пояснительная записка.doc (79.0 Кб, 12 просмотров)
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 16:09   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

у вот ваша ПЗ не открывается, мой либро офис пытаеца ее восстановить, но не получается.

Почему бы не выложить на форум код? - большинству лень качать что-то поэтому мы вас проигнорируем )

архив скачал, вижу стопицот файлов, какой открывать?
rrrFer вне форума Ответить с цитированием
Старый 27.06.2013, 16:12   #3
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию

Это многофайловый проект. А то, что пояснительная записка не открывается - странно, у меня всё нормально.
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 16:16   #4
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию

Текст программы

Sviaz.h
Код:
float vrem(float t[], int k);
float vhod(float Uvh[], float t[],int k);
float vihod(float Uvih[],float Uvh[], int k,float t[]);
float vivod(float t[], float Uvh[], float Uvih[], int k);
float param(float t[], float Uvh[], float Uvih[],int k);
float pogr (int k,float t[]);
int tochki(int k, float t[]);
char zast (char a[]);
float zap(float t[], float Uvh[], float Uvih[], int k);
float poc(float t[],float Uvh[],float Uvih[],int k);
float menu ();
Main.cpp
Код:
#include <stdio.h>
#include "Sviaz.h"
#include <stdlib.h>

int main()
{char pocaz[80];
zast (pocaz);
menu ();
return 0;
}
Menu.cpp
Код:
#include <stdio.h>
#include "Sviaz.h"
#include <math.h>

float menu ()
{int e, i,n;
float A[15], B[15], C[15], W, A2[1000],B2[1000],C2[1000];
e=0;
while (e!=7)
{ printf("\n\n Viberite punkt: "
        "\n 1. Pocazat massiv vremeni"
        "\n 2. Pocazat massiv vhoda"
        "\n 3. Pocazat massiv vihoda"
        "\n 4. Pocazat kontrolnyi raschet"
        "\n 5. Raschitat pogreshnost"
        "\n 6. Pocasat rezultat"
        "\n 7. Vihod iz programmi"
        "\n Vvedite zhifru: ");
    scanf("%d",&e);
    switch(e)
    {case 1: {vrem(A,15);
              for (i=0; i<15; i++) printf("\nt[%d]=%f", i+1,A[i]);
              break;}
     case 2: {vhod(B,A,15);
              for (i=0; i<15; i++) printf("\nUvh[%d]=%f", i+1,B[i]);
              break;}
     case 3: {vihod(C,B,15,A);
              for (i=0; i<15; i++) printf("\ntUvih[%d]=%f", i+1,C[i]);
              break;}
     case 4: {vivod(A,B,C,15);
              break;}
     case 5: {pogr(15,A);
              n=tochki(15,A);
              pogr(n,A2);
              break;}
     case 6: {n=tochki(15,A);
              poc(A2,B2,C2,n);
              break;}
     case 7: break;
    }}
}
Vremia.cpp
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"

float vrem(float t[],int k)
{int i;
float tn,tk,st;
tn=20; tk=90;
st=(tk-tn)/(k-1);
for (i=0; i<k; i++)
        {t[i]=tn;
        tn=tn+st;
        }

return 0;
}
Uvhoda.cpp
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"

float vhod(float Uvh[], float t[],int k)
{int i,tn,tk,t1,t2;
vrem(t,k);
tn=20; tk=90; t1=30; t2=45;
for (i=0; i<k; i++)
{if ((tn<=t[i]) && (t[i]<t1))
Uvh[i]=0;
 else
if ((t1<=t[i]) && (t[i]<t2))
Uvh[i]=(5*t[i]-150);
 else
    if((t2<=t[i]) && (t[i]<=tk))
Uvh[i]=((-5)*t[i]/3+150);}
return 0;
}
Uvihoda.cpp
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"

float vihod(float Uvih[],float Uvh[], int k,float t[])
{int i,Uvh1,Uvh12;
vrem(t,k);
vhod(Uvh,t,k);
float a1,a2,a3,b1,b2,b3;
a1=0.5;  a2=2.5;  a3=0.5;  b1=30;  b2=10;  b3=60;  Uvh1=10;  Uvh12=30;
printf("\n\n\n");
for (i=0; i<k; i++)
        if (Uvh[i]<=Uvh1)
Uvih[i]=a1*Uvh[i]+b1;
 else
if ((Uvh[i]>Uvh1) && (Uvh[i]<=Uvh12))
Uvih[i]=a2*Uvh[i]+b2;
 else
    if (Uvh[i]>Uvh12)
Uvih[i]=a3*Uvh[i]+b3;
return 0;
}
Vivod.cpp
Код:
#include <stdio.h>
#include "Sviaz.h"

float vivod(float t[], float Uvh[], float Uvih[], int k)
{int i,c;
vrem(t,k);
vhod(Uvh,t,k);
vihod(Uvih,Uvh,k,t);
printf("Otladochnaia pechat:  1.Da\n"
       "              2.Net \n"
       "Vvedite zcifru: ");
scanf("%d", &c);
switch (c)
{case 1: {printf("\n Nomer        t           Uvh         Uvih");
         for (i=0; i<k;i++) printf(" \n %2d       %6.3f       %6.3f       %6.3f", i+1, t[i], Uvh[i], Uvih[i]);
         break;}
 case 2: {break;}}
return 0;
}

Последний раз редактировалось Stilet; 27.06.2013 в 17:00.
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 16:16   #5
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию

Param.cpp
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"

float param(float t[], float Uvh[], float Uvih[],int k)
{
int i;
vrem(t,k);
vhod(Uvh,t,k);
vihod(Uvih,Uvh,k,t);
float W;
W=0;
for (i=0;i<k;i++)
{if((Uvh[i]>70)&&(Uvih[i]>70))
W=t[i];
if (W!=0) break;}
return W;
}
Pogr.cpp
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"
#include <stdlib.h>
#define N 1000
float pogr (int k,float t[])
{int i,n;
    float eps=0.1, p, time[1000], Uvh2[1000], Uvih2[1000],v,W;
 v=100000;
  for(i=0;i<N;i++)
{vrem(time,k);
vhod(Uvh2,time,k);
vihod(Uvh2,Uvih2,k,time);
W=param(time,Uvh2,Uvih2,k);
p=fabs(W-v);
    if (p>eps)
{
    k=2*k;
    v=W;}
    if(k>N)
    {
        printf("\n Oshibka N>1000 ");
        exit(0);
    }}
    printf("\n pogr=%f, W=%f",p,W);
return p;
}


Tochki.cpp
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"
#include <stdlib.h>
#define N 1000
int tochki (int k,float t[])
{int i,n;
    float eps=0.1, p, time[1000], Uvh2[1000], Uvih2[1000],v,W;
 v=100000;
  for(i=0;i<N;i++)
{vrem(time,k);
vhod(Uvh2,time,k);
vihod(Uvh2,Uvih2,k,time);
W=param(time,Uvh2,Uvih2,k);
p=fabs(W-v);
    if (p>eps)
{
    k=2*k;
    v=W;}
    if(k>N)
    {
        printf("\n Oshibka N>1000 ");
        exit(0);
    }}
    n=k;
return n;
}
Zast.cpp
Код:
#include <stdio.h>
#include "Sviaz.h"
#include <stdlib.h>
char zast (char a[])
{FILE*f;
f=fopen ("zast.txt", "r");
if (f==NULL) {printf("\n Oshibka");
              exit(1);}
while (!feof(f)) {fgets(a,80,f);
                  printf("%s",a);}
fclose(f);
printf("\n\n\n\n\n");
return 0;}
Zapis.cpp
Код:
#include <stdio.h>
#include "Sviaz.h"
#include <stdlib.h>
float zap(float t[], float Uvh[], float Uvih[], int k)
{FILE*u;
int i, c;
float W,p, eps=0.1, time[1000], Uvh2[1000], Uvih2[1000];
W=param(time,Uvh2,Uvih2,k);
p=pogr(k,time);
printf("\n\n Zapisat dannie v fail?:  1.Da\n"
       "                                         2.Net \n"
       "Vvedite zcifru: ");
scanf("%d", &c);
switch (c)
{case 1: {      u=fopen("rez.txt", "w");
                if (u==NULL) {printf("\n Oshibka");
                              exit(1);}
                fprintf(u,"\r\n Nomer        t           Uvh         Uvih\r\n");
                for (i=0; i<k;i++)
                     fprintf(u," %2d       %6.3f       %6.3f       %6.3f\r\n\n\n", i+1, time[i], Uvh2[i], Uvih2[i]);
                fprintf(u,"\r\n\n W=%8.5f   pogr=%8.5f\r\n\n\n\n", W, p);
                fclose(u);
                printf("\n Zapisano");
                break;}
 case 2:  {printf("\n Otmeneno");
                break;}}

return 0;
}
Rezult.cpp
Код:
#include <stdio.h>
#include "Sviaz.h"
#include <stdlib.h>

float poc(float t[],float Uvh[],float Uvih[],int k)
{FILE*r;
int i;
float time[1000],Uvh2[1000], Uvih2[1000],p;
char pocaz[80];
for(i=0;i<k;i++)
zap(time,Uvh2,Uvih2,k);
r=fopen ("rez.txt", "r");
if (r==NULL) {printf("\n Oshibka");
              exit(1);}
while (!feof(r)) {fgets(pocaz,80,r);
                  printf("%s",pocaz);}
fclose(r);
printf("\n\n\n\n\n\n");
return 0;
}

Последний раз редактировалось Stilet; 27.06.2013 в 17:00.
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 16:19   #6
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию

Задача:
Дана линейная электрическая цепь, на входе которой действует сигнал U_вх (t). Цепь преобразует сигнал, соответственно с передаточной характеристикой U_вых. Необходимо написать программу, формурующую массивы U_вх и U_вых, записать эти массивы во внешние текстовые файлы, вычислить параметр W с погрешностью E=0,1.

Таблица идентификаторов
Название Тип Назначение
vrem float Функция формирования массива времени
vhod float Функция формирования массива входного сигнала
vihod float Функция формирования массива выходного сигнала
vivod float Функция формирования таблицы вывода массивов
param float Функция расчёта заданного параметра
zap float Функция записи данных в текстовые файлы
zast float Функция считывания заставки с текстового файла
pogr float Функция расчёта заданной погрешности
poc float Функция считывания данных с результативного файла
main int Тело программы
i int Счётчик
a1,a2,a3 float Параметры, данные для расчёта входного и выходного сигналов
b1,b2,b3
tn,tk,t1,t2
Uvh1,Uvh2
tn float Начальное время расчёта сигналов
tk float Конечное время расчёта сигналов
st float Шаг
n int Число элементов массива
pocaz[80] char Одномерный массив
e,c int Выбор пункта меню
t[i],time[1000] float Массивы времени
Uvh,Uvh2[1000] float Массивы входного сигнала
Uvih,Uvih2[1000] float Массивы выходного сигнала
p float Текущая погрешность
eps float Заданная погрешность
v float Начальное значение параметра
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 16:20   #7
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию

Не знаю как дать ещё больше информации
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 17:35   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Да надо бы сказать где тот цикл что не работает.

А по коду:
Код:
if (f==NULL) {printf("\n Oshibka");
              exit(1);}
непомешало бы написать какая ошибка


Что-то мне подсказывает что речь вы ведете об этом:
Цитата:
Код:
case 5: {
      pogr(15,A,B,C);
              n=tochki(15,A);
              pogr(n,A2,B2,C2);
              break;
    }
Мне как бэ вкорне непонятно что тут происходит, почему и зачем pogr вызывается 2 раза, что такое "точки" и что за магическое число 15.

Но все же я не поленился и заглянул в pogr:

Код:
float eps=0.1, p, time[1000], Uvh2[1000], Uvih2[1000],v,W;
  v=100000;
  W=param(t,Uvh,Uvih,k);
  for(i=0;p>eps;i++) {
из первых же строчек видно, что переменная p не инициализируется, но используется (ваша программа будет работать никому не веданым случайным образом).

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

--------------------
А еще, научитесь форматировать код, эти ваши "}}}}}" вобще не читаются, я сделал стопицот ошибок пока пытался исправить меню (именно из за хренового форматирования)

И еще, функция vihod у вас печатает 3 перевода строки, выполняется она в цикле мильон раз и забивает весь буфер, поэтому вы и не видите что еще что-то выводится (но там и не выводилось ведь баг был, описанный выше)

Я не разбирался что там происходит в программе, я не видел, но есть ощущение что все держится на глобальных переменных и магии. После исправления явных багов, которые перечислил, для вашего файла у меня такой вывод:
Цитата:
Viberite punkt:
1. Pocazat massiv vremeni
2. Pocazat massiv vhoda
3. Pocazat massiv vihoda
4. Pocazat kontrolnyi raschet
5. Raschitat pogreshnost
6. Pocasat rezultat
7. Vihod iz programmi
Vvedite zhifru:
-----
pogr=99955.000000, W=45.000000
pogr=0.862076, W=44.137924
pogr=0.777325, W=44.915249
pogr=0.797619, W=44.117630
pogr=0.100838, W=44.016792
pogr=0.095852, W=44.112644
-----
pogr=99955.890625, W=44.112644
pogr=0.097855, W=44.014790
-----
--------------------
Но вцелом, рад был помочь )

Последний раз редактировалось rrrFer; 27.06.2013 в 18:01.
rrrFer вне форума Ответить с цитированием
Старый 27.06.2013, 18:09   #9
Inio
 
Регистрация: 27.06.2013
Сообщений: 8
По умолчанию

15 точек-это контрольный расчёт. Сначала все функции рассчитывались на 15ти точках.


float eps=0.1, p, time[1000], Uvh2[1000], Uvih2[1000],v,W;
v=100000;
W=param(t,Uvh,Uvih,k);
p=fabs(v-W); ---добавила сюда.
for(i=0;p>eps;i++) {
точки-расчёт конечного числа точек, при которых получается нужная погрешность.

Предупреждений никаких не отключала) Всё же работает, просто немного не так.
Код:
float pogr (int k,float t[],float Uvh[],float Uvih[])
{int i,n;
    float eps=0.1, p, time[1000], Uvh2[1000], Uvih2[1000],v,W;
 v=100000;
 W=param(t,Uvh,Uvih,k);
 p=fabs(W-v);
  for(i=0;p>eps;i++)
{vrem(time,k);
vhod(Uvh2,time,k);
vihod(Uvh2,Uvih2,k,time);
p=fabs(v-W);
printf("\n pogr=%f, W=%f",p,W);
    if (p>eps)
{
    k=2*k;
    v=W;
    }
    if(k>N)
    {
        printf("\n Oshibka N>1000 ");
        exit(1);
    }
    W=param(time,Uvh2,Uvih2,k);}


return p;
}
вот в этом куске мне нужно что бы при каждом проходе цикла печаталось промежуточное p и W.

Спасибо за помощь)

pogr=99955.000000, W=45.000000
pogr=0.862076, W=44.137924
pogr=0.777325, W=44.915249
pogr=0.797619, W=44.117630
pogr=0.100838, W=44.016792
pogr=0.095852, W=44.112644

Вот такой вывод мне и нужен, но как его добиться?

From Stilet: Почему код не оформляешь по правилам? Или думаешь что рабы приберут!?
Если будешь продолжать в том же духе - закрою тему.

Последний раз редактировалось Stilet; 27.06.2013 в 18:36.
Inio вне форума Ответить с цитированием
Старый 27.06.2013, 18:39   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
case 5: {
      printf("\n-----");
      pogr(15,A,B,C);
      printf("\n-----");
      n=tochki(15,A);
      pogr(n,A2,B2,C2);
      printf("\n-----");
      break;
Код:
float pogr (int k,float t[],float Uvh[],float Uvih[]) {
  int i;
  float eps=0.1, time[1000], Uvh2[1000], Uvih2[1000]
      , v = 100000, W = param(t,Uvh,Uvih,k), p = fabs(v-W);
  for(i=0;p>eps;i++) {
    vrem(time,k);
    vhod(Uvh2,time,k);
    vihod(Uvh2,Uvih2,k,time);
    p=fabs(v-W);
    printf("\n pogr=%f, W=%f",p,W);
    if (p>eps) {
      k=2*k;
      v=W;
    }
    if(k>N) {
      printf("\n Oshibka N>1000 ");
      exit(1);
    }
    W=param(time,Uvh2,Uvih2,k);
  }
  return p;
}
Код:
#include <stdio.h>
#include <math.h>
#include "Sviaz.h"
#include <stdlib.h>
#define N 1000
int tochki (int k,float t[]) {
  int i,n;
  float eps=0.1, p, time[1000], Uvh2[1000], Uvih2[1000],v = 100000, W;
  for(i=0;i<N;i++) {
    vrem(time,k);
    vhod(Uvh2,time,k);
    vihod(Uvh2,Uvih2,k,time);
    W=param(time,Uvh2,Uvih2,k);
    p=fabs(W-v);
    if (p>eps) {
      k=2*k;
      v=W;
    }
    if(k>N) {
        printf("\n Oshibka N>1000 ");
        exit(0);
    }
  }
  n = k;
  return n;
}
Код:
float vihod(float Uvih[],float Uvh[], int k,float t[]) {
  int i,Uvh1,Uvh12;
  vrem(t,k);
  vhod(Uvh,t,k);
  float a1,a2,a3,b1,b2,b3;
  a1=0.5;  a2=2.5;  a3=0.5;  b1=30;  b2=10;  b3=60;  Uvh1=10;  Uvh12=30;
  //printf("\n\n\n");
  for (i=0; i<k; i++)
    if (Uvh[i]<=Uvh1)
      Uvih[i]=a1*Uvh[i]+b1;
    else
      if ((Uvh[i]>Uvh1) && (Uvh[i]<=Uvh12))
        Uvih[i]=a2*Uvh[i]+b2;
      else
        if (Uvh[i]>Uvh12)
          Uvih[i]=a3*Uvh[i]+b3;
  return 0;
}
PS. Как ты в своем коде вобще разбираешься? - я про то, что в vihod() тьма вложенных конструкций, форматирования вобще не было. Смотреть в твой код вредно для глаз.
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом (С++) spinogryz_ua Помощь студентам 3 14.01.2013 21:45
Проблема с выводом данных в С++ justso Помощь студентам 3 19.05.2010 11:04
Структура, содержащая массивы и матрицу данных - проблема с записью и/или выводом flexin Общие вопросы C/C++ 6 09.01.2010 19:42
проблема с выводом данных из таблицы. помогите поправить france@ PHP 4 07.01.2009 12:46