Премини към съдържанието
15 години Kaldata.com – време е да почерпим! Прочети още... ×

Препоръчан отговор


Здравейте, не съм от най вещите в областта и за това имам нужда от помощ. Програмата е с малко безсмислено условие, но това е което трябва да направя.

Да се състави програма, която да позволява на потребителя да въвежда данни в двумерен масив от тип структура (int а, char b, float c) и от данните по главния диагонал, на които в полето с чар пише "strong", да се взима разликата на float и int (c-a) и да се записват в едномерен масив и после от тоя едномерен масив да се отпечатат само елементите с четен индекс. Не мога да разбера къде ми е грешката. После има и други условия но за сега ще съм благодарен ако някой успее да ми помогне с това :)

#include "stdafx.h"
#include <stdlib.h>
using namespace std;
#include <iostream>
#include "stdafx.h"
 
 
 
void main()
{
system("chcp 1251");
struct str {
int a;
char b[20];
float c;
};
str M1[200][200];
float M2[200];
int i, j, k, l, n, p;
 
cout<<"vuvedete broi koloni";
cin>>i;
cout<<"vuvedete broi redove";
cin>>j;
for(k=1;k<=i;k++)
{
for(l=1;l<=j;l++)
{
cout<<k<<l<<"   vuvedete cqlo 4islo za poleto a ";
cin>> M1[k][l].a;
cout<<k<<l<<"   vuvedete text za poleto a ";
cin>> M1[k][l].b;
cout<<k<<l<<"   vuvedete realno 4islo za poleto c ";
cin>> M1[k][l].c;
}
}
for(k=0;k<=i;k++){
for(l=0;l<=j;j++)
{
if (j<=i) p=j;
else p=i;
for(n=0;n<=p;p++)
if (k=l)
if (M1[k][l].b = 'sad') M2[n]=(M1[k][l].c - M1[k][l].a);
}
}
for (n=0;n<=200;n=n+2)
cout<<M2[n];
 
system("pause");
}
 

за сега съм го оставил да сравнява със "sad" :D но трябва да е "strong"

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

#include "stdafx.h"#include <stdlib.h>using namespace std;#include <iostream>#include "stdafx.h" // Защо include-вате втори път този хедър ?void main(){	system("chcp 1251"); // Нямаме изискване, че масива ще има символи на кирилица, но както и да е - това може да го оставим	struct str {         // Добре е структури, класове и други типове данни да се дефинират извън методи. Това ще мине, но: 		int a;           // 1 . Кошмарно е да се чете такъв код, а още по - кошмарно е да се поддържа.		char b[20];      // 2. Целта на типовете данни е да се преизползват. Видимостта на тази структура е само за main метод.		float c;         // Извън него, такъв тип данна просто не съществува и ще трябва да се дефинира нанова, ако ще я ползвате 	};                   // в други методи.	str M1[200][200];	float M2[200];	int i, j, k, l, n, p;	cout<<"vuvedete broi koloni";	cin>>i;	cout<<"vuvedete broi redove";	cin>>j;	for(k=1;k<=i;k++) //Поправете циклите - променливите Ви се менят от 1 до i или j, но индексите Ви са от 0 до i-1 или j-1 !	{                 // В този вариант на кода, нещата ще се сгромолясат при k = i и l = j		for(l=1;l<=j;l++)		{			cout<<k<<l<<"   vuvedete cqlo 4islo za poleto a "; // Добре е да пооправите това подканващо съобщение. В консолата за k = 0 и l = 4. това ще е:			                                                   // 04   vuvedete cqlo 4islo za poleto a . По - четимо ще е "Vyvedete cqlo chislo za M1[0][4]: "			cin>> M1[k][l].a; 			cout<<k<<l<<"   vuvedete text za poleto a ";  //Също като горното ...			cin>> M1[k][l].b;			cout<<k<<l<<"   vuvedete realno 4islo za poleto c "; //Също като горното ...			cin>> M1[k][l].c;		}	}	// Проверка на въведените от потребителя данни ? Ако не смятате да правите такава, то поне сложете всички променливи, работещи с 	// индекси и цикли да са unsigned. В момента нищо не пречи на i и j да са < 0, а това ще Ви докара главоболия при липса на проверки.	for(k=0;k<=i;k++){		for(l=0;l<=j;j++) //Поправете циклите - променливите Ви се менят от 1 до i или j, но индексите Ви са от 0 до i-1 или j-1 !		{                 // В този вариант на кода, нещата ще се сгромолясат при k = i и l = j			if (j<=i) p=j;			else p=i;			for(n=0;n<=p;p++)			if (k=l) // Присвояване ?! Не ! Сравнение трябва да бъде тук (==)				if (M1[k][l].b = 'sad') M2[n]=(M1[k][l].c - M1[k][l].a); //Пак присвояване ! Символни низове се сравняват с strcmp метода !		}	}	for (n=0;n<=200;n=n+2) //Защо циклим до 200 (при това отново ще изгърмим при n = 200) , като ние ще имаме валиден брои елементи = min (i,j) ? 		cout<<M2[n]; // Това извеждане ще слепи всички отговори ... Добавете да се изкарва разделител (шпация/запетая/наклонена черта ...), че никой няма да разбере какво е ...	system("pause");}

Здравейте, 

 

Като една идея и съвет, може да поправите заглавието си, защото така написано, не говори абсолютно нищо. А и на теми с подобно заглавие не се гледа с добро око, нито пък се възприемат за сериозни ... Казвам Ви го, да не стане така, че след някакво време да я търсите в кошчето :).

 

Сега по самия проблем: 

Има доста забележки не само по кода, но и по форматирането му, както и дефинирането на структурата и променливите. Не правите проверки за входните данни, което предразполага доста голямо доверие към ползвателя на този код, а това както и практиката е показала е голяма грешка ... На много места излизате извън границите на паметта, която ползвате. В няколко случая ползвате знака за присвояване (=), вместо знака за сравнение (==) в условията, което ще доведе до непредвидими грешки. Има и няколко забележки по форматирането на съобщенията Ви към потребителя.

 

Приложил съм коментарите директно по кода Ви.

 

Поздрави !

Редактирано от soundtracker (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Благодаря за вниманието и критиките (отворен съм към тях)!

Програмата вече е с различен код и съм на път да се справя. 

Относно заглавието на темата, понеже програмата е за курсова и от нас се изисква да покажем какво знаем, са наблъскани много условия и за това не можах да измисля как да я кръстя по друг начин.

Благодаря отново! :)

Редактирано от reator (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Сега имам друг проблем, в началото въвеждам един низ, char strong[]={'s','t','r','o','n','g','0'}; за да мога да го сравнявам после с полетата b от структурата.

Но като стигне до реда, където трябва да прави сравняването if (strcmp (  M[o][o].b,  strong ) == 0) ; { M2[n] = M[o][o].c- M[o][o].a ; n++; }дава "Warning 1 warning C4390: ';' : empty controlled statement found; is this the intent?", което не ми е много ясно

Редактирано от reator (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

if (strcmp (  M[o][o].b,  strong ) == 0)           ;               { M2[n] = M[o][o].c- M[o][o].a ; n++; }

Добавена е ';' веднага след условния оператор. Компилатора ви казва, че терминирате условния оператор, без да указвате какво да прави, ако условието е истина. 

Съответно частта: 

  { M2[n] = M[o][o].c- M[o][o].a ; n++; }

се третира просто като блок от операции, които ще се изпълнят ВИНАГИ !

 

Съобщението доста добре Ви упътва: 

Warning 1 warning C4390: ';' : empty controlled statement found; is this the intent?

if (something_is_true) ;

се интерпретира като 

if (something_is_true) {}

Подозирам, че е неволно допуснато :).

 

Поздрави !


  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.